diff --git a/Documentation/bluetooth/ess.rst b/Documentation/bluetooth/ess.rst
index 6a84a6aba07cdb58e34a084291562e4e8a89089b..1c5e0134dc047acaee1497971bc07cbf410be59d 100644
--- a/Documentation/bluetooth/ess.rst
+++ b/Documentation/bluetooth/ess.rst
@@ -1,9 +1,8 @@
+.. _ESS:
+
 Environmental Sensing Service
 ========================
 
-.. warning::
-    This service will be available in version v1.17
-
 The Environmental Sensing Service (ESS) implements access to
 the BME680 environmental sensor of the card10.
 
@@ -13,12 +12,25 @@ It provides:
 - Relative humidity
 - Pressure
 
+If :ref:`bsec_api` is enabled the following additional estimates are available:
+
+ - Indoor air quality (IAQ estimate
+ - Equivalent CO2 (eCO2) estimate
+
+Please refer to :ref:`bme680` for more information about BSEC.
+
 
 If notifcations are enabled a measurement of all values is performed every 3 seconds. For each measurement a notification is sent for the characteristics which have notifications enabled.
 
 
 A measurement can also be triggered by reading from a characteristic. A measurement takes roughly 200 ms. A notifciation will be sent to all characteristics which have notifications enabled except the one which was used to trigger the measurement.
 
+.. note::
+   If :ref:`bsec_api` is enabled, reading a characteristic will not trigger a new measurement.
+
+.. note::
+    This service will be available in version v1.17.
+
 
 BLE Service
 -----------
@@ -42,6 +54,11 @@ BLE Service
   UUID: ``2A6D``
   read and notify
 
+- Indoor air quality (IAQ) characteristic:
+
+  UUID: ``422302f1-2342-2342-2342-234223422342``
+  read and notify
+
 Temperature characteristic
 ---------------------------------
 
@@ -63,3 +80,20 @@ Pressure characteristic
 - 32 bit little endian value representing the measured pressure.
 
 - Unit: 0.1 Pa (0.001 hPa)
+
+Indoor air quality (IAQ) characteristic
+---------------------------------
+
+Data format:
+
+======== =========================== ===========================
+Byte 0   Bytes 1-2                   Bytes 3-4
+-------- --------------------------- ---------------------------
+Accuracy IAQ (16-bit little endian)  eCO2 (16-bit little endian)
+======== =========================== ===========================
+
+
+Units:
+
+- Accuracy and IAQ units: See :ref:`bsec_api` API description
+- CO2 unit: [ppm]
diff --git a/Documentation/card10-cfg.rst b/Documentation/card10-cfg.rst
index d37bedca43a49eec53be6a23e2383127a485c903..072911e1166ec57c81f8c5a966d16819c6b1cfa6 100644
--- a/Documentation/card10-cfg.rst
+++ b/Documentation/card10-cfg.rst
@@ -56,4 +56,10 @@ Option name        Type       Description
 ``long_press_ms``  Integer    Defines the timespan for a long key press in milliseconds.
 ------------------ ---------- -----------
 ``retrigger_ms``   Integer    Defines the timespan for repeating key presses when a key is hold in milliseconds.
+------------------ ---------- -----------
+``bsec_enable``    Boolean    Activate the Bosch :ref:`bsec_api` binary blob to compute an Indoor Air Quality indication.
+------------------ ---------- -----------
+``bsec_debug``     Boolean    Turn on debug output of the BSEC system. Prints each meaurement on the console.
+------------------ ---------- -----------
+``bsec_offset``    Integer    Temperature offset in .1 K. Example: Set to `-14` if temperature reads 1.4 "C" to high. Default: -2.2 K (appropriate for a card10 without a case, connected to USB and with BLE active in vertical orientation).
 ================== ========== ===========
diff --git a/Documentation/pycardium/ble_hid.rst b/Documentation/pycardium/ble_hid.rst
index 98f86b975e2afc9b04adc1ba91901dc2831685f3..0985d0a2326f0c29e0a3c1fce7332c18a4454879 100644
--- a/Documentation/pycardium/ble_hid.rst
+++ b/Documentation/pycardium/ble_hid.rst
@@ -3,7 +3,7 @@
 The ``ble_hid`` module provides access to the BLE Human Interface Device functionality.
 
 .. note::
-    Make sure to enable the BLE HID functionality in ``card10.cfg`` and reboot your card10
+    Make sure to enable the BLE HID functionality in :ref:`card10_cfg` and reboot your card10
     if you want to use BLE HID.
 
     Also make sure that the ``adafruit_hid`` folder from the card10 release archive is placed
diff --git a/Documentation/pycardium/bme680.rst b/Documentation/pycardium/bme680.rst
index 9bdef0245e4fe81f7317adf495a44d80f17c7c10..d6362c251134bf7bded5bf62d9eaaf5fcb01f032 100644
--- a/Documentation/pycardium/bme680.rst
+++ b/Documentation/pycardium/bme680.rst
@@ -4,6 +4,31 @@
 =================================
 Allows access to environmental data of card10's surroundings.
 
+If ``bsec_enable`` is set in :ref:`card10_cfg`, the proprietary Bosch BSEC
+library will be activated which offers the following extra functionality:
+
+ - Manual temperature offset compensation
+    The ``bsec_offset`` configuration allows to configure a static temperature
+    offset. Please use a reference thermometer to determine the offset of your
+    card10. If no offset is provided a default offset for a card10 which is
+    connected to USB, has BLE active and is without a case is used.
+ - A fixed measurement interval of 3 seconds
+    This helps to stabilize the temperature of the card10.
+ - An indoor air quality (IAQ)  and equivalent CO2 estimation algorithm
+    Please refer to the :ref:`bsec_api` API documentation to get more information
+    about how to interpret these estimates.
+
+.. note::
+   For the BSEC library to properly work the card10 should be kept running
+   for at least 10 hours at least once. This is needed as the BSEC library
+   periodically writes calibration information about the sensor to the
+   card10's file system.
+
+
+.. note::
+    See also the BLE :ref:`ESS`.
+
+
 **Example**:
 
 .. code-block:: python
@@ -21,6 +46,14 @@ Allows access to environmental data of card10's surroundings.
 
            time.sleep(1)
 
+You can use the return type of :py:meth:`~bme680.Bme680.get_data` to decide
+if you want to use/display the additonal fields returned if BSEC is enabled.
+
+.. code-block:: python
+
+    if isinstance(d, bme680.BSECData):
+        print("Air quality:    {:7d}".format(d.iaq))
+
 Sensor Class
 ------------
 
diff --git a/Documentation/pycardium/config.rst b/Documentation/pycardium/config.rst
index 926098eb1daa66b553732648eb344634626cb621..d4ac67bc351919aa7b4fdca35981e295fddf7ac0 100644
--- a/Documentation/pycardium/config.rst
+++ b/Documentation/pycardium/config.rst
@@ -1,7 +1,7 @@
 ``config`` - Configuration
 ==========================
 The ``config`` module provides functions to interact with card10's
-configuration file (``card10.cfg``).
+configuration file (:ref:`card10_cfg`).
 
 .. automodule:: config
    :members:
diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index 2e7a5cef4472d5688ae6e7a454eae686c1daf409..6e7e11227106deae08879e72a897537d50ce1487 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -263,6 +263,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] =
   {HID_INPUT_REPORT_1_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_KEYBOARD_CCC_HDL */
   {HID_INPUT_REPORT_2_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_MOUSE_CCC_HDL */
   {HID_INPUT_REPORT_3_CH_CCC_HDL,       ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},    /* HIDAPP_IN_CONSUMER_CCC_HDL */
+  {ESS_IAQ_CH_CCC_HDL,    ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},   /* BLE_ESS_IAQ_CCC_IDX */
 };
 
 /**************************************************************************************************
@@ -485,6 +486,7 @@ static void bleProcCccState(bleMsg_t *pMsg)
     case BLE_ESS_TEMP_CCC_IDX:
     case BLE_ESS_HUMI_CCC_IDX:
     case BLE_ESS_PRES_CCC_IDX:
+    case BLE_ESS_IAQ_CCC_IDX:
       bleESS_ccc_update();
     break;
   };
diff --git a/epicardium/ble/cccd.h b/epicardium/ble/cccd.h
index ea91c630617a13ad159146cf782d6860dd50a88e..5c3edf3cb64361af9e5cb841731a80318f102d90 100644
--- a/epicardium/ble/cccd.h
+++ b/epicardium/ble/cccd.h
@@ -12,6 +12,7 @@ enum
   HIDAPP_IN_KEYBOARD_CCC_HDL,           /*! HID Input Report characteristic for keyboard inputs */
   HIDAPP_IN_MOUSE_CCC_HDL,              /*! HID Input Report characteristic for mouse inputs */
   HIDAPP_IN_CONSUMER_CCC_HDL,             /*! HID Input Report characteristic for consumer control inputs */
+  BLE_ESS_IAQ_CCC_IDX,                    /*! Environmental sensing service, IAQ characteristic */
   BLE_NUM_CCC_IDX
 };
 
diff --git a/epicardium/ble/ess.c b/epicardium/ble/ess.c
index a4452e9d5d2a3685515f8bbaba9ad877f0978e64..8b26a9f90477dedd6dca91440eaaa73dc7eb4e6d 100644
--- a/epicardium/ble/ess.c
+++ b/epicardium/ble/ess.c
@@ -11,6 +11,8 @@
 #include "modules/log.h"
 #include "modules/modules.h"
 
+#include "ble/ble_api.h"
+
 #include "FreeRTOS.h"
 #include "timers.h"
 
@@ -46,7 +48,19 @@ static const uint8_t UUID_char_pressure[] = {
 	UINT16_TO_BYTES(ATT_UUID_PRESSURE)
 };
 
+/* BLE UUID for IAQ */
+static const uint8_t UUID_char_IAQ[] = {
+	ATT_PROP_READ | ATT_PROP_NOTIFY,
+	UINT16_TO_BYTES(ESS_IAQ_VAL_HDL),
+	CARD10_UUID_SUFFIX, 0xf1, CARD10_UUID_PREFIX
+};
+static const uint8_t UUID_attChar_IAQ[] = {
+	CARD10_UUID_SUFFIX, 0xf1, CARD10_UUID_PREFIX
+};
+
+
 static const uint16_t UUID_char_len = sizeof(UUID_char_temperature);
+static const uint16_t UUID_char_IAQ_len = sizeof(UUID_char_IAQ);
 
 static uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) };
 static uint16_t initTemperatureLen = sizeof(initTemperatureValue);
@@ -57,6 +71,9 @@ static uint16_t initHumidityLen = sizeof(initHumidityValue);
 static uint8_t initPressureValue[] = { UINT32_TO_BYTES(0) };
 static uint16_t initPressureLen = sizeof(initPressureValue);
 
+static uint8_t initIAQValue[] = {0x00, UINT16_TO_BYTES(0), UINT16_TO_BYTES(0)};
+static uint16_t initIAQLen = sizeof(initIAQValue);
+
 /* Temperature client characteristic configuration */
 static uint8_t essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)};
 static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc);
@@ -69,6 +86,10 @@ static const uint16_t essLenHumidityChCcc = sizeof(essValHumidityChCcc);
 static uint8_t essValPressureChCcc[] = {UINT16_TO_BYTES(0x0000)};
 static const uint16_t essLenPressureChCcc = sizeof(essValPressureChCcc);
 
+/* IAQ client characteristic configuration */
+static uint8_t essValIAQChCcc[] = {UINT16_TO_BYTES(0x0000)};
+static const uint16_t essLenIAQChCcc = sizeof(essValIAQChCcc);
+
 /* clang-format on */
 
 /*
@@ -171,6 +192,35 @@ static const attsAttr_t ESSSvcAttrList[] = {
 			 ATTS_PERMIT_WRITE) // How about security?
 	},
 
+	// IAQ
+	{
+		.pUuid       = attChUuid,
+		.pValue      = (uint8_t *)UUID_char_IAQ,
+		.pLen        = (uint16_t *)&UUID_char_IAQ_len,
+		.maxLen      = sizeof(UUID_char_IAQ),
+		.permissions = ATTS_PERMIT_READ,
+	},
+	{
+		.pUuid       = UUID_attChar_IAQ,
+		.pValue      = initIAQValue,
+		.pLen        = &initIAQLen,
+		.maxLen      = sizeof(initIAQValue),
+		.settings    = ATTS_SET_READ_CBACK,
+		.permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
+			       ATTS_PERMIT_READ_AUTH,
+	},
+	/* Characteristic CCC descriptor */
+	{
+		.pUuid    = attCliChCfgUuid,
+		.pValue   = essValIAQChCcc,
+		.pLen     = (uint16_t *)&essLenIAQChCcc,
+		.maxLen   = sizeof(essValIAQChCcc),
+		.settings = ATTS_SET_CCC,
+		.permissions =
+			(ATTS_PERMIT_READ |
+			 ATTS_PERMIT_WRITE) // How about security?
+	},
+
 };
 
 // validating that the service really has all charateristics
@@ -180,13 +230,13 @@ WSF_CT_ASSERT(
 
 static TimerHandle_t poll_timer;
 static StaticTimer_t poll_timer_buffer;
-static void bleESS_update(struct bme680_sensor_data *data);
+static void update_from_bme680(struct bme680_sensor_data *data);
 
 static void workpoll(void *data)
 {
 	struct bme680_sensor_data sensor_data;
 	if (epic_bme680_read_sensors(&sensor_data) == 0) {
-		bleESS_update(&sensor_data);
+		update_from_bme680(&sensor_data);
 	}
 }
 
@@ -254,6 +304,20 @@ static void setAttrFromBME680(struct bme680_sensor_data *data)
 	);
 }
 
+static void setAttrFromBSEC(struct bsec_sensor_data *data)
+{
+	setAttrFromBME680((struct bme680_sensor_data *)data);
+
+	uint16_t iaq            = data->indoor_air_quality;
+	uint8_t accuracy        = data->accuracy;
+	uint16_t co2_equivalent = data->co2_equivalent;
+	uint8_t IAQValue[]      = { accuracy,
+                               UINT16_TO_BYTES(iaq),
+                               UINT16_TO_BYTES(co2_equivalent) };
+
+	AttsSetAttr(ESS_IAQ_VAL_HDL, sizeof(IAQValue), IAQValue);
+}
+
 /*
  * BLE ESS read callback.
  *
@@ -301,6 +365,8 @@ static uint8_t readESSCB(
 		);
 		APP_TRACE_INFO1("ble-ess: read pressure: %u\n", pressure);
 		return ATT_SUCCESS;
+	case ESS_IAQ_VAL_HDL:
+		return ATT_SUCCESS;
 	default:
 		APP_TRACE_INFO0("ble-card10: read no handler found\n");
 		return ATT_ERR_HANDLE;
@@ -316,7 +382,7 @@ static attsGroup_t svcESSGroup = {
 	.endHandle   = ESS_END_HDL,
 };
 
-static void bleESS_update(struct bme680_sensor_data *data)
+static void update_from_bme680(struct bme680_sensor_data *data)
 {
 	setAttrFromBME680(data);
 
@@ -327,6 +393,18 @@ static void bleESS_update(struct bme680_sensor_data *data)
 	sendNotification(connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX);
 }
 
+void bleESS_update_from_bsec_data(struct bsec_sensor_data *data)
+{
+	setAttrFromBSEC(data);
+
+	/* Send notifications (if enabled) for all characteristics. */
+	dmConnId_t connId = AppConnIsOpen();
+	sendNotification(connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX);
+	sendNotification(connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX);
+	sendNotification(connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX);
+	sendNotification(connId, ESS_IAQ_VAL_HDL, BLE_ESS_IAQ_CCC_IDX);
+}
+
 /*
  * This registers and starts the ESS service.
  */
@@ -341,11 +419,16 @@ void bleESS_init(void)
  */
 void bleESS_ccc_update(void)
 {
+	if (bsec_active()) {
+		return;
+	}
+
 	dmConnId_t connId = AppConnIsOpen();
 	if (connId != DM_CONN_ID_NONE &&
 	    (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX) ||
 	     AttsCccEnabled(connId, BLE_ESS_HUMI_CCC_IDX) ||
-	     AttsCccEnabled(connId, BLE_ESS_PRES_CCC_IDX))) {
+	     AttsCccEnabled(connId, BLE_ESS_PRES_CCC_IDX) ||
+	     AttsCccEnabled(connId, BLE_ESS_IAQ_CCC_IDX))) {
 		LOG_INFO("ess", "enable periodic measurement");
 		periodic(3000);
 	} else {
diff --git a/epicardium/ble/ess.h b/epicardium/ble/ess.h
index 3f59edf8841eed21d6d57845c2a9d94f485e409d..a58a0af1bf8cda2fbb3653079ee468fc14911c39 100644
--- a/epicardium/ble/ess.h
+++ b/epicardium/ble/ess.h
@@ -22,6 +22,10 @@ enum {
 	ESS_PRESSURE_CH_HDL,
 	ESS_PRESSURE_VAL_HDL,
 	ESS_PRES_CH_CCC_HDL,                  /*!< Pressure CCCD */
+	/*!< \brief IAQ/CO2 characteristic */
+	ESS_IAQ_CH_HDL,
+	ESS_IAQ_VAL_HDL,
+	ESS_IAQ_CH_CCC_HDL,                   /*!< IAQ CCCD */
 
 
 	/*!< \brief Maximum handle. */
@@ -29,3 +33,4 @@ enum {
 };
 
 void bleESS_ccc_update(void);
+void bleESS_update_from_bsec_data(struct bsec_sensor_data *data);
diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h
index 3a2fea1a04e31e3e5c3b5a6d84d1cbbdb7445d88..2cfc527ad173a83e6e5de521caa8838ad49500a2 100644
--- a/epicardium/epicardium.h
+++ b/epicardium/epicardium.h
@@ -128,6 +128,7 @@ typedef _Bool bool;
 #define API_BME680_INIT            0xD0
 #define API_BME680_DEINIT          0xD1
 #define API_BME680_GET_DATA        0xD2
+#define API_BSEC_GET_DATA          0xD3
 
 #define API_BHI160_ENABLE          0xe0
 #define API_BHI160_DISABLE         0xe1
@@ -918,6 +919,135 @@ API(API_BME680_GET_DATA, int epic_bme680_read_sensors(
 	struct bme680_sensor_data *data
 ));
 
+/**
+ * .. _bsec_api:
+ *
+ * BSEC
+ * ----
+ * The Bosch BSEC libary allows to compute an indoor air
+ * qualtiy (IAQ) metric as well as CO2 and VOC content
+ * equivalents using the gas sensor of the BME680.
+ *
+ * As it is a proprietary binary blob, it has to be enabled using
+ * the ``bsec_enable`` configuration option (see :ref:`card10_cfg`).
+ */
+
+/**
+ * BSEC Sensor Data
+ */
+struct bsec_sensor_data {
+	/** Compensated temperature in degree celsius */
+	float temperature;
+	/** Compensated humidity in % relative humidity */
+	float humidity;
+	/** Pressure in hPa */
+	float pressure;
+	/** Gas resistance in Ohms */
+	float gas_resistance;
+	/** Timestamp in of the measurement in UNIX time (seconds since
+	 * 1970-01-01 00:00:00 UTC)*/
+	uint32_t timestamp;
+	/** Accuracy of IAQ, CO2 equivalent and breath VOC equivalent:
+	 * 0: Stabilization / run-in ongoing:
+	 *    This means that the sensor still needs to warm up. Takes about
+	 *    5 min after activation of BSEC / reboot.
+	 *
+	 * 1: Low accuracy:
+	 *    The sensor has not yet been calibrated. BSEC needs to collect
+	 *    more data to calibrate the sensor. This can take multiple
+	 *    hours.
+	 *
+	 *    BSEC documentation: To reach high accuracy(3) please expose
+	 *    sensor once to good air (e.g. outdoor air) and bad air (e.g.
+	 *    box with exhaled breath) for auto-trimming
+	 *
+	 * 2: Medium accuracy: auto-trimming ongoing
+	 *    BSEC has detected that it needs to recalibrate the sensor.
+	 *    This is an automatic process and usally finishes after tens
+	 *    of minutes. Can happen every now and then.
+	 *
+	 * 3: High accuracy:
+	 *    The sensor has warmed up and is calibrated.
+	 *
+	 * From BSEC documentation:
+	 * IAQ accuracy indicator will notify the user when they should
+	 * initiate a calibration process. Calibration is performed automatically
+	 * in the background if the sensor is exposed to clean and polluted air
+	 * for approximately 30 minutes each.
+	 *
+	 * See also:
+	 * https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME680-IAQ-accuracy-definition/m-p/5931/highlight/true#M10
+	 */
+	uint8_t accuracy;
+	/** Indoor Air Quality with range 0 to 500
+	 *
+	 * Statement from the Bosch BSEC library:
+	 *
+	 * Indoor-air-quality (IAQ) gives an indication of the relative change
+	 * in ambient TVOCs detected by BME680.
+	 *
+	 * The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air).
+	 * During operation, algorithms automatically calibrate and adapt
+	 * themselves to the typical environments where the sensor is operated
+	 * (e.g., home, workplace, inside a car, etc.).This automatic background
+	 * calibration ensures that users experience consistent IAQ performance.
+	 * The calibration process considers the recent measurement history (typ.
+	 * up to four days) to ensure that IAQ=25 corresponds to typical good air
+	 * and IAQ=250 indicates typical polluted air.
+	 *
+	 * Please also consult the BME680 datsheet (pages 9 and 21) as well:
+	 * https://git.card10.badge.events.ccc.de/card10/hardware/-/blob/master/datasheets/bosch/BST-BME680-DS001.pdf
+	 *
+	 */
+	int32_t indoor_air_quality;
+	/** Unscaled IAQ value.
+	 *
+	 * See this post for details:
+	 * https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME680-strange-IAQ-and-CO2-values/m-p/9667/highlight/true#M1505
+	 */
+	int32_t static_indoor_air_quality;
+	/** Estimation of equivalant CO2 content in the air in ppm. */
+	float co2_equivalent;
+	/** Estimation of equivalant breath VOC content in the air in ppm. */
+	float breath_voc_equivalent;
+};
+
+/**
+ *
+ * Get the current BME680 data filtered by Bosch BSEC library
+ *
+ * As it is a proprietary binary blob, it has to be enabled using
+ * the ``bsec_enable`` configuration option (see :ref:`card10_cfg`).
+ *
+ * The sample rate is currently fixed to one sample every 3 seconds.
+ * Querying the sensor more often will return cached data.
+ *
+ * After the libary has been activated it starts to calibrate the
+ * sensor. This can take multiple hours.
+ * After a reset/power on it takes about 5 minutes to stabilize
+ * the sensor if it was calibrated before.
+ *
+ * The BSEC library regularly recalibrates the sensor during operation.
+ * The ``accuracy`` field of the return data indicates the calibration
+ * status of the sensor. Please take it into consideration when
+ * using / displaying the IAQ.
+ *
+ * Please refer to the description of :c:type:`bsec_sensor_data` for more
+ * information about how to interpret its content.
+ *
+ * .. versionadded:: 1.x
+ *
+ * :param data: Where to store the environmental data.
+ * :return: 0 on success or ``-Exxx`` on error.  The following
+ *     errors might occur:
+ *
+ *     - ``-EFAULT``:  On NULL-pointer.
+ *     - ``-EINVAL``:  No data available from the sensor.
+ *     - ``-ENODEV``:  BSEC libray is not running.
+ */
+API(API_BSEC_GET_DATA, int epic_bsec_read_sensors(
+	struct bsec_sensor_data *data
+));
 /**
  * MAX86150
  * ======
diff --git a/epicardium/main.c b/epicardium/main.c
index f4c004868d8366903010f4d1664e6b2b6f3ad5af..c2acbe35af54451b70b4e6b0cfa55329334ee467 100644
--- a/epicardium/main.c
+++ b/epicardium/main.c
@@ -113,6 +113,7 @@ int main(void)
 		    NULL) != pdPASS) {
 		panic("Failed to create %s task!", "MAX30001");
 	}
+
 	/* MAX86150 */
 	if (xTaskCreate(
 		    vMAX86150Task,
@@ -123,6 +124,23 @@ int main(void)
 		    NULL) != pdPASS) {
 		panic("Failed to create %s task!", "MAX86150");
 	}
+
+	/* BSEC */
+	if (bsec_activate() == 0) {
+		if (xTaskCreate(
+			    vBSECTask,
+			    (const char *)"BSEC",
+			    configMINIMAL_STACK_SIZE * 4,
+			    NULL,
+			    tskIDLE_PRIORITY + 1,
+			    NULL) != pdPASS) {
+			LOG_CRIT(
+				"startup", "Failed to create %s task!", "BSEC"
+			);
+			abort();
+		}
+	}
+
 	/* API */
 	if (xTaskCreate(
 		    vApiDispatcher,
diff --git a/epicardium/meson.build b/epicardium/meson.build
index 6c09c1f1697778c6e1502cbef9474aac47c0c87b..f01405757ab32560234f74eebb6f7f5f9d1e0be5 100644
--- a/epicardium/meson.build
+++ b/epicardium/meson.build
@@ -103,7 +103,7 @@ elf = executable(
   ble_sources,
   version_hdr,
   version_screen,
-  dependencies: [libcard10, max32665_startup_core0, maxusb, libff13, ble, bhy1, libcrypto],
+  dependencies: [libcard10, max32665_startup_core0, maxusb, libff13, ble, bhy1, libcrypto, bsec],
   link_with: [api_dispatcher_lib, freertos],
   link_whole: [max32665_startup_core0_lib, board_card10_lib, newlib_heap_lib],
   include_directories: [freertos_includes],
diff --git a/epicardium/modules/bme680.c b/epicardium/modules/bme680.c
index c92ca1abbb43ffcf04f8e82d18d01dd3d584a981..8671559f8edfcd172627a5c32a343905686ed6a5 100644
--- a/epicardium/modules/bme680.c
+++ b/epicardium/modules/bme680.c
@@ -67,6 +67,13 @@ int epic_bme680_init()
 {
 	int8_t result = BME680_OK;
 
+	if (bsec_active()) {
+		/* If the proprietary Bosch BSEC libary is in use
+		 * we redirect calls to that. It always runs
+		 * in the background
+		 */
+		return 0;
+	}
 	if (initialized) {
 		return 0;
 	}
@@ -133,6 +140,10 @@ int epic_bme680_deinit()
 	 * penalty.
 	 */
 
+	if (bsec_active()) {
+		return 0;
+	}
+
 #if 0
 	if (!initialized) {
 		return 0;
@@ -152,11 +163,19 @@ int epic_bme680_read_sensors(struct bme680_sensor_data *data)
 {
 	int8_t result = BME680_OK;
 
+	if (bsec_active()) {
+		return bsec_read_bme680(data);
+	}
+
 	if (!initialized) {
 		LOG_ERR("bme680", "bme680 sensor not initialized");
 		return -EINVAL;
 	}
 
+	if (data == NULL) {
+		return -EFAULT;
+	}
+
 	uint16_t profile_dur = 0;
 	bme680_get_profile_dur(&profile_dur, &bme);
 
diff --git a/epicardium/modules/bsec.c b/epicardium/modules/bsec.c
new file mode 100644
index 0000000000000000000000000000000000000000..041ff9cfa2b2d58f6a528435dba018d18a12f157
--- /dev/null
+++ b/epicardium/modules/bsec.c
@@ -0,0 +1,461 @@
+/* Adapted from  bsec_iot_example.c and bsec_iot_ulp_plus_example.c */
+
+#include "card10.h"
+#include "bosch.h"
+#include "bsec_integration.h"
+
+#include "ble/ess.h"
+
+#include "epicardium.h"
+#include "modules.h"
+#include "config.h"
+#include "modules/log.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#include "max32665.h"
+#include "gcr_regs.h"
+
+#include <string.h>
+#include <stdio.h>
+
+TaskHandle_t bsec_task_id;
+static int64_t last_bme680_timestamp;
+static bool bsec_task_active;
+static bool debug;
+static struct bsec_sensor_data last_bsec_data;
+#define ULP 0
+
+// From generic_18v_3s_4d/bsec_serialized_configurations_iaq.c
+static const uint8_t bsec_config_generic_18v_3s_4d[454] = {
+	0,   8,   4,   1,   61,  0,   0,   0,   0,   0,   0,   0,   174, 1,
+	0,   0,   48,  0,   1,   0,   0,   192, 168, 71,  64,  49,  119, 76,
+	0,   0,   225, 68,  137, 65,  0,   191, 205, 204, 204, 190, 0,   0,
+	64,  191, 225, 122, 148, 190, 0,   0,   0,   0,   216, 85,  0,   100,
+	0,   0,   0,   0,   0,   0,   0,   0,   28,  0,   2,   0,   0,   244,
+	1,   225, 0,   25,  0,   0,   128, 64,  0,   0,   32,  65,  144, 1,
+	0,   0,   112, 65,  0,   0,   0,   63,  16,  0,   3,   0,   10,  215,
+	163, 60,  10,  215, 35,  59,  10,  215, 35,  59,  9,   0,   5,   0,
+	0,   0,   0,   0,   1,   88,  0,   9,   0,   7,   240, 150, 61,  0,
+	0,   0,   0,   0,   0,   0,   0,   28,  124, 225, 61,  52,  128, 215,
+	63,  0,   0,   160, 64,  0,   0,   0,   0,   0,   0,   0,   0,   205,
+	204, 12,  62,  103, 213, 39,  62,  230, 63,  76,  192, 0,   0,   0,
+	0,   0,   0,   0,   0,   145, 237, 60,  191, 251, 58,  64,  63,  177,
+	80,  131, 64,  0,   0,   0,   0,   0,   0,   0,   0,   93,  254, 227,
+	62,  54,  60,  133, 191, 0,   0,   64,  64,  12,  0,   10,  0,   0,
+	0,   0,   0,   0,   0,   0,   0,   229, 0,   254, 0,   2,   1,   5,
+	48,  117, 100, 0,   44,  1,   112, 23,  151, 7,   132, 3,   197, 0,
+	92,  4,   144, 1,   64,  1,   64,  1,   144, 1,   48,  117, 48,  117,
+	48,  117, 48,  117, 100, 0,   100, 0,   100, 0,   48,  117, 48,  117,
+	48,  117, 100, 0,   100, 0,   48,  117, 48,  117, 100, 0,   100, 0,
+	100, 0,   100, 0,   48,  117, 48,  117, 48,  117, 100, 0,   100, 0,
+	100, 0,   48,  117, 48,  117, 100, 0,   100, 0,   44,  1,   44,  1,
+	44,  1,   44,  1,   44,  1,   44,  1,   44,  1,   44,  1,   44,  1,
+	44,  1,   44,  1,   44,  1,   44,  1,   44,  1,   8,   7,   8,   7,
+	8,   7,   8,   7,   8,   7,   8,   7,   8,   7,   8,   7,   8,   7,
+	8,   7,   8,   7,   8,   7,   8,   7,   8,   7,   112, 23,  112, 23,
+	112, 23,  112, 23,  112, 23,  112, 23,  112, 23,  112, 23,  112, 23,
+	112, 23,  112, 23,  112, 23,  112, 23,  112, 23,  255, 255, 255, 255,
+	255, 255, 255, 255, 220, 5,   220, 5,   220, 5,   255, 255, 255, 255,
+	255, 255, 220, 5,   220, 5,   255, 255, 255, 255, 255, 255, 255, 255,
+	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44,  1,   0,   0,
+	0,   0,   83,  141, 0,   0
+};
+
+/*!
+ * @brief           Capture the system time in microseconds
+ *
+ * @return          system_current_time    current system timestamp in microseconds
+ */
+static int64_t get_timestamp_us()
+{
+	int64_t tick = xTaskGetTickCount();
+	return tick * 1000;
+}
+
+/*!
+ * @brief           Handling of the ready outputs
+ *
+ * @param[in]       timestamp       time in nanoseconds
+ * @param[in]       iaq             IAQ signal
+ * @param[in]       iaq_accuracy    accuracy of IAQ signal
+ * @param[in]       temperature     temperature signal
+ * @param[in]       humidity        humidity signal
+ * @param[in]       pressure        pressure signal
+ * @param[in]       raw_temperature raw temperature signal
+ * @param[in]       raw_humidity    raw humidity signal
+ * @param[in]       gas             raw gas sensor signal
+ * @param[in]       bsec_status     value returned by the bsec_do_steps() call
+ *
+ * @return          none
+ */
+static void output_ready(
+	int64_t timestamp,
+	float iaq,
+	uint8_t iaq_accuracy,
+	float temperature,
+	float humidity,
+	float pressure,
+	float raw_temperature,
+	float raw_humidity,
+	float gas,
+	bsec_library_return_t bsec_status,
+	float static_iaq,
+	float co2_equivalent,
+	float breath_voc_equivalent
+) {
+	last_bsec_data.temperature               = temperature;
+	last_bsec_data.humidity                  = humidity;
+	last_bsec_data.pressure                  = pressure / 100.;
+	last_bsec_data.gas_resistance            = gas;
+	last_bsec_data.timestamp                 = timestamp;
+	last_bsec_data.accuracy                  = iaq_accuracy;
+	last_bsec_data.indoor_air_quality        = iaq;
+	last_bsec_data.static_indoor_air_quality = static_iaq;
+	last_bsec_data.co2_equivalent            = co2_equivalent;
+	last_bsec_data.breath_voc_equivalent     = breath_voc_equivalent;
+
+	__sync_synchronize();
+
+	last_bme680_timestamp = timestamp;
+
+	bleESS_update_from_bsec_data(&last_bsec_data);
+
+	if (debug) {
+		LOG_INFO(
+			"bsec",
+			"time[ms]: %u, IAQ: %u, IAQ ACC[0-3]: %u, T[.1C]: %u, Hum[.1%%]: %u, P[Pa]: %u, Raw T[.1C]: %u, Raw Hum[.1%%]: %u, Gas[Ohm]: %u, Static IAQ: %u, CO2[ppm]: %u, Breath VOC[ppb]: %u",
+			(unsigned int)(timestamp / 1e6),
+			(unsigned int)(iaq),
+			(unsigned int)(iaq_accuracy),
+			(unsigned int)(temperature * 10),
+			(unsigned int)(humidity * 10),
+			(unsigned int)(pressure),
+			(unsigned int)(raw_temperature * 10),
+			(unsigned int)(raw_humidity * 10),
+			(unsigned int)(gas),
+			(unsigned int)(static_iaq),
+			(unsigned int)(co2_equivalent),
+			(unsigned int)(breath_voc_equivalent * 1e3)
+		);
+	}
+}
+
+int epic_bsec_read_sensors(struct bsec_sensor_data *data)
+{
+	if (data == NULL) {
+		return -EFAULT;
+	}
+	if (!bsec_task_active) {
+		return -ENODEV;
+	}
+
+	/* TODO: could also return -EINVAL */
+	while (last_bme680_timestamp == 0)
+		vTaskDelay(pdMS_TO_TICKS(10));
+
+	*data = last_bsec_data;
+	return 0;
+}
+
+static uint32_t bsec_load(char *path, uint8_t *buffer, uint32_t n_buffer)
+{
+	uint32_t len = 0;
+	int fd, res;
+
+	LOG_DEBUG("bsec", "load %s %lu", path, n_buffer);
+
+	if ((fd = epic_file_open(path, "r")) < 0) {
+		LOG_DEBUG("bsec", "Open failed");
+		return 0;
+	}
+
+	uint32_t header;
+	if ((res = epic_file_read(fd, &header, sizeof(header))) !=
+	    sizeof(header)) {
+		LOG_WARN("bsec", "Header failed");
+		goto done;
+	}
+
+	if (header > n_buffer) {
+		LOG_WARN("bsec", "Too large");
+		goto done;
+	}
+
+	if (epic_file_read(fd, buffer, header) != (int)header) {
+		LOG_WARN("bsec", "Read failed");
+		goto done;
+	}
+
+	len = header;
+
+	LOG_DEBUG("bsec", "Success");
+done:
+	epic_file_close(fd);
+	return len;
+}
+/*!
+ * @brief           Load previous library state from non-volatile memory
+ *
+ * @param[in,out]   state_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to state_buffer
+ */
+static uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer)
+{
+	return bsec_load("bsec_iaq.state", state_buffer, n_buffer);
+}
+
+/*!
+ * @brief           Save library state to non-volatile memory
+ *
+ * @param[in]       state_buffer    buffer holding the state to be stored
+ * @param[in]       length          length of the state string to be stored
+ *
+ * @return          none
+ */
+static void state_save(const uint8_t *state_buffer, uint32_t length)
+{
+	int fd, res;
+
+	LOG_DEBUG("bsec", "state_save %d", (int)length);
+
+	if ((fd = epic_file_open("bsec_iaq.state", "w")) < 0) {
+		LOG_WARN("bsec", "Open failed");
+		return;
+	}
+
+	uint32_t header = length;
+	if ((res = epic_file_write(fd, &header, sizeof(header))) !=
+	    sizeof(header)) {
+		LOG_WARN("bsec", "Header failed");
+		goto done;
+	}
+
+	if (epic_file_write(fd, state_buffer, header) != (int)header) {
+		LOG_WARN("bsec", "Write failed");
+		goto done;
+	}
+
+	LOG_DEBUG("bsec", "stack high: %lu", uxTaskGetStackHighWaterMark(NULL));
+done:
+	epic_file_close(fd);
+}
+/*!
+ * @brief           Delete the library state from non-volatile memory
+ *
+ * @return          none
+ */
+static void state_delete(void)
+{
+	LOG_DEBUG("bsec", "state_delete");
+
+	epic_file_unlink("bsec_iaq.state");
+}
+
+static int8_t
+i2c_write(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size)
+{
+	int8_t ret;
+	hwlock_acquire(HWLOCK_I2C);
+	ret = card10_bosch_i2c_write(addr, reg, p_buf, size);
+	hwlock_release(HWLOCK_I2C);
+	return ret;
+}
+
+static int8_t i2c_read(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size)
+{
+	int8_t ret;
+	hwlock_acquire(HWLOCK_I2C);
+	ret = card10_bosch_i2c_read(addr, reg, p_buf, size);
+	hwlock_release(HWLOCK_I2C);
+	return ret;
+}
+
+static void delay(uint32_t msec)
+{
+	if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) {
+		/* We need to fall back to hardware waits if not running
+		 * in a task context */
+		card10_bosch_delay(msec);
+	} else {
+		vTaskDelay(pdMS_TO_TICKS(msec));
+	}
+}
+
+/*!
+ * @brief           Load library config from non-volatile memory
+ *
+ * @param[in,out]   config_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to config_buffer
+ */
+static uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer)
+{
+	uint32_t len = bsec_load("bsec_iaq.config", config_buffer, n_buffer);
+
+	if (len == 0) {
+		LOG_INFO("bsec", "Using default bsec_config_generic_18v_3s_4d");
+		len = sizeof(bsec_config_generic_18v_3s_4d);
+		memcpy(config_buffer, bsec_config_generic_18v_3s_4d, len);
+	}
+
+	return len;
+}
+
+#if ULP
+void ulp_plus_trigger_iaq()
+{
+	/* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next
+     * possible time slot
+     */
+
+	bsec_sensor_configuration_t requested_virtual_sensors[1];
+	uint8_t n_requested_virtual_sensors = 1;
+	bsec_sensor_configuration_t
+		required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+	uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+	bsec_library_return_t status       = BSEC_OK;
+
+	/* To trigger a ULP plus, we request the IAQ virtual sensor with a specific sample rate code */
+	requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+	requested_virtual_sensors[0].sample_rate =
+		BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND;
+
+	/* Call bsec_update_subscription() to enable/disable the requested virtual sensors */
+	status = bsec_update_subscription(
+		requested_virtual_sensors,
+		n_requested_virtual_sensors,
+		required_sensor_settings,
+		&n_required_sensor_settings
+	);
+
+	/* The status code would tell is if the request was accepted. It will be rejected if the sensor is not already in
+     * ULP mode, or if the time difference between requests is too short, for example. */
+}
+#endif
+
+bool bsec_active(void)
+{
+	return bsec_task_active;
+}
+
+int bsec_read_bme680(struct bme680_sensor_data *data)
+{
+	if (!bsec_task_active) {
+		return BME680_E_COM_FAIL;
+	}
+
+	if (data == NULL) {
+		return -EFAULT;
+	}
+
+	while (last_bme680_timestamp == 0)
+		vTaskDelay(pdMS_TO_TICKS(10));
+
+	data->temperature    = last_bsec_data.temperature;
+	data->humidity       = last_bsec_data.humidity;
+	data->pressure       = last_bsec_data.pressure;
+	data->gas_resistance = last_bsec_data.gas_resistance;
+
+	return BME680_OK;
+}
+
+/**
+ * Checks config and activates the BSEC libary if requested.
+ *
+ * Initializes the BSEC library before starting the task to
+ * reduce the stack size needed for the task by at least 250 bytes
+ */
+int bsec_activate(void)
+{
+	return_values_init ret;
+#if ULP
+	float sample_rate = BSEC_SAMPLE_RATE_ULP;
+#else
+	float sample_rate = BSEC_SAMPLE_RATE_LP;
+#endif
+
+	if (!config_get_boolean_with_default("bsec_enable", false)) {
+		return -1;
+	}
+
+	debug = config_get_boolean_with_default("bsec_debug", false);
+
+	float temperature_offset =
+		config_get_integer_with_default("bsec_offset", -22) / 10.;
+	if (temperature_offset != 0.0) {
+		LOG_INFO(
+			"besec",
+			"BSEC Temp offset %d/10 K",
+			(int)(temperature_offset * 10)
+		);
+	}
+
+	/* Puts AT LEAST 2 * #BSEC_MAX_PROPERTY_BLOB_SIZE = 2 * 454 = 908 bytes onto the stack */
+	ret = bsec_iot_init(
+		sample_rate,
+		-temperature_offset,
+		i2c_write,
+		i2c_read,
+		delay,
+		state_load,
+		config_load
+	);
+
+	if (ret.bsec_status == BSEC_E_CONFIG_VERSIONMISMATCH) {
+		/* BSEC version changed and old state is not compatible anymore */
+		/* If the config is also not valid anymore, the user will have
+		 * to fix that. */
+		state_delete();
+		ret = bsec_iot_init(
+			sample_rate,
+			-temperature_offset,
+			i2c_write,
+			i2c_read,
+			delay,
+			state_load,
+			config_load
+		);
+	}
+
+	if (ret.bme680_status) {
+		LOG_WARN("bsec", "bme680 init failed: %d", ret.bme680_status);
+		/* Could not initialize BME680 */
+		return -1;
+	} else if (ret.bsec_status) {
+		LOG_WARN("bsec", "bsec init failed: %d", ret.bsec_status);
+		/* Could not initialize BSEC library */
+		return -1;
+	}
+	return 0;
+}
+
+void vBSECTask(void *pvParameters)
+{
+	bsec_task_active = true;
+	bsec_task_id     = xTaskGetCurrentTaskHandle();
+
+#if ULP
+	/* State is saved every 100 samples, which means every 100 * 300 secs = 500 minutes  */
+	const int stat_save_interval = 100;
+#else
+	/* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes  */
+	const int stat_save_interval = 10000;
+#endif
+
+	/* Call to endless loop function which reads and processes data based on sensor settings */
+	/* Puts AT LEAST 2 * BSEC_MAX_STATE_BLOB_SIZE + 8 * sizeof(bsec_input_t) =
+	 * 2 * 139 + 8 * 20 = 438 bytes onto the stack */
+	bsec_iot_loop(
+		delay,
+		get_timestamp_us,
+		output_ready,
+		state_save,
+		stat_save_interval
+	);
+}
diff --git a/epicardium/modules/meson.build b/epicardium/modules/meson.build
index 31302e9f1e9f33a19557f202173879e0811f233c..73357b195bff95194f42d9542f7f864f446eaa11 100644
--- a/epicardium/modules/meson.build
+++ b/epicardium/modules/meson.build
@@ -1,5 +1,6 @@
 module_sources = files(
   'bhi.c',
+  'bsec.c',
   'bme680.c',
   'buttons.c',
   'config.c',
diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h
index 687d8db7c5b9408d4ba874cce8acdc3626edc510..a1aab4c47bf76f87a61ab69484aa066982cbf542 100644
--- a/epicardium/modules/modules.h
+++ b/epicardium/modules/modules.h
@@ -136,6 +136,12 @@ void max30001_mutex_init(void);
 /* ---------- GPIO --------------------------------------------------------- */
 extern gpio_cfg_t gpio_configs[];
 
+/* ---------- BSEC / BME680 ------------------------------------------------ */
+int bsec_activate(void);
+void vBSECTask(void *pvParameters);
+bool bsec_active(void);
+struct bme680_sensor_data;
+int bsec_read_bme680(struct bme680_sensor_data *data);
 
 /* ---------- Sleep -------------------------------------------------------- */
 void sleep_deepsleep(void);
diff --git a/lib/meson.build b/lib/meson.build
index 2810b2dbf93ac7299bd1d0f4a6cdeec1f2de1df2..86d05cc0678947c81845e658b983d7a8c023d4d5 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -2,6 +2,7 @@ subdir('./sdk/')
 
 subdir('./vendor/Bosch/BHy1/')
 subdir('./vendor/Bosch/BME680/')
+subdir('./vendor/Bosch/BSEC/')
 subdir('./vendor/Bosch/BMA400/')
 subdir('./vendor/Maxim/MAX77650/')
 subdir('./vendor/Maxim/MAX86150/')
diff --git a/lib/vendor/Bosch/BSEC/BSEC Binary Size Information.pdf b/lib/vendor/Bosch/BSEC/BSEC Binary Size Information.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..60b394af496c3c5c2a67edd3b3dc358c8316a29d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/BSEC Binary Size Information.pdf differ
diff --git a/lib/vendor/Bosch/BSEC/Release Note_BSEC1480_07_08_2020.pdf b/lib/vendor/Bosch/BSEC/Release Note_BSEC1480_07_08_2020.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6a36515812d026b09bf4ed828d7bd1cd62bb429f
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/Release Note_BSEC1480_07_08_2020.pdf differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..d7003632e9f4e18bde84b510aa821d799b580f93
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..703e4401947ba596964bae049b40da22174cfa40
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12944	      0	   1216	  14160	   3750	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..a9b39c72dec6a11af62f009730701ee0b235c3ec
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..703e4401947ba596964bae049b40da22174cfa40
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12944	      0	   1216	  14160	   3750	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..15924658a84905f5b523b505e931286a9c82a18f
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..bfc795320b5aa8353b85d8900c9a1c8b22aa857f
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12536	      0	   1216	  13752	   35b8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..d68245982b94feae54c2ae3a32554f01cd75658d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..c716fe572f2f61ee00e61a869d7f677ba6ef32ef
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12552	      0	   1216	  13768	   35c8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..51d77437542bec8465881f95ea8aed5233550cab
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..73b21d3cb5517ccc7f78d44bf864f59ecf9398e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  13062	      0	   1216	  14278	   37c6	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..403ea112258e8268a5cecf22eab728f06163e6f4
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..c716fe572f2f61ee00e61a869d7f677ba6ef32ef
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12552	      0	   1216	  13768	   35c8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..315f3dda4b126201c2bdf981fa22710076e39e19
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..edbaf398a95e785003ff5384cbccbb3dbe305fa4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12952	      0	   1216	  14168	   3758	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..985951cdbaa4676735f1710aaf49c5bbbe62bd52
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..edbaf398a95e785003ff5384cbccbb3dbe305fa4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12952	      0	   1216	  14168	   3758	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..a0882e3cbb3eade3bf563791273d8fdedbe6fb69
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b1620613fd43d13bb243af37fae677a829790956
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12426	      0	   1216	  13642	   354a	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..c12f05e521916fa28ff483a30fcb1946b986cb5a
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..4f06519d1f3ead9fef2de82d77b6a74539a69e73
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12420	      0	   1216	  13636	   3544	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..2bf0a7f9235bf303ac8c78659dcaf18ab9215e11
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..2baae05c708d17e251713968fd853bae3036b549
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12858	      0	   1216	  14074	   36fa	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..5a3b8e5e6c337623d9f94528160b368582b6143e
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..4f06519d1f3ead9fef2de82d77b6a74539a69e73
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12420	      0	   1216	  13636	   3544	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cb1c7fd8af0a7fe752eb6d1714050c278df430c9
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/MAC/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..ab2e351dab6955147f341960563e6b5dea568909
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..5341fd3766243214c9847be3202225c13d6f56a0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  35568	      0	   1216	  36784	   8fb0	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..675f21a43e693ae78e1bcac3fb11deffc11ec023
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..8d9c3f68fb9e4f180f9584fecada044248d56198
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  35740	      0	   1216	  36956	   905c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..24e9b06b2eda1f34cf2e2f7f34b347a42456918c
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..fb3fd5f86df4cd179049f5a4b06fb13556ce9a77
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12163	      0	   1216	  13379	   3443	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..b3c647f00e0998571af8b28e4c4568a5501260d9
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..fb3fd5f86df4cd179049f5a4b06fb13556ce9a77
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12163	      0	   1216	  13379	   3443	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..5ba1ca37fa2cc4cf0bd5c04d4d16173c5ec16ea9
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..2d780dc28bdcb7e6b500b1f30f1f26b99a319dae
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  11719	      0	   1216	  12935	   3287	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..aa532ef72c8c6bcfdf3df23e178010789045e3d7
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..2d780dc28bdcb7e6b500b1f30f1f26b99a319dae
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  11719	      0	   1216	  12935	   3287	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..f8e7a6150bb539d7eae0025c39fccda5e80c283d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..f1b1dcab669c49153bf72fd232e90af2a3fa6f8b
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12655	      0	   1216	  13871	   362f	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..87d0da91f71b5596dda5b2c63d40077ed678f9d8
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..cba5555572b5c8b8227014de532ba6223cee1224
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  11735	      0	   1216	  12951	   3297	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..bee790c6b0d5790cd8095ae5f67dc536d74e6606
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b210419b5f21313f13250291d3d8dee941dd36e4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR32/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  13786	      0	   1556	  15342	   3bee	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..f4b91073444550bfbc378903ed797f5e7d312179
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..8cf6b9021021aca7d52db1131a67d886f60a2485
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  27572	      0	   1176	  28748	   704c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..dc3dcf36cf08903339ad0d08b72363edda654733
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b0227575f46060bf35ef192ccb35b6b44205d212
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  27776	      0	   1176	  28952	   7118	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..7386308393b05c0c19219f4619f37e4c472e8173
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..dfeeaab2ca081afae836e08e32ac7aa576f14248
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp32/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  14710	      0	   1216	  15926	   3e36	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..53c749c3ec7e93f96828264690eb7925b9972bee
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..c32e6c52144358aaf4d607d7805a3f2605ea3fca
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/esp/esp8266/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  17003	      0	   1216	  18219	   472b	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..3004fc52d665cf46b886c6a78344d2bae5deed55
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..c48482e0ee250a645937d48f9542c488336bf19b
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/ARMv8/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  13924	      0	   1216	  15140	   3b24	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0965581ac8b1e480761c31d4e3acf0310484fda5
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..3c6521c3724fc8d6e803a06235c2a1e38917b115
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12912	      0	   1216	  14128	   3730	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..4dc45b48533e018ae840b83f8e01f29d990628ec
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..02432d270bfebd8cad8678cc5cdc9048e4ea61be
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  13764	      0	   1216	  14980	   3a84	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cc0469d822cd2099397e963e566a1f937527a90c
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..02432d270bfebd8cad8678cc5cdc9048e4ea61be
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  13764	      0	   1216	  14980	   3a84	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..60b7f22b90a667b55a89f384fdada8b0d1c92f87
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..3b55f38a409061b6600715d52d4a2933209a8cc5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12288	      0	   1216	  13504	   34c0	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0d4d436805f53f9df9bd2969e7ab76de8044d082
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..3b55f38a409061b6600715d52d4a2933209a8cc5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12288	      0	   1216	  13504	   34c0	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..6380a538dd3bad4691819790a3da87beb4570005
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b6b3d6a1063871e4d331e5f17fdb2cfa93fe65a6
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  23988	      0	   1216	  25204	   6274	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..ff14cdf4eea731e54b9ca0b3b9206eca3d93f249
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..9bd0e12042cb5e9261199e406a907692e1de60ae
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12328	      0	   1216	  13544	   34e8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..f3be43986e7f8575bf7ed3c53fc6fab8eea18e3e
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b4bc60c1446c96bcce6b038babf7586de15ea371
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12444	      0	   1216	  13660	   355c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..d643b7b3dd7b2c2c334f4102233546e76e7f22ce
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..709fca0b87908cb77c7ffea805292672f07b9701
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  12400	      0	   1216	  13616	   3530	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..e3458d15cb3b695aeefda3e362dd3af0f82ee6ce
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..6190f703f1608fb7f57022c63422e755a80e6080
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20609	      0	   1216	  21825	   5541	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cf3b22126850dd3aa54d203e7bf3e0e3c68c6c93
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..3f0775fcee9dd82241f19c24711b6f68f4161e7d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  24871	      0	   1200	  26071	   65d7	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..053003d110458166481332767aa3327cb8484a1f
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..561879ec362b32a2aa6f4001dae4e0efb91caa02
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21428	      0	   1216	  22644	   5874	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..8372bfa15d6befd95cf000a4d95b051f8881ebcb
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..2983c4d24bc696e260a7f9720cf1e21bf9096b96
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  18920	      0	   1216	  20136	   4ea8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..023fc6442982d2bae57b0627b4c32752fffa3b7a
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..0f8169ddf34be9459acc0792aaec18c94c75d339
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21590	      0	   1182	  22772	   58f4	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..368ba86e05c54f27478121f8924a9667643ba1e5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/lite_version/inc/bsec_interface.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initalization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialised due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned phyisical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behaviour.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterature through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cd068f1313ad99128acbba84ddd51f902fea41c1
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a1fb2c471432339f5c61eb8780682253fe1bd9f2
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21276	      0	   1248	  22524	   57fc	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..5ee8baf9aad751c012e0e1541add3fa164564bbd
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a1fb2c471432339f5c61eb8780682253fe1bd9f2
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21276	      0	   1248	  22524	   57fc	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..c3d6d07d443021c08028d56191f350ffa79126bb
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a6ed8de8e2cb7f9df14f32ba1fc0bb6d7c90ac40
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20902	      0	   1248	  22150	   5686	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..998b9836b62a68458ab33447b558fabe7150c118
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..9d2aa043127a89b2d633d8c5996e64f3a0b9eb9c
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20918	      0	   1248	  22166	   5696	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..470cc2bee62f1a2a3333a60d49db1d92292c0346
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..fab0fa557e781c9e33d405c0e39974f7dd3cba55
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21458	      0	   1248	  22706	   58b2	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..5d64fa42027721eef0e2792fbc9143322f5a01b0
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..9d2aa043127a89b2d633d8c5996e64f3a0b9eb9c
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR7/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20918	      0	   1248	  22166	   5696	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..f54099106816001ac5e05841a726cbda81702992
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..537178f68fbf4ba9a829594fbbc122e1f95f24a2
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21414	      0	   1248	  22662	   5886	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..d4343569c0432059cb00e832bbfb6aab70bab47d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..537178f68fbf4ba9a829594fbbc122e1f95f24a2
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21414	      0	   1248	  22662	   5886	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..1c8554abfeb0779bdf3c243052b8507cdaf78a57
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..21e2d92ea840e4ae25086e434f4076b4c0b4bb79
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20780	      0	   1248	  22028	   560c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0a010b792c1cdc1a95f859a529f212fd3e3e0f66
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..839e9b05e1402d12703c7a7317b241afd008016e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20776	      0	   1248	  22024	   5608	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cabdfb34c4d292ab02d317077190f53abcc59f52
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..19e862d19072c444e4dd3c552c49e590cf813cfd
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21224	      0	   1248	  22472	   57c8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0d33a28e20c6bdeb1cba54c76ad01759b1bbf0ae
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..839e9b05e1402d12703c7a7317b241afd008016e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/IAR/IAR8/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20776	      0	   1248	  22024	   5608	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..cb719f71dd247332ac999b91217df7e821baf616
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/MAC/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..e5f3663cc6c590aab3c120f394df41c04a2b0792
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..6b7acc152d6435e60a80cfa51ad28fc798611fc5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV6/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  57648	      0	   1248	  58896	   e610	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..f2d32f4f0fac89248aeb1fa51161b564266ba8c4
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..0d7c6f0f5844f1c966f32ba7b502d47f6294ab00
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/RaspberryPi/PiThree_ArmV8/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  57816	      0	   1248	  59064	   e6b8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..5641082500c35269f4198c83f5e7f41e8e52aab3
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a7ce7addfdc0fbc420e802edbacf5f2b8ea1a244
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0+/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  19469	      0	   1248	  20717	   50ed	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..6e655c0fe01f3cc93eb11385f60aff90a6179d16
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a7ce7addfdc0fbc420e802edbacf5f2b8ea1a244
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M0/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  19469	      0	   1248	  20717	   50ed	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..8a2fcf6908afc7f3ac9ab654ba09e61352724720
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..ed26607a5ad39f090714091c7e8caa6cbe4c1d47
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M3/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  18721	      0	   1248	  19969	   4e01	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..c1c5ceed62bf12924795dbbc4acfa90919e658ed
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..ed26607a5ad39f090714091c7e8caa6cbe4c1d47
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  18721	      0	   1248	  19969	   4e01	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..bdca6bd708c1b0c26bf5f8c7cfc49b374e8493bb
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..db0987604d37da949df085b536a3d36a1feaaecb
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M4F/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  19767	      0	   1248	  21015	   5217	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..bac3254d42b5bcbe67ac9394350f59af7efb7119
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..33f638e1f279375c8f58e7cd445272a6d0789b06
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/armcc/Cortex_M7/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  18749	      0	   1248	  19997	   4e1d	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..ac905216313eafab37d9a81346e4fc750ac49a9b
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..217f2ce04173c09476c608dcc8b117a7a4eb1446
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR32/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  24410	      0	   1588	  25998	   658e	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..7427dc0fff421bc2bfc33152bd42023b6a30a996
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..323dd622e72d1b14b956edd1d8235fa2e4d3e8b2
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_XMEGA/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  44212	      0	   1192	  45404	   b15c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..b46f2275f2044ced8cc4261429a9f5beb7ac59be
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a8e22f5613c97ceb756a0d8681add6d30a019202
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/avr/AVR8_megaAVR/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  45000	      0	   1192	  46192	   b470	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x64/BSECLibrary64.dll b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x64/BSECLibrary64.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c3274f2f669ae3d3a60e2a1b1335bc43d7ff48cb
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x64/BSECLibrary64.dll differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x86/BSECLibrary32.dll b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x86/BSECLibrary32.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b734b56a515baba52c4cf0ac2efbcd98dd687a4d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/dll/x86/BSECLibrary32.dll differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0815f73a897a02efc165660590a0361c1b44c038
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..45ff3a34c360bcef8d2898d97489b105e8260f69
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp32/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  24446	      0	   1248	  25694	   645e	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..9e11de7a3bbe1b0165072b180c678cedbffc7259
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..fb49c5a669393807804e2f937fe63ca30a6a3f37
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/esp/esp8266/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  27954	      0	   1248	  29202	   7212	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..aad79550ad615a82a6789d10f40e3f8bde326f00
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..07afa2985d637eb3a1dec00fc3bc5c9d09daeee8
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/ARMv8/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  22796	      0	   1248	  24044	   5dec	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..453f3ace3cbb9be847e90918b7051e690d0a81d7
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a74592e3a335d4000e57226bdfe9f1e0a2c69da5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_A7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21828	      0	   1248	  23076	   5a24	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..6bb980632eb0b43cee8e28f29a19eaf6e3287282
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..d2b00c6eab614148658763ce244e70edf1738b11
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0+/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  22932	      0	   1248	  24180	   5e74	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..5b19c968a0b27d5f94044aef126e6739d8f5c6bf
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..d2b00c6eab614148658763ce244e70edf1738b11
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M0/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  22932	      0	   1248	  24180	   5e74	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..51c6242ed2eaea4962337a49cb00fdcc4f642ff7
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..cce747b4ddd8cfadde58cc6baceb301c7eb371d5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M3/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21036	      0	   1248	  22284	   570c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..9aef40ecd2c4da6a1e44d492757dbb9e7fca0c39
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..f1d740b23539f98ee3426c2651f86348f5c6378e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21044	      0	   1248	  22292	   5714	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..95db598b8be6747905b2a27bd1ba41874165021c
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..307045683b88b3e2cba2c7c5c68d1f9a22a68485
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M33F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  37182	      0	   1248	  38430	   961e	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..4168f856390480f42a6cfebd9f8434400c2aab64
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..f574fb9eaa3cf4c2d527edf4346b3e4b74ca635f
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  20944	      0	   1248	  22192	   56b0	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..0650d8682885f46c3964076337e17836fcd10fa7
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..e55ce269b236d92477baf3d75d3b0ad151e2f8e7
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M4F/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21132	      0	   1248	  22380	   576c	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..d537e5c1919c98e99a1299830d41f10392068249
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..a5db145124690ecb96a73f606e33bb68be7ee4ed
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Cortex_M7/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  21216	      0	   1248	  22464	   57c0	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..f6e8af3ce65b4cadde1aadb54190fa9e511e607d
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..0470b2744ac991e0f0b5dda809d8b6e9262c3465
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x64/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  39535	      0	   1248	  40783	   9f4f	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..76716307829508221d7d9247c10398e8db93ee20
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..d41744f408cd26aab0d541ede3c0fe4b3dbce9d4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Linux/x86/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  49266	      0	   1228	  50494	   c53e	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..32bb24e04f9a9abe74ac83325025784545a748cc
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..e3cda1b767b7ef535960ff02b3f2719b66d6699c
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x64/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  36120	      0	   1248	  37368	   91f8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib
new file mode 100644
index 0000000000000000000000000000000000000000..b3f8f82d8f7522f7d17ff13b619773d383c95964
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..0a3defc176c8827ed364ee15f5cca8ab105a41d9
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/gcc/Windows/x86/libalgobsec.lib.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  33512	      0	   1248	  34760	   87c8	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a
new file mode 100644
index 0000000000000000000000000000000000000000..2da134d20dcc65c1992285cd97799202deaee36c
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a differ
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log
new file mode 100644
index 0000000000000000000000000000000000000000..b53d3e273d68097be18097e3bef1f7f867f1edb8
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/bin/msp430-elf-gcc/libalgobsec.a.Size.log
@@ -0,0 +1,2 @@
+   text	   data	    bss	    dec	    hex	filename
+  34916	      0	   1198	  36114	   8d12	(TOTALS)
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_interface.h b/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/algo/normal_version/inc/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..082ac1a94365ea25ba6acc8d0532eb2b2b24edb6
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..f10200c35a9108d8218783f32c24f134e2b7f21d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,226,227,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..17303fc76f7099cb02b40ef780f9e0c80a9d529b
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,226,227,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_28d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..317a9d0c5c34e955f6fe25d59b4e6825e4c5d9e7
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..35b74a6d95980b0722507c9060d17bb7308face8
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,193,132,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..f742355fc3f872628a4df70df119fb895f4edc3d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,193,132,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_300s_4d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..caa3117bdbe60fbba13bb65fbe9578a8c670fbde
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..adbe7cea89ca6d22ae15a936d46748adc86d29d9
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,112,234,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..30b91e8eb092796141b443029e9af3d688811334
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,112,234,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..a398d41a009087052fa17b5a1a6cce196ff92c1b
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0bb4efe92c102519871955367f1a813ee7bf5ca3
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,83,141,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..c61e772611a69ca7808ef4ce6d2d190926011105
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,7,240,150,61,0,0,0,0,0,0,0,0,28,124,225,61,52,128,215,63,0,0,160,64,0,0,0,0,0,0,0,0,205,204,12,62,103,213,39,62,230,63,76,192,0,0,0,0,0,0,0,0,145,237,60,191,251,58,64,63,177,80,131,64,0,0,0,0,0,0,0,0,93,254,227,62,54,60,133,191,0,0,64,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,83,141,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_18v_3s_4d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..097d6d48229077efa350fe0ab1492e9167930d7b
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..3fd045cf482173aca9e90ff206dc56cfe2a36923
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,92,90,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..d650e0ae579a314151abecf7aa3dd8465c93f7bc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,92,90,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_28d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..f0d1c4ba391a760a3b868ba23916877abfc84e93
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ea78598f69cc9bae51b088ea87dde89152f4f4e3
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,127,61,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..534089038f0dc519f81bc288774665625d101754
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,117,0,0,0,0,127,61,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_300s_4d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..f2ce16cc598a39e4429a1517f46a34a3050c8d83
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a7113d05d1e87b053ff9238b827d752721702290
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,206,83,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..a2f363427e6523868d0bf9fce8f519c8e93f8195
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,168,19,73,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,206,83,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_28d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.config b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.config
new file mode 100644
index 0000000000000000000000000000000000000000..d76ed0a0e8f4d14cd0086f8d826771548e3343fd
Binary files /dev/null and b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.config differ
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.csv b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..02fd8d3a41ec3005542e47f64a3a6d030c97034e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_iaq.csv
@@ -0,0 +1 @@
+454,0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,237,52,0,0
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c
new file mode 100644
index 0000000000000000000000000000000000000000..1f3c4acabc2022085bb36a890f069d97f87c8ec5
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.c
@@ -0,0 +1,5 @@
+#include "bsec_serialized_configurations_iaq.h"
+
+const uint8_t bsec_config_iaq[454] = 
+     {0,8,4,1,61,0,0,0,0,0,0,0,174,1,0,0,48,0,1,0,0,192,168,71,64,49,119,76,0,0,225,68,137,65,0,191,205,204,204,190,0,0,64,191,225,122,148,190,0,0,0,0,216,85,0,100,0,0,0,0,0,0,0,0,28,0,2,0,0,244,1,225,0,25,0,0,128,64,0,0,32,65,144,1,0,0,112,65,0,0,0,63,16,0,3,0,10,215,163,60,10,215,35,59,10,215,35,59,9,0,5,0,0,0,0,0,1,88,0,9,0,229,208,34,62,0,0,0,0,0,0,0,0,218,27,156,62,225,11,67,64,0,0,160,64,0,0,0,0,0,0,0,0,94,75,72,189,93,254,159,64,66,62,160,191,0,0,0,0,0,0,0,0,33,31,180,190,138,176,97,64,65,241,99,190,0,0,0,0,0,0,0,0,167,121,71,61,165,189,41,192,184,30,189,64,12,0,10,0,0,0,0,0,0,0,0,0,229,0,254,0,2,1,5,48,117,100,0,44,1,112,23,151,7,132,3,197,0,92,4,144,1,64,1,64,1,144,1,48,117,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,48,117,48,117,100,0,100,0,100,0,100,0,48,117,48,117,48,117,100,0,100,0,100,0,48,117,48,117,100,0,100,0,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,112,23,255,255,255,255,255,255,255,255,220,5,220,5,220,5,255,255,255,255,255,255,220,5,220,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,1,0,0,0,0,237,52,0,0};
+
diff --git a/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h
new file mode 100644
index 0000000000000000000000000000000000000000..1986e2be683bce5daf7b3432abbd406d59bdaa2d
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/config/generic_33v_3s_4d/bsec_serialized_configurations_iaq.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern const uint8_t bsec_config_iaq[454];
+
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example.c b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example.c
new file mode 100644
index 0000000000000000000000000000000000000000..8bc4a216f22c68bfba863894fcb1c81820cb2014
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+/*!
+ * @file bsec_iot_example.c
+ *
+ * @brief
+ * Example for using of BSEC library in a fixed configuration with the BME680 sensor.
+ * This works by running an endless loop in the bsec_iot_loop() function.
+ */
+
+/*!
+ * @addtogroup bsec_examples BSEC Examples
+ * @brief BSEC usage examples
+ * @{*/
+
+/**********************************************************************************************************************/
+/* header files */
+/**********************************************************************************************************************/
+
+#include "bsec_integration.h"
+
+/**********************************************************************************************************************/
+/* functions */
+/**********************************************************************************************************************/
+
+/*!
+ * @brief           Write operation in either I2C or SPI
+ *
+ * param[in]        dev_addr        I2C or SPI device address
+ * param[in]        reg_addr        register address
+ * param[in]        reg_data_ptr    pointer to the data to be written
+ * param[in]        data_len        number of bytes to be written
+ *
+ * @return          result of the bus communication function
+ */
+int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len)
+{
+    // ...
+    // Please insert system specific function to write to the bus where BME680 is connected
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief           Read operation in either I2C or SPI
+ *
+ * param[in]        dev_addr        I2C or SPI device address
+ * param[in]        reg_addr        register address
+ * param[out]       reg_data_ptr    pointer to the memory to be used to store the read data
+ * param[in]        data_len        number of bytes to be read
+ *
+ * @return          result of the bus communication function
+ */
+int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len)
+{
+    // ...
+    // Please insert system specific function to read from bus where BME680 is connected
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief           System specific implementation of sleep function
+ *
+ * @param[in]       t_ms    time in milliseconds
+ *
+ * @return          none
+ */
+void sleep(uint32_t t_ms)
+{
+    // ...
+    // Please insert system specific function sleep or delay for t_ms milliseconds
+    // ...
+}
+
+/*!
+ * @brief           Capture the system time in microseconds
+ *
+ * @return          system_current_time    current system timestamp in microseconds
+ */
+int64_t get_timestamp_us()
+{
+    int64_t system_current_time = 0;
+    // ...
+    // Please insert system specific function to retrieve a timestamp (in microseconds)
+    // ...
+    return system_current_time;
+}
+
+/*!
+ * @brief           Handling of the ready outputs
+ *
+ * @param[in]       timestamp       time in nanoseconds
+ * @param[in]       iaq             IAQ signal
+ * @param[in]       iaq_accuracy    accuracy of IAQ signal
+ * @param[in]       temperature     temperature signal
+ * @param[in]       humidity        humidity signal
+ * @param[in]       pressure        pressure signal
+ * @param[in]       raw_temperature raw temperature signal
+ * @param[in]       raw_humidity    raw humidity signal
+ * @param[in]       gas             raw gas sensor signal
+ * @param[in]       bsec_status     value returned by the bsec_do_steps() call
+ *
+ * @return          none
+ */
+void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity,
+     float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status,
+     float static_iaq, float co2_equivalent, float breath_voc_equivalent)
+{
+    // ...
+    // Please insert system specific code to further process or display the BSEC outputs
+    // ...
+}
+
+/*!
+ * @brief           Load previous library state from non-volatile memory
+ *
+ * @param[in,out]   state_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to state_buffer
+ */
+uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer)
+{
+    // ...
+    // Load a previous library state from non-volatile memory, if available.
+    //
+    // Return zero if loading was unsuccessful or no state was available, 
+    // otherwise return length of loaded state string.
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief           Save library state to non-volatile memory
+ *
+ * @param[in]       state_buffer    buffer holding the state to be stored
+ * @param[in]       length          length of the state string to be stored
+ *
+ * @return          none
+ */
+void state_save(const uint8_t *state_buffer, uint32_t length)
+{
+    // ...
+    // Save the string some form of non-volatile memory, if possible.
+    // ...
+}
+ 
+/*!
+ * @brief           Load library config from non-volatile memory
+ *
+ * @param[in,out]   config_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to config_buffer
+ */
+uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer)
+{
+    // ...
+    // Load a library config from non-volatile memory, if available.
+    //
+    // Return zero if loading was unsuccessful or no config was available, 
+    // otherwise return length of loaded config string.
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief       Main function which configures BSEC library and then reads and processes the data from sensor based
+ *              on timer ticks
+ *
+ * @return      result of the processing
+ */
+int main()
+{
+    return_values_init ret;
+    
+    /* Call to the function which initializes the BSEC library 
+     * Switch on low-power mode and provide no temperature offset */
+    ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep, state_load, config_load);
+    if (ret.bme680_status)
+    {
+        /* Could not intialize BME680 */
+        return (int)ret.bme680_status;
+    }
+    else if (ret.bsec_status)
+    {
+        /* Could not intialize BSEC library */
+        return (int)ret.bsec_status;
+    }
+    
+    /* Call to endless loop function which reads and processes data based on sensor settings */
+    /* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes  */
+    bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 10000);
+    
+    return 0;
+}
+
+/*! @}*/
+
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.c b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.c
new file mode 100644
index 0000000000000000000000000000000000000000..5b138c0027ddc650ea0ee9892e1bb366ecc26b1e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.c
@@ -0,0 +1,1358 @@
+/**\mainpage
+ * Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved.
+ *
+ * BSD-3-Clause
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * File		bme680.c
+ * @date	23 Jan 2020
+ * @version	3.5.10
+ *
+ */
+
+/*! @file bme680.c
+ @brief Sensor driver for BME680 sensor */
+#include "bme680.h"
+
+/*!
+ * @brief This internal API is used to read the calibrated data from the sensor.
+ *
+ * This function is used to retrieve the calibration
+ * data from the image registers of the sensor.
+ *
+ * @note Registers 89h  to A1h for calibration data 1 to 24
+ *        from bit 0 to 7
+ * @note Registers E1h to F0h for calibration data 25 to 40
+ *        from bit 0 to 7
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status.
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t get_calib_data(struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to set the gas configuration of the sensor.
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status.
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t set_gas_config(struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to get the gas configuration of the sensor.
+ * @note heatr_temp and heatr_dur values are currently register data
+ * and not the actual values set
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status.
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t get_gas_config(struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the Heat duration value.
+ *
+ * @param[in] dur	:Value of the duration to be shared.
+ *
+ * @return uint8_t threshold duration after calculation.
+ */
+static uint8_t calc_heater_dur(uint16_t dur);
+
+#ifndef BME680_FLOAT_POINT_COMPENSATION
+
+/*!
+ * @brief This internal API is used to calculate the temperature value.
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] temp_adc	:Contains the temperature ADC value .
+ *
+ * @return uint32_t calculated temperature.
+ */
+static int16_t calc_temperature(uint32_t temp_adc, struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the pressure value.
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] pres_adc	:Contains the pressure ADC value .
+ *
+ * @return uint32_t calculated pressure.
+ */
+static uint32_t calc_pressure(uint32_t pres_adc, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the humidity value.
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] hum_adc	:Contains the humidity ADC value.
+ *
+ * @return uint32_t calculated humidity.
+ */
+static uint32_t calc_humidity(uint16_t hum_adc, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the Gas Resistance value.
+ *
+ * @param[in] dev		:Structure instance of bme680_dev.
+ * @param[in] gas_res_adc	:Contains the Gas Resistance ADC value.
+ * @param[in] gas_range		:Contains the range of gas values.
+ *
+ * @return uint32_t calculated gas resistance.
+ */
+static uint32_t calc_gas_resistance(uint16_t gas_res_adc, uint8_t gas_range, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the Heat Resistance value.
+ *
+ * @param[in] dev	: Structure instance of bme680_dev
+ * @param[in] temp	: Contains the target temperature value.
+ *
+ * @return uint8_t calculated heater resistance.
+ */
+static uint8_t calc_heater_res(uint16_t temp, const struct bme680_dev *dev);
+
+#else
+/*!
+ * @brief This internal API is used to calculate the
+ * temperature value value in float format
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] temp_adc	:Contains the temperature ADC value .
+ *
+ * @return Calculated temperature in float
+ */
+static float calc_temperature(uint32_t temp_adc, struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the
+ * pressure value value in float format
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] pres_adc	:Contains the pressure ADC value .
+ *
+ * @return Calculated pressure in float.
+ */
+static float calc_pressure(uint32_t pres_adc, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the
+ * humidity value value in float format
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] hum_adc	:Contains the humidity ADC value.
+ *
+ * @return Calculated humidity in float.
+ */
+static float calc_humidity(uint16_t hum_adc, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the
+ * gas resistance value value in float format
+ *
+ * @param[in] dev		:Structure instance of bme680_dev.
+ * @param[in] gas_res_adc	:Contains the Gas Resistance ADC value.
+ * @param[in] gas_range		:Contains the range of gas values.
+ *
+ * @return Calculated gas resistance in float.
+ */
+static float calc_gas_resistance(uint16_t gas_res_adc, uint8_t gas_range, const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to calculate the
+ * heater resistance value in float format
+ *
+ * @param[in] temp	: Contains the target temperature value.
+ * @param[in] dev	: Structure instance of bme680_dev.
+ *
+ * @return Calculated heater resistance in float.
+ */
+static float calc_heater_res(uint16_t temp, const struct bme680_dev *dev);
+
+#endif
+
+/*!
+ * @brief This internal API is used to calculate the field data of sensor.
+ *
+ * @param[out] data :Structure instance to hold the data
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ *  @return int8_t result of the field data from sensor.
+ */
+static int8_t read_field_data(struct bme680_field_data *data, struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to set the memory page
+ * based on register address.
+ *
+ * The value of memory page
+ *  value  | Description
+ * --------|--------------
+ *   0     | BME680_PAGE0_SPI
+ *   1     | BME680_PAGE1_SPI
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ * @param[in] reg_addr	:Contains the register address array.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t set_mem_page(uint8_t reg_addr, struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to get the memory page based
+ * on register address.
+ *
+ * The value of memory page
+ *  value  | Description
+ * --------|--------------
+ *   0     | BME680_PAGE0_SPI
+ *   1     | BME680_PAGE1_SPI
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t get_mem_page(struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to validate the device pointer for
+ * null conditions.
+ *
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t null_ptr_check(const struct bme680_dev *dev);
+
+/*!
+ * @brief This internal API is used to check the boundary
+ * conditions.
+ *
+ * @param[in] value	:pointer to the value.
+ * @param[in] min	:minimum value.
+ * @param[in] max	:maximum value.
+ * @param[in] dev	:Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+static int8_t boundary_check(uint8_t *value, uint8_t min, uint8_t max, struct bme680_dev *dev);
+
+/****************** Global Function Definitions *******************************/
+/*!
+ *@brief This API is the entry point.
+ *It reads the chip-id and calibration data from the sensor.
+ */
+int8_t bme680_init(struct bme680_dev *dev)
+{
+	int8_t rslt;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		/* Soft reset to restore it to default values*/
+		rslt = bme680_soft_reset(dev);
+		if (rslt == BME680_OK) {
+			rslt = bme680_get_regs(BME680_CHIP_ID_ADDR, &dev->chip_id, 1, dev);
+			if (rslt == BME680_OK) {
+				if (dev->chip_id == BME680_CHIP_ID) {
+					/* Get the Calibration data */
+					rslt = get_calib_data(dev);
+				} else {
+					rslt = BME680_E_DEV_NOT_FOUND;
+				}
+			}
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API reads the data from the given register address of the sensor.
+ */
+int8_t bme680_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, struct bme680_dev *dev)
+{
+	int8_t rslt;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if (dev->intf == BME680_SPI_INTF) {
+			/* Set the memory page */
+			rslt = set_mem_page(reg_addr, dev);
+			if (rslt == BME680_OK)
+				reg_addr = reg_addr | BME680_SPI_RD_MSK;
+		}
+		dev->com_rslt = dev->read(dev->dev_id, reg_addr, reg_data, len);
+		if (dev->com_rslt != 0)
+			rslt = BME680_E_COM_FAIL;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API writes the given data to the register address
+ * of the sensor.
+ */
+int8_t bme680_set_regs(const uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, struct bme680_dev *dev)
+{
+	int8_t rslt;
+	/* Length of the temporary buffer is 2*(length of register)*/
+	uint8_t tmp_buff[BME680_TMP_BUFFER_LENGTH] = { 0 };
+	uint16_t index;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if ((len > 0) && (len < BME680_TMP_BUFFER_LENGTH / 2)) {
+			/* Interleave the 2 arrays */
+			for (index = 0; index < len; index++) {
+				if (dev->intf == BME680_SPI_INTF) {
+					/* Set the memory page */
+					rslt = set_mem_page(reg_addr[index], dev);
+					tmp_buff[(2 * index)] = reg_addr[index] & BME680_SPI_WR_MSK;
+				} else {
+					tmp_buff[(2 * index)] = reg_addr[index];
+				}
+				tmp_buff[(2 * index) + 1] = reg_data[index];
+			}
+			/* Write the interleaved array */
+			if (rslt == BME680_OK) {
+				dev->com_rslt = dev->write(dev->dev_id, tmp_buff[0], &tmp_buff[1], (2 * len) - 1);
+				if (dev->com_rslt != 0)
+					rslt = BME680_E_COM_FAIL;
+			}
+		} else {
+			rslt = BME680_E_INVALID_LENGTH;
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API performs the soft reset of the sensor.
+ */
+int8_t bme680_soft_reset(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t reg_addr = BME680_SOFT_RESET_ADDR;
+	/* 0xb6 is the soft reset command */
+	uint8_t soft_rst_cmd = BME680_SOFT_RESET_CMD;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if (dev->intf == BME680_SPI_INTF)
+			rslt = get_mem_page(dev);
+
+		/* Reset the device */
+		if (rslt == BME680_OK) {
+			rslt = bme680_set_regs(&reg_addr, &soft_rst_cmd, 1, dev);
+			/* Wait for 5ms */
+			dev->delay_ms(BME680_RESET_PERIOD);
+
+			if (rslt == BME680_OK) {
+				/* After reset get the memory page */
+				if (dev->intf == BME680_SPI_INTF)
+					rslt = get_mem_page(dev);
+			}
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API is used to set the oversampling, filter and T,P,H, gas selection
+ * settings in the sensor.
+ */
+int8_t bme680_set_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t reg_addr;
+	uint8_t data = 0;
+	uint8_t count = 0;
+	uint8_t reg_array[BME680_REG_BUFFER_LENGTH] = { 0 };
+	uint8_t data_array[BME680_REG_BUFFER_LENGTH] = { 0 };
+	uint8_t intended_power_mode = dev->power_mode; /* Save intended power mode */
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if (desired_settings & BME680_GAS_MEAS_SEL)
+			rslt = set_gas_config(dev);
+
+		dev->power_mode = BME680_SLEEP_MODE;
+		if (rslt == BME680_OK)
+			rslt = bme680_set_sensor_mode(dev);
+
+		/* Selecting the filter */
+		if (desired_settings & BME680_FILTER_SEL) {
+			rslt = boundary_check(&dev->tph_sett.filter, BME680_FILTER_SIZE_0, BME680_FILTER_SIZE_127, dev);
+			reg_addr = BME680_CONF_ODR_FILT_ADDR;
+
+			if (rslt == BME680_OK)
+				rslt = bme680_get_regs(reg_addr, &data, 1, dev);
+
+			if (desired_settings & BME680_FILTER_SEL)
+				data = BME680_SET_BITS(data, BME680_FILTER, dev->tph_sett.filter);
+
+			reg_array[count] = reg_addr; /* Append configuration */
+			data_array[count] = data;
+			count++;
+		}
+
+		/* Selecting heater control for the sensor */
+		if (desired_settings & BME680_HCNTRL_SEL) {
+			rslt = boundary_check(&dev->gas_sett.heatr_ctrl, BME680_ENABLE_HEATER,
+				BME680_DISABLE_HEATER, dev);
+			reg_addr = BME680_CONF_HEAT_CTRL_ADDR;
+
+			if (rslt == BME680_OK)
+				rslt = bme680_get_regs(reg_addr, &data, 1, dev);
+			data = BME680_SET_BITS_POS_0(data, BME680_HCTRL, dev->gas_sett.heatr_ctrl);
+
+			reg_array[count] = reg_addr; /* Append configuration */
+			data_array[count] = data;
+			count++;
+		}
+
+		/* Selecting heater T,P oversampling for the sensor */
+		if (desired_settings & (BME680_OST_SEL | BME680_OSP_SEL)) {
+			rslt = boundary_check(&dev->tph_sett.os_temp, BME680_OS_NONE, BME680_OS_16X, dev);
+			reg_addr = BME680_CONF_T_P_MODE_ADDR;
+
+			if (rslt == BME680_OK)
+				rslt = bme680_get_regs(reg_addr, &data, 1, dev);
+
+			if (desired_settings & BME680_OST_SEL)
+				data = BME680_SET_BITS(data, BME680_OST, dev->tph_sett.os_temp);
+
+			if (desired_settings & BME680_OSP_SEL)
+				data = BME680_SET_BITS(data, BME680_OSP, dev->tph_sett.os_pres);
+
+			reg_array[count] = reg_addr;
+			data_array[count] = data;
+			count++;
+		}
+
+		/* Selecting humidity oversampling for the sensor */
+		if (desired_settings & BME680_OSH_SEL) {
+			rslt = boundary_check(&dev->tph_sett.os_hum, BME680_OS_NONE, BME680_OS_16X, dev);
+			reg_addr = BME680_CONF_OS_H_ADDR;
+
+			if (rslt == BME680_OK)
+				rslt = bme680_get_regs(reg_addr, &data, 1, dev);
+			data = BME680_SET_BITS_POS_0(data, BME680_OSH, dev->tph_sett.os_hum);
+
+			reg_array[count] = reg_addr; /* Append configuration */
+			data_array[count] = data;
+			count++;
+		}
+
+		/* Selecting the runGas and NB conversion settings for the sensor */
+		if (desired_settings & (BME680_RUN_GAS_SEL | BME680_NBCONV_SEL)) {
+			rslt = boundary_check(&dev->gas_sett.run_gas, BME680_RUN_GAS_DISABLE,
+				BME680_RUN_GAS_ENABLE, dev);
+			if (rslt == BME680_OK) {
+				/* Validate boundary conditions */
+				rslt = boundary_check(&dev->gas_sett.nb_conv, BME680_NBCONV_MIN,
+					BME680_NBCONV_MAX, dev);
+			}
+
+			reg_addr = BME680_CONF_ODR_RUN_GAS_NBC_ADDR;
+
+			if (rslt == BME680_OK)
+				rslt = bme680_get_regs(reg_addr, &data, 1, dev);
+
+			if (desired_settings & BME680_RUN_GAS_SEL)
+				data = BME680_SET_BITS(data, BME680_RUN_GAS, dev->gas_sett.run_gas);
+
+			if (desired_settings & BME680_NBCONV_SEL)
+				data = BME680_SET_BITS_POS_0(data, BME680_NBCONV, dev->gas_sett.nb_conv);
+
+			reg_array[count] = reg_addr; /* Append configuration */
+			data_array[count] = data;
+			count++;
+		}
+
+		if (rslt == BME680_OK)
+			rslt = bme680_set_regs(reg_array, data_array, count, dev);
+
+		/* Restore previous intended power mode */
+		dev->power_mode = intended_power_mode;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API is used to get the oversampling, filter and T,P,H, gas selection
+ * settings in the sensor.
+ */
+int8_t bme680_get_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev)
+{
+	int8_t rslt;
+	/* starting address of the register array for burst read*/
+	uint8_t reg_addr = BME680_CONF_HEAT_CTRL_ADDR;
+	uint8_t data_array[BME680_REG_BUFFER_LENGTH] = { 0 };
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		rslt = bme680_get_regs(reg_addr, data_array, BME680_REG_BUFFER_LENGTH, dev);
+
+		if (rslt == BME680_OK) {
+			if (desired_settings & BME680_GAS_MEAS_SEL)
+				rslt = get_gas_config(dev);
+
+			/* get the T,P,H ,Filter,ODR settings here */
+			if (desired_settings & BME680_FILTER_SEL)
+				dev->tph_sett.filter = BME680_GET_BITS(data_array[BME680_REG_FILTER_INDEX],
+					BME680_FILTER);
+
+			if (desired_settings & (BME680_OST_SEL | BME680_OSP_SEL)) {
+				dev->tph_sett.os_temp = BME680_GET_BITS(data_array[BME680_REG_TEMP_INDEX], BME680_OST);
+				dev->tph_sett.os_pres = BME680_GET_BITS(data_array[BME680_REG_PRES_INDEX], BME680_OSP);
+			}
+
+			if (desired_settings & BME680_OSH_SEL)
+				dev->tph_sett.os_hum = BME680_GET_BITS_POS_0(data_array[BME680_REG_HUM_INDEX],
+					BME680_OSH);
+
+			/* get the gas related settings */
+			if (desired_settings & BME680_HCNTRL_SEL)
+				dev->gas_sett.heatr_ctrl = BME680_GET_BITS_POS_0(data_array[BME680_REG_HCTRL_INDEX],
+					BME680_HCTRL);
+
+			if (desired_settings & (BME680_RUN_GAS_SEL | BME680_NBCONV_SEL)) {
+				dev->gas_sett.nb_conv = BME680_GET_BITS_POS_0(data_array[BME680_REG_NBCONV_INDEX],
+					BME680_NBCONV);
+				dev->gas_sett.run_gas = BME680_GET_BITS(data_array[BME680_REG_RUN_GAS_INDEX],
+					BME680_RUN_GAS);
+			}
+		}
+	} else {
+		rslt = BME680_E_NULL_PTR;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API is used to set the power mode of the sensor.
+ */
+int8_t bme680_set_sensor_mode(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t tmp_pow_mode;
+	uint8_t pow_mode = 0;
+	uint8_t reg_addr = BME680_CONF_T_P_MODE_ADDR;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		/* Call repeatedly until in sleep */
+		do {
+			rslt = bme680_get_regs(BME680_CONF_T_P_MODE_ADDR, &tmp_pow_mode, 1, dev);
+			if (rslt == BME680_OK) {
+				/* Put to sleep before changing mode */
+				pow_mode = (tmp_pow_mode & BME680_MODE_MSK);
+
+				if (pow_mode != BME680_SLEEP_MODE) {
+					tmp_pow_mode = tmp_pow_mode & (~BME680_MODE_MSK); /* Set to sleep */
+					rslt = bme680_set_regs(&reg_addr, &tmp_pow_mode, 1, dev);
+					dev->delay_ms(BME680_POLL_PERIOD_MS);
+				}
+			}
+		} while (pow_mode != BME680_SLEEP_MODE);
+
+		/* Already in sleep */
+		if (dev->power_mode != BME680_SLEEP_MODE) {
+			tmp_pow_mode = (tmp_pow_mode & ~BME680_MODE_MSK) | (dev->power_mode & BME680_MODE_MSK);
+			if (rslt == BME680_OK)
+				rslt = bme680_set_regs(&reg_addr, &tmp_pow_mode, 1, dev);
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API is used to get the power mode of the sensor.
+ */
+int8_t bme680_get_sensor_mode(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t mode;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		rslt = bme680_get_regs(BME680_CONF_T_P_MODE_ADDR, &mode, 1, dev);
+		/* Masking the other register bit info*/
+		dev->power_mode = mode & BME680_MODE_MSK;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This API is used to set the profile duration of the sensor.
+ */
+void bme680_set_profile_dur(uint16_t duration, struct bme680_dev *dev)
+{
+	uint32_t tph_dur; /* Calculate in us */
+	uint32_t meas_cycles;
+	uint8_t os_to_meas_cycles[6] = {0, 1, 2, 4, 8, 16};
+
+	meas_cycles = os_to_meas_cycles[dev->tph_sett.os_temp];
+	meas_cycles += os_to_meas_cycles[dev->tph_sett.os_pres];
+	meas_cycles += os_to_meas_cycles[dev->tph_sett.os_hum];
+
+	/* TPH measurement duration */
+	tph_dur = meas_cycles * UINT32_C(1963);
+	tph_dur += UINT32_C(477 * 4); /* TPH switching duration */
+	tph_dur += UINT32_C(477 * 5); /* Gas measurement duration */
+	tph_dur += UINT32_C(500); /* Get it to the closest whole number.*/
+	tph_dur /= UINT32_C(1000); /* Convert to ms */
+
+	tph_dur += UINT32_C(1); /* Wake up duration of 1ms */
+	/* The remaining time should be used for heating */
+	dev->gas_sett.heatr_dur = duration - (uint16_t) tph_dur;
+}
+
+/*!
+ * @brief This API is used to get the profile duration of the sensor.
+ */
+void bme680_get_profile_dur(uint16_t *duration, const struct bme680_dev *dev)
+{
+	uint32_t tph_dur; /* Calculate in us */
+	uint32_t meas_cycles;
+	uint8_t os_to_meas_cycles[6] = {0, 1, 2, 4, 8, 16};
+
+	meas_cycles = os_to_meas_cycles[dev->tph_sett.os_temp];
+	meas_cycles += os_to_meas_cycles[dev->tph_sett.os_pres];
+	meas_cycles += os_to_meas_cycles[dev->tph_sett.os_hum];
+
+	/* TPH measurement duration */
+	tph_dur = meas_cycles * UINT32_C(1963);
+	tph_dur += UINT32_C(477 * 4); /* TPH switching duration */
+	tph_dur += UINT32_C(477 * 5); /* Gas measurement duration */
+	tph_dur += UINT32_C(500); /* Get it to the closest whole number.*/
+	tph_dur /= UINT32_C(1000); /* Convert to ms */
+
+	tph_dur += UINT32_C(1); /* Wake up duration of 1ms */
+
+	*duration = (uint16_t) tph_dur;
+
+	/* Get the gas duration only when the run gas is enabled */
+	if (dev->gas_sett.run_gas) {
+		/* The remaining time should be used for heating */
+		*duration += dev->gas_sett.heatr_dur;
+	}
+}
+
+/*!
+ * @brief This API reads the pressure, temperature and humidity and gas data
+ * from the sensor, compensates the data and store it in the bme680_data
+ * structure instance passed by the user.
+ */
+int8_t bme680_get_sensor_data(struct bme680_field_data *data, struct bme680_dev *dev)
+{
+	int8_t rslt;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		/* Reading the sensor data in forced mode only */
+		rslt = read_field_data(data, dev);
+		if (rslt == BME680_OK) {
+			if (data->status & BME680_NEW_DATA_MSK)
+				dev->new_fields = 1;
+			else
+				dev->new_fields = 0;
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to read the calibrated data from the sensor.
+ */
+static int8_t get_calib_data(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t coeff_array[BME680_COEFF_SIZE] = { 0 };
+	uint8_t temp_var = 0; /* Temporary variable */
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		rslt = bme680_get_regs(BME680_COEFF_ADDR1, coeff_array, BME680_COEFF_ADDR1_LEN, dev);
+		/* Append the second half in the same array */
+		if (rslt == BME680_OK)
+			rslt = bme680_get_regs(BME680_COEFF_ADDR2, &coeff_array[BME680_COEFF_ADDR1_LEN]
+			, BME680_COEFF_ADDR2_LEN, dev);
+
+		/* Temperature related coefficients */
+		dev->calib.par_t1 = (uint16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_T1_MSB_REG],
+			coeff_array[BME680_T1_LSB_REG]));
+		dev->calib.par_t2 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_T2_MSB_REG],
+			coeff_array[BME680_T2_LSB_REG]));
+		dev->calib.par_t3 = (int8_t) (coeff_array[BME680_T3_REG]);
+
+		/* Pressure related coefficients */
+		dev->calib.par_p1 = (uint16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P1_MSB_REG],
+			coeff_array[BME680_P1_LSB_REG]));
+		dev->calib.par_p2 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P2_MSB_REG],
+			coeff_array[BME680_P2_LSB_REG]));
+		dev->calib.par_p3 = (int8_t) coeff_array[BME680_P3_REG];
+		dev->calib.par_p4 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P4_MSB_REG],
+			coeff_array[BME680_P4_LSB_REG]));
+		dev->calib.par_p5 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P5_MSB_REG],
+			coeff_array[BME680_P5_LSB_REG]));
+		dev->calib.par_p6 = (int8_t) (coeff_array[BME680_P6_REG]);
+		dev->calib.par_p7 = (int8_t) (coeff_array[BME680_P7_REG]);
+		dev->calib.par_p8 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P8_MSB_REG],
+			coeff_array[BME680_P8_LSB_REG]));
+		dev->calib.par_p9 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_P9_MSB_REG],
+			coeff_array[BME680_P9_LSB_REG]));
+		dev->calib.par_p10 = (uint8_t) (coeff_array[BME680_P10_REG]);
+
+		/* Humidity related coefficients */
+		dev->calib.par_h1 = (uint16_t) (((uint16_t) coeff_array[BME680_H1_MSB_REG] << BME680_HUM_REG_SHIFT_VAL)
+			| (coeff_array[BME680_H1_LSB_REG] & BME680_BIT_H1_DATA_MSK));
+		dev->calib.par_h2 = (uint16_t) (((uint16_t) coeff_array[BME680_H2_MSB_REG] << BME680_HUM_REG_SHIFT_VAL)
+			| ((coeff_array[BME680_H2_LSB_REG]) >> BME680_HUM_REG_SHIFT_VAL));
+		dev->calib.par_h3 = (int8_t) coeff_array[BME680_H3_REG];
+		dev->calib.par_h4 = (int8_t) coeff_array[BME680_H4_REG];
+		dev->calib.par_h5 = (int8_t) coeff_array[BME680_H5_REG];
+		dev->calib.par_h6 = (uint8_t) coeff_array[BME680_H6_REG];
+		dev->calib.par_h7 = (int8_t) coeff_array[BME680_H7_REG];
+
+		/* Gas heater related coefficients */
+		dev->calib.par_gh1 = (int8_t) coeff_array[BME680_GH1_REG];
+		dev->calib.par_gh2 = (int16_t) (BME680_CONCAT_BYTES(coeff_array[BME680_GH2_MSB_REG],
+			coeff_array[BME680_GH2_LSB_REG]));
+		dev->calib.par_gh3 = (int8_t) coeff_array[BME680_GH3_REG];
+
+		/* Other coefficients */
+		if (rslt == BME680_OK) {
+			rslt = bme680_get_regs(BME680_ADDR_RES_HEAT_RANGE_ADDR, &temp_var, 1, dev);
+
+			dev->calib.res_heat_range = ((temp_var & BME680_RHRANGE_MSK) / 16);
+			if (rslt == BME680_OK) {
+				rslt = bme680_get_regs(BME680_ADDR_RES_HEAT_VAL_ADDR, &temp_var, 1, dev);
+
+				dev->calib.res_heat_val = (int8_t) temp_var;
+				if (rslt == BME680_OK)
+					rslt = bme680_get_regs(BME680_ADDR_RANGE_SW_ERR_ADDR, &temp_var, 1, dev);
+			}
+		}
+		dev->calib.range_sw_err = ((int8_t) temp_var & (int8_t) BME680_RSERROR_MSK) / 16;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to set the gas configuration of the sensor.
+ */
+static int8_t set_gas_config(struct bme680_dev *dev)
+{
+	int8_t rslt;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+
+		uint8_t reg_addr[2] = {0};
+		uint8_t reg_data[2] = {0};
+
+		if (dev->power_mode == BME680_FORCED_MODE) {
+			reg_addr[0] = BME680_RES_HEAT0_ADDR;
+			reg_data[0] = calc_heater_res(dev->gas_sett.heatr_temp, dev);
+			reg_addr[1] = BME680_GAS_WAIT0_ADDR;
+			reg_data[1] = calc_heater_dur(dev->gas_sett.heatr_dur);
+			dev->gas_sett.nb_conv = 0;
+		} else {
+			rslt = BME680_W_DEFINE_PWR_MODE;
+		}
+		if (rslt == BME680_OK)
+			rslt = bme680_set_regs(reg_addr, reg_data, 2, dev);
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to get the gas configuration of the sensor.
+ * @note heatr_temp and heatr_dur values are currently register data
+ * and not the actual values set
+ */
+static int8_t get_gas_config(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	/* starting address of the register array for burst read*/
+	uint8_t reg_addr1 = BME680_ADDR_SENS_CONF_START;
+	uint8_t reg_addr2 = BME680_ADDR_GAS_CONF_START;
+	uint8_t reg_data = 0;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if (BME680_SPI_INTF == dev->intf) {
+			/* Memory page switch the SPI address*/
+			rslt = set_mem_page(reg_addr1, dev);
+		}
+
+		if (rslt == BME680_OK) {
+			rslt = bme680_get_regs(reg_addr1, &reg_data, 1, dev);
+			if (rslt == BME680_OK) {
+				dev->gas_sett.heatr_temp = reg_data;
+				rslt = bme680_get_regs(reg_addr2, &reg_data, 1, dev);
+				if (rslt == BME680_OK) {
+					/* Heating duration register value */
+					dev->gas_sett.heatr_dur = reg_data;
+				}
+			}
+		}
+	}
+
+	return rslt;
+}
+
+#ifndef BME680_FLOAT_POINT_COMPENSATION
+
+/*!
+ * @brief This internal API is used to calculate the temperature value.
+ */
+static int16_t calc_temperature(uint32_t temp_adc, struct bme680_dev *dev)
+{
+	int64_t var1;
+	int64_t var2;
+	int64_t var3;
+	int16_t calc_temp;
+
+	var1 = ((int32_t) temp_adc >> 3) - ((int32_t) dev->calib.par_t1 << 1);
+	var2 = (var1 * (int32_t) dev->calib.par_t2) >> 11;
+	var3 = ((var1 >> 1) * (var1 >> 1)) >> 12;
+	var3 = ((var3) * ((int32_t) dev->calib.par_t3 << 4)) >> 14;
+	dev->calib.t_fine = (int32_t) (var2 + var3);
+	calc_temp = (int16_t) (((dev->calib.t_fine * 5) + 128) >> 8);
+
+	return calc_temp;
+}
+
+/*!
+ * @brief This internal API is used to calculate the pressure value.
+ */
+static uint32_t calc_pressure(uint32_t pres_adc, const struct bme680_dev *dev)
+{
+	int32_t var1;
+	int32_t var2;
+	int32_t var3;
+	int32_t pressure_comp;
+
+	var1 = (((int32_t)dev->calib.t_fine) >> 1) - 64000;
+	var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) *
+		(int32_t)dev->calib.par_p6) >> 2;
+	var2 = var2 + ((var1 * (int32_t)dev->calib.par_p5) << 1);
+	var2 = (var2 >> 2) + ((int32_t)dev->calib.par_p4 << 16);
+	var1 = (((((var1 >> 2) * (var1 >> 2)) >> 13) *
+		((int32_t)dev->calib.par_p3 << 5)) >> 3) +
+		(((int32_t)dev->calib.par_p2 * var1) >> 1);
+	var1 = var1 >> 18;
+	var1 = ((32768 + var1) * (int32_t)dev->calib.par_p1) >> 15;
+	pressure_comp = 1048576 - pres_adc;
+	pressure_comp = (int32_t)((pressure_comp - (var2 >> 12)) * ((uint32_t)3125));
+	if (pressure_comp >= BME680_MAX_OVERFLOW_VAL)
+		pressure_comp = ((pressure_comp / var1) << 1);
+	else
+		pressure_comp = ((pressure_comp << 1) / var1);
+	var1 = ((int32_t)dev->calib.par_p9 * (int32_t)(((pressure_comp >> 3) *
+		(pressure_comp >> 3)) >> 13)) >> 12;
+	var2 = ((int32_t)(pressure_comp >> 2) *
+		(int32_t)dev->calib.par_p8) >> 13;
+	var3 = ((int32_t)(pressure_comp >> 8) * (int32_t)(pressure_comp >> 8) *
+		(int32_t)(pressure_comp >> 8) *
+		(int32_t)dev->calib.par_p10) >> 17;
+
+	pressure_comp = (int32_t)(pressure_comp) + ((var1 + var2 + var3 +
+		((int32_t)dev->calib.par_p7 << 7)) >> 4);
+
+	return (uint32_t)pressure_comp;
+
+}
+
+/*!
+ * @brief This internal API is used to calculate the humidity value.
+ */
+static uint32_t calc_humidity(uint16_t hum_adc, const struct bme680_dev *dev)
+{
+	int32_t var1;
+	int32_t var2;
+	int32_t var3;
+	int32_t var4;
+	int32_t var5;
+	int32_t var6;
+	int32_t temp_scaled;
+	int32_t calc_hum;
+
+	temp_scaled = (((int32_t) dev->calib.t_fine * 5) + 128) >> 8;
+	var1 = (int32_t) (hum_adc - ((int32_t) ((int32_t) dev->calib.par_h1 * 16)))
+		- (((temp_scaled * (int32_t) dev->calib.par_h3) / ((int32_t) 100)) >> 1);
+	var2 = ((int32_t) dev->calib.par_h2
+		* (((temp_scaled * (int32_t) dev->calib.par_h4) / ((int32_t) 100))
+			+ (((temp_scaled * ((temp_scaled * (int32_t) dev->calib.par_h5) / ((int32_t) 100))) >> 6)
+				/ ((int32_t) 100)) + (int32_t) (1 << 14))) >> 10;
+	var3 = var1 * var2;
+	var4 = (int32_t) dev->calib.par_h6 << 7;
+	var4 = ((var4) + ((temp_scaled * (int32_t) dev->calib.par_h7) / ((int32_t) 100))) >> 4;
+	var5 = ((var3 >> 14) * (var3 >> 14)) >> 10;
+	var6 = (var4 * var5) >> 1;
+	calc_hum = (((var3 + var6) >> 10) * ((int32_t) 1000)) >> 12;
+
+	if (calc_hum > 100000) /* Cap at 100%rH */
+		calc_hum = 100000;
+	else if (calc_hum < 0)
+		calc_hum = 0;
+
+	return (uint32_t) calc_hum;
+}
+
+/*!
+ * @brief This internal API is used to calculate the Gas Resistance value.
+ */
+static uint32_t calc_gas_resistance(uint16_t gas_res_adc, uint8_t gas_range, const struct bme680_dev *dev)
+{
+	int64_t var1;
+	uint64_t var2;
+	int64_t var3;
+	uint32_t calc_gas_res;
+	/**Look up table 1 for the possible gas range values */
+	uint32_t lookupTable1[16] = { UINT32_C(2147483647), UINT32_C(2147483647), UINT32_C(2147483647), UINT32_C(2147483647),
+		UINT32_C(2147483647), UINT32_C(2126008810), UINT32_C(2147483647), UINT32_C(2130303777),
+		UINT32_C(2147483647), UINT32_C(2147483647), UINT32_C(2143188679), UINT32_C(2136746228),
+		UINT32_C(2147483647), UINT32_C(2126008810), UINT32_C(2147483647), UINT32_C(2147483647) };
+	/**Look up table 2 for the possible gas range values */
+	uint32_t lookupTable2[16] = { UINT32_C(4096000000), UINT32_C(2048000000), UINT32_C(1024000000), UINT32_C(512000000),
+		UINT32_C(255744255), UINT32_C(127110228), UINT32_C(64000000), UINT32_C(32258064), UINT32_C(16016016),
+		UINT32_C(8000000), UINT32_C(4000000), UINT32_C(2000000), UINT32_C(1000000), UINT32_C(500000),
+		UINT32_C(250000), UINT32_C(125000) };
+
+	var1 = (int64_t) ((1340 + (5 * (int64_t) dev->calib.range_sw_err)) *
+		((int64_t) lookupTable1[gas_range])) >> 16;
+	var2 = (((int64_t) ((int64_t) gas_res_adc << 15) - (int64_t) (16777216)) + var1);
+	var3 = (((int64_t) lookupTable2[gas_range] * (int64_t) var1) >> 9);
+	calc_gas_res = (uint32_t) ((var3 + ((int64_t) var2 >> 1)) / (int64_t) var2);
+
+	return calc_gas_res;
+}
+
+/*!
+ * @brief This internal API is used to calculate the Heat Resistance value.
+ */
+static uint8_t calc_heater_res(uint16_t temp, const struct bme680_dev *dev)
+{
+	uint8_t heatr_res;
+	int32_t var1;
+	int32_t var2;
+	int32_t var3;
+	int32_t var4;
+	int32_t var5;
+	int32_t heatr_res_x100;
+
+	if (temp > 400) /* Cap temperature */
+		temp = 400;
+
+	var1 = (((int32_t) dev->amb_temp * dev->calib.par_gh3) / 1000) * 256;
+	var2 = (dev->calib.par_gh1 + 784) * (((((dev->calib.par_gh2 + 154009) * temp * 5) / 100) + 3276800) / 10);
+	var3 = var1 + (var2 / 2);
+	var4 = (var3 / (dev->calib.res_heat_range + 4));
+	var5 = (131 * dev->calib.res_heat_val) + 65536;
+	heatr_res_x100 = (int32_t) (((var4 / var5) - 250) * 34);
+	heatr_res = (uint8_t) ((heatr_res_x100 + 50) / 100);
+
+	return heatr_res;
+}
+
+#else
+
+
+/*!
+ * @brief This internal API is used to calculate the
+ * temperature value in float format
+ */
+static float calc_temperature(uint32_t temp_adc, struct bme680_dev *dev)
+{
+	float var1 = 0;
+	float var2 = 0;
+	float calc_temp = 0;
+
+	/* calculate var1 data */
+	var1  = ((((float)temp_adc / 16384.0f) - ((float)dev->calib.par_t1 / 1024.0f))
+			* ((float)dev->calib.par_t2));
+
+	/* calculate var2 data */
+	var2  = (((((float)temp_adc / 131072.0f) - ((float)dev->calib.par_t1 / 8192.0f)) *
+		(((float)temp_adc / 131072.0f) - ((float)dev->calib.par_t1 / 8192.0f))) *
+		((float)dev->calib.par_t3 * 16.0f));
+
+	/* t_fine value*/
+	dev->calib.t_fine = (var1 + var2);
+
+	/* compensated temperature data*/
+	calc_temp  = ((dev->calib.t_fine) / 5120.0f);
+
+	return calc_temp;
+}
+
+/*!
+ * @brief This internal API is used to calculate the
+ * pressure value in float format
+ */
+static float calc_pressure(uint32_t pres_adc, const struct bme680_dev *dev)
+{
+	float var1 = 0;
+	float var2 = 0;
+	float var3 = 0;
+	float calc_pres = 0;
+
+	var1 = (((float)dev->calib.t_fine / 2.0f) - 64000.0f);
+	var2 = var1 * var1 * (((float)dev->calib.par_p6) / (131072.0f));
+	var2 = var2 + (var1 * ((float)dev->calib.par_p5) * 2.0f);
+	var2 = (var2 / 4.0f) + (((float)dev->calib.par_p4) * 65536.0f);
+	var1 = (((((float)dev->calib.par_p3 * var1 * var1) / 16384.0f)
+		+ ((float)dev->calib.par_p2 * var1)) / 524288.0f);
+	var1 = ((1.0f + (var1 / 32768.0f)) * ((float)dev->calib.par_p1));
+	calc_pres = (1048576.0f - ((float)pres_adc));
+
+	/* Avoid exception caused by division by zero */
+	if ((int)var1 != 0) {
+		calc_pres = (((calc_pres - (var2 / 4096.0f)) * 6250.0f) / var1);
+		var1 = (((float)dev->calib.par_p9) * calc_pres * calc_pres) / 2147483648.0f;
+		var2 = calc_pres * (((float)dev->calib.par_p8) / 32768.0f);
+		var3 = ((calc_pres / 256.0f) * (calc_pres / 256.0f) * (calc_pres / 256.0f)
+			* (dev->calib.par_p10 / 131072.0f));
+		calc_pres = (calc_pres + (var1 + var2 + var3 + ((float)dev->calib.par_p7 * 128.0f)) / 16.0f);
+	} else {
+		calc_pres = 0;
+	}
+
+	return calc_pres;
+}
+
+/*!
+ * @brief This internal API is used to calculate the
+ * humidity value in float format
+ */
+static float calc_humidity(uint16_t hum_adc, const struct bme680_dev *dev)
+{
+	float calc_hum = 0;
+	float var1 = 0;
+	float var2 = 0;
+	float var3 = 0;
+	float var4 = 0;
+	float temp_comp;
+
+	/* compensated temperature data*/
+	temp_comp  = ((dev->calib.t_fine) / 5120.0f);
+
+	var1 = (float)((float)hum_adc) - (((float)dev->calib.par_h1 * 16.0f) + (((float)dev->calib.par_h3 / 2.0f)
+		* temp_comp));
+
+	var2 = var1 * ((float)(((float) dev->calib.par_h2 / 262144.0f) * (1.0f + (((float)dev->calib.par_h4 / 16384.0f)
+		* temp_comp) + (((float)dev->calib.par_h5 / 1048576.0f) * temp_comp * temp_comp))));
+
+	var3 = (float) dev->calib.par_h6 / 16384.0f;
+
+	var4 = (float) dev->calib.par_h7 / 2097152.0f;
+
+	calc_hum = var2 + ((var3 + (var4 * temp_comp)) * var2 * var2);
+
+	if (calc_hum > 100.0f)
+		calc_hum = 100.0f;
+	else if (calc_hum < 0.0f)
+		calc_hum = 0.0f;
+
+	return calc_hum;
+}
+
+/*!
+ * @brief This internal API is used to calculate the
+ * gas resistance value in float format
+ */
+static float calc_gas_resistance(uint16_t gas_res_adc, uint8_t gas_range, const struct bme680_dev *dev)
+{
+	float calc_gas_res;
+	float var1 = 0;
+	float var2 = 0;
+	float var3 = 0;
+
+	const float lookup_k1_range[16] = {
+	0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -0.8,
+	0.0, 0.0, -0.2, -0.5, 0.0, -1.0, 0.0, 0.0};
+	const float lookup_k2_range[16] = {
+	0.0, 0.0, 0.0, 0.0, 0.1, 0.7, 0.0, -0.8,
+	-0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+
+	var1 = (1340.0f + (5.0f * dev->calib.range_sw_err));
+	var2 = (var1) * (1.0f + lookup_k1_range[gas_range]/100.0f);
+	var3 = 1.0f + (lookup_k2_range[gas_range]/100.0f);
+
+	calc_gas_res = 1.0f / (float)(var3 * (0.000000125f) * (float)(1 << gas_range) * (((((float)gas_res_adc)
+		- 512.0f)/var2) + 1.0f));
+
+	return calc_gas_res;
+}
+
+/*!
+ * @brief This internal API is used to calculate the
+ * heater resistance value in float format
+ */
+static float calc_heater_res(uint16_t temp, const struct bme680_dev *dev)
+{
+	float var1 = 0;
+	float var2 = 0;
+	float var3 = 0;
+	float var4 = 0;
+	float var5 = 0;
+	float res_heat = 0;
+
+	if (temp > 400) /* Cap temperature */
+		temp = 400;
+
+	var1 = (((float)dev->calib.par_gh1 / (16.0f)) + 49.0f);
+	var2 = ((((float)dev->calib.par_gh2 / (32768.0f)) * (0.0005f)) + 0.00235f);
+	var3 = ((float)dev->calib.par_gh3 / (1024.0f));
+	var4 = (var1 * (1.0f + (var2 * (float)temp)));
+	var5 = (var4 + (var3 * (float)dev->amb_temp));
+	res_heat = (uint8_t)(3.4f * ((var5 * (4 / (4 + (float)dev->calib.res_heat_range)) *
+		(1/(1 + ((float) dev->calib.res_heat_val * 0.002f)))) - 25));
+
+	return res_heat;
+}
+
+#endif
+
+/*!
+ * @brief This internal API is used to calculate the Heat duration value.
+ */
+static uint8_t calc_heater_dur(uint16_t dur)
+{
+	uint8_t factor = 0;
+	uint8_t durval;
+
+	if (dur >= 0xfc0) {
+		durval = 0xff; /* Max duration*/
+	} else {
+		while (dur > 0x3F) {
+			dur = dur / 4;
+			factor += 1;
+		}
+		durval = (uint8_t) (dur + (factor * 64));
+	}
+
+	return durval;
+}
+
+/*!
+ * @brief This internal API is used to calculate the field data of sensor.
+ */
+static int8_t read_field_data(struct bme680_field_data *data, struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t buff[BME680_FIELD_LENGTH] = { 0 };
+	uint8_t gas_range;
+	uint32_t adc_temp;
+	uint32_t adc_pres;
+	uint16_t adc_hum;
+	uint16_t adc_gas_res;
+	uint8_t tries = 10;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	do {
+		if (rslt == BME680_OK) {
+			rslt = bme680_get_regs(((uint8_t) (BME680_FIELD0_ADDR)), buff, (uint16_t) BME680_FIELD_LENGTH,
+				dev);
+
+			data->status = buff[0] & BME680_NEW_DATA_MSK;
+			data->gas_index = buff[0] & BME680_GAS_INDEX_MSK;
+			data->meas_index = buff[1];
+
+			/* read the raw data from the sensor */
+			adc_pres = (uint32_t) (((uint32_t) buff[2] * 4096) | ((uint32_t) buff[3] * 16)
+				| ((uint32_t) buff[4] / 16));
+			adc_temp = (uint32_t) (((uint32_t) buff[5] * 4096) | ((uint32_t) buff[6] * 16)
+				| ((uint32_t) buff[7] / 16));
+			adc_hum = (uint16_t) (((uint32_t) buff[8] * 256) | (uint32_t) buff[9]);
+			adc_gas_res = (uint16_t) ((uint32_t) buff[13] * 4 | (((uint32_t) buff[14]) / 64));
+			gas_range = buff[14] & BME680_GAS_RANGE_MSK;
+
+			data->status |= buff[14] & BME680_GASM_VALID_MSK;
+			data->status |= buff[14] & BME680_HEAT_STAB_MSK;
+
+			if (data->status & BME680_NEW_DATA_MSK) {
+				data->temperature = calc_temperature(adc_temp, dev);
+				data->pressure = calc_pressure(adc_pres, dev);
+				data->humidity = calc_humidity(adc_hum, dev);
+				data->gas_resistance = calc_gas_resistance(adc_gas_res, gas_range, dev);
+				break;
+			}
+			/* Delay to poll the data */
+			dev->delay_ms(BME680_POLL_PERIOD_MS);
+		}
+		tries--;
+	} while (tries);
+
+	if (!tries)
+		rslt = BME680_W_NO_NEW_DATA;
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to set the memory page based on register address.
+ */
+static int8_t set_mem_page(uint8_t reg_addr, struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t reg;
+	uint8_t mem_page;
+
+	/* Check for null pointers in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		if (reg_addr > 0x7f)
+			mem_page = BME680_MEM_PAGE1;
+		else
+			mem_page = BME680_MEM_PAGE0;
+
+		if (mem_page != dev->mem_page) {
+			dev->mem_page = mem_page;
+
+			dev->com_rslt = dev->read(dev->dev_id, BME680_MEM_PAGE_ADDR | BME680_SPI_RD_MSK, &reg, 1);
+			if (dev->com_rslt != 0)
+				rslt = BME680_E_COM_FAIL;
+
+			if (rslt == BME680_OK) {
+				reg = reg & (~BME680_MEM_PAGE_MSK);
+				reg = reg | (dev->mem_page & BME680_MEM_PAGE_MSK);
+
+				dev->com_rslt = dev->write(dev->dev_id, BME680_MEM_PAGE_ADDR & BME680_SPI_WR_MSK,
+					&reg, 1);
+				if (dev->com_rslt != 0)
+					rslt = BME680_E_COM_FAIL;
+			}
+		}
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to get the memory page based on register address.
+ */
+static int8_t get_mem_page(struct bme680_dev *dev)
+{
+	int8_t rslt;
+	uint8_t reg;
+
+	/* Check for null pointer in the device structure*/
+	rslt = null_ptr_check(dev);
+	if (rslt == BME680_OK) {
+		dev->com_rslt = dev->read(dev->dev_id, BME680_MEM_PAGE_ADDR | BME680_SPI_RD_MSK, &reg, 1);
+		if (dev->com_rslt != 0)
+			rslt = BME680_E_COM_FAIL;
+		else
+			dev->mem_page = reg & BME680_MEM_PAGE_MSK;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to validate the boundary
+ * conditions.
+ */
+static int8_t boundary_check(uint8_t *value, uint8_t min, uint8_t max, struct bme680_dev *dev)
+{
+	int8_t rslt = BME680_OK;
+
+	if (value != NULL) {
+		/* Check if value is below minimum value */
+		if (*value < min) {
+			/* Auto correct the invalid value to minimum value */
+			*value = min;
+			dev->info_msg |= BME680_I_MIN_CORRECTION;
+		}
+		/* Check if value is above maximum value */
+		if (*value > max) {
+			/* Auto correct the invalid value to maximum value */
+			*value = max;
+			dev->info_msg |= BME680_I_MAX_CORRECTION;
+		}
+	} else {
+		rslt = BME680_E_NULL_PTR;
+	}
+
+	return rslt;
+}
+
+/*!
+ * @brief This internal API is used to validate the device structure pointer for
+ * null conditions.
+ */
+static int8_t null_ptr_check(const struct bme680_dev *dev)
+{
+	int8_t rslt;
+
+	if ((dev == NULL) || (dev->read == NULL) || (dev->write == NULL) || (dev->delay_ms == NULL)) {
+		/* Device structure pointer is not valid */
+		rslt = BME680_E_NULL_PTR;
+	} else {
+		/* Device structure is fine */
+		rslt = BME680_OK;
+	}
+
+	return rslt;
+}
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.h b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.h
new file mode 100644
index 0000000000000000000000000000000000000000..f436215a3471b0eb43d6f1c9e11aceca538cb6aa
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680.h
@@ -0,0 +1,216 @@
+/**
+ * Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved.
+ *
+ * BSD-3-Clause
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @file	bme680.h
+ * @date	23 Jan 2020
+ * @version	3.5.10
+ * @brief
+ *
+ */
+/*! @file bme680.h
+ @brief Sensor driver for BME680 sensor */
+/*!
+ * @defgroup BME680 SENSOR API
+ * @{*/
+#ifndef BME680_H_
+#define BME680_H_
+
+/*! CPP guard */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Header includes */
+#include "bme680_defs.h"
+
+/* function prototype declarations */
+/*!
+ *  @brief This API is the entry point.
+ *  It reads the chip-id and calibration data from the sensor.
+ *
+ *  @param[in,out] dev : Structure instance of bme680_dev
+ *
+ *  @return Result of API execution status
+ *  @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_init(struct bme680_dev *dev);
+
+/*!
+ * @brief This API writes the given data to the register address
+ * of the sensor.
+ *
+ * @param[in] reg_addr : Register address from where the data to be written.
+ * @param[in] reg_data : Pointer to data buffer which is to be written
+ * in the sensor.
+ * @param[in] len : No of bytes of data to write..
+ * @param[in] dev : Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_set_regs(const uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, struct bme680_dev *dev);
+
+/*!
+ * @brief This API reads the data from the given register address of the sensor.
+ *
+ * @param[in] reg_addr : Register address from where the data to be read
+ * @param[out] reg_data : Pointer to data buffer to store the read data.
+ * @param[in] len : No of bytes of data to be read.
+ * @param[in] dev : Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, struct bme680_dev *dev);
+
+/*!
+ * @brief This API performs the soft reset of the sensor.
+ *
+ * @param[in] dev : Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error.
+ */
+int8_t bme680_soft_reset(struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to set the power mode of the sensor.
+ *
+ * @param[in] dev : Structure instance of bme680_dev
+ * @note : Pass the value to bme680_dev.power_mode structure variable.
+ *
+ *  value	|	mode
+ * -------------|------------------
+ *	0x00	|	BME680_SLEEP_MODE
+ *	0x01	|	BME680_FORCED_MODE
+ *
+ * * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_set_sensor_mode(struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to get the power mode of the sensor.
+ *
+ * @param[in] dev : Structure instance of bme680_dev
+ * @note : bme680_dev.power_mode structure variable hold the power mode.
+ *
+ *  value	|	mode
+ * ---------|------------------
+ *	0x00	|	BME680_SLEEP_MODE
+ *	0x01	|	BME680_FORCED_MODE
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_get_sensor_mode(struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to set the profile duration of the sensor.
+ *
+ * @param[in] dev	   : Structure instance of bme680_dev.
+ * @param[in] duration : Duration of the measurement in ms.
+ *
+ * @return Nothing
+ */
+void bme680_set_profile_dur(uint16_t duration, struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to get the profile duration of the sensor.
+ *
+ * @param[in] dev	   : Structure instance of bme680_dev.
+ * @param[in] duration : Duration of the measurement in ms.
+ *
+ * @return Nothing
+ */
+void bme680_get_profile_dur(uint16_t *duration, const struct bme680_dev *dev);
+
+/*!
+ * @brief This API reads the pressure, temperature and humidity and gas data
+ * from the sensor, compensates the data and store it in the bme680_data
+ * structure instance passed by the user.
+ *
+ * @param[out] data: Structure instance to hold the data.
+ * @param[in] dev : Structure instance of bme680_dev.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error
+ */
+int8_t bme680_get_sensor_data(struct bme680_field_data *data, struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to set the oversampling, filter and T,P,H, gas selection
+ * settings in the sensor.
+ *
+ * @param[in] dev : Structure instance of bme680_dev.
+ * @param[in] desired_settings : Variable used to select the settings which
+ * are to be set in the sensor.
+ *
+ *	 Macros	                   |  Functionality
+ *---------------------------------|----------------------------------------------
+ *	BME680_OST_SEL             |    To set temperature oversampling.
+ *	BME680_OSP_SEL             |    To set pressure oversampling.
+ *	BME680_OSH_SEL             |    To set humidity oversampling.
+ *	BME680_GAS_MEAS_SEL        |    To set gas measurement setting.
+ *	BME680_FILTER_SEL          |    To set filter setting.
+ *	BME680_HCNTRL_SEL          |    To set humidity control setting.
+ *	BME680_RUN_GAS_SEL         |    To set run gas setting.
+ *	BME680_NBCONV_SEL          |    To set NB conversion setting.
+ *	BME680_GAS_SENSOR_SEL      |    To set all gas sensor related settings
+ *
+ * @note : Below are the macros to be used by the user for selecting the
+ * desired settings. User can do OR operation of these macros for configuring
+ * multiple settings.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error.
+ */
+int8_t bme680_set_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev);
+
+/*!
+ * @brief This API is used to get the oversampling, filter and T,P,H, gas selection
+ * settings in the sensor.
+ *
+ * @param[in] dev : Structure instance of bme680_dev.
+ * @param[in] desired_settings : Variable used to select the settings which
+ * are to be get from the sensor.
+ *
+ * @return Result of API execution status
+ * @retval zero -> Success / +ve value -> Warning / -ve value -> Error.
+ */
+int8_t bme680_get_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev);
+#ifdef __cplusplus
+}
+#endif /* End of CPP guard */
+#endif /* BME680_H_ */
+/** @}*/
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680_defs.h b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680_defs.h
new file mode 100644
index 0000000000000000000000000000000000000000..429775d74f49c63f6e0e1a62a1343c12ac68ba69
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bme680_defs.h
@@ -0,0 +1,536 @@
+/**
+ * Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved.
+ *
+ * BSD-3-Clause
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @file	bme680_defs.h
+ * @date	23 Jan 2020
+ * @version	3.5.10
+ * @brief
+ *
+ */
+
+/*! @file bme680_defs.h
+ @brief Sensor driver for BME680 sensor */
+/*!
+ * @defgroup BME680 SENSOR API
+ * @brief
+ * @{*/
+#ifndef BME680_DEFS_H_
+#define BME680_DEFS_H_
+
+/********************************************************/
+/* header includes */
+#ifdef __KERNEL__
+#include <linux/types.h>
+#include <linux/kernel.h>
+#else
+#include <stdint.h>
+#include <stddef.h>
+#endif
+
+/******************************************************************************/
+/*! @name		Common macros					      */
+/******************************************************************************/
+
+#if !defined(UINT8_C) && !defined(INT8_C)
+#define INT8_C(x)       S8_C(x)
+#define UINT8_C(x)      U8_C(x)
+#endif
+
+#if !defined(UINT16_C) && !defined(INT16_C)
+#define INT16_C(x)      S16_C(x)
+#define UINT16_C(x)     U16_C(x)
+#endif
+
+#if !defined(INT32_C) && !defined(UINT32_C)
+#define INT32_C(x)      S32_C(x)
+#define UINT32_C(x)     U32_C(x)
+#endif
+
+#if !defined(INT64_C) && !defined(UINT64_C)
+#define INT64_C(x)      S64_C(x)
+#define UINT64_C(x)     U64_C(x)
+#endif
+
+/**@}*/
+
+/**\name C standard macros */
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL   0
+#else
+#define NULL   ((void *) 0)
+#endif
+#endif
+
+/** BME680 configuration macros */
+/** Enable or un-comment the macro to provide floating point data output */
+#ifndef BME680_FLOAT_POINT_COMPENSATION
+/* #define BME680_FLOAT_POINT_COMPENSATION */
+#endif
+
+/** BME680 General config */
+#define BME680_POLL_PERIOD_MS		UINT8_C(10)
+
+/** BME680 I2C addresses */
+#define BME680_I2C_ADDR_PRIMARY		UINT8_C(0x76)
+#define BME680_I2C_ADDR_SECONDARY	UINT8_C(0x77)
+
+/** BME680 unique chip identifier */
+#define BME680_CHIP_ID  UINT8_C(0x61)
+
+/** BME680 coefficients related defines */
+#define BME680_COEFF_SIZE		UINT8_C(41)
+#define BME680_COEFF_ADDR1_LEN		UINT8_C(25)
+#define BME680_COEFF_ADDR2_LEN		UINT8_C(16)
+
+/** BME680 field_x related defines */
+#define BME680_FIELD_LENGTH		UINT8_C(15)
+#define BME680_FIELD_ADDR_OFFSET	UINT8_C(17)
+
+/** Soft reset command */
+#define BME680_SOFT_RESET_CMD   UINT8_C(0xb6)
+
+/** Error code definitions */
+#define BME680_OK		INT8_C(0)
+/* Errors */
+#define BME680_E_NULL_PTR		    INT8_C(-1)
+#define BME680_E_COM_FAIL		    INT8_C(-2)
+#define BME680_E_DEV_NOT_FOUND		INT8_C(-3)
+#define BME680_E_INVALID_LENGTH		INT8_C(-4)
+
+/* Warnings */
+#define BME680_W_DEFINE_PWR_MODE	INT8_C(1)
+#define BME680_W_NO_NEW_DATA        INT8_C(2)
+
+/* Info's */
+#define BME680_I_MIN_CORRECTION		UINT8_C(1)
+#define BME680_I_MAX_CORRECTION		UINT8_C(2)
+
+/** Register map */
+/** Other coefficient's address */
+#define BME680_ADDR_RES_HEAT_VAL_ADDR	UINT8_C(0x00)
+#define BME680_ADDR_RES_HEAT_RANGE_ADDR	UINT8_C(0x02)
+#define BME680_ADDR_RANGE_SW_ERR_ADDR	UINT8_C(0x04)
+#define BME680_ADDR_SENS_CONF_START	UINT8_C(0x5A)
+#define BME680_ADDR_GAS_CONF_START	UINT8_C(0x64)
+
+/** Field settings */
+#define BME680_FIELD0_ADDR		UINT8_C(0x1d)
+
+/** Heater settings */
+#define BME680_RES_HEAT0_ADDR		UINT8_C(0x5a)
+#define BME680_GAS_WAIT0_ADDR		UINT8_C(0x64)
+
+/** Sensor configuration registers */
+#define BME680_CONF_HEAT_CTRL_ADDR		UINT8_C(0x70)
+#define BME680_CONF_ODR_RUN_GAS_NBC_ADDR	UINT8_C(0x71)
+#define BME680_CONF_OS_H_ADDR			UINT8_C(0x72)
+#define BME680_MEM_PAGE_ADDR			UINT8_C(0xf3)
+#define BME680_CONF_T_P_MODE_ADDR		UINT8_C(0x74)
+#define BME680_CONF_ODR_FILT_ADDR		UINT8_C(0x75)
+
+/** Coefficient's address */
+#define BME680_COEFF_ADDR1	UINT8_C(0x89)
+#define BME680_COEFF_ADDR2	UINT8_C(0xe1)
+
+/** Chip identifier */
+#define BME680_CHIP_ID_ADDR	UINT8_C(0xd0)
+
+/** Soft reset register */
+#define BME680_SOFT_RESET_ADDR		UINT8_C(0xe0)
+
+/** Heater control settings */
+#define BME680_ENABLE_HEATER		UINT8_C(0x00)
+#define BME680_DISABLE_HEATER		UINT8_C(0x08)
+
+/** Gas measurement settings */
+#define BME680_DISABLE_GAS_MEAS		UINT8_C(0x00)
+#define BME680_ENABLE_GAS_MEAS		UINT8_C(0x01)
+
+/** Over-sampling settings */
+#define BME680_OS_NONE		UINT8_C(0)
+#define BME680_OS_1X		UINT8_C(1)
+#define BME680_OS_2X		UINT8_C(2)
+#define BME680_OS_4X		UINT8_C(3)
+#define BME680_OS_8X		UINT8_C(4)
+#define BME680_OS_16X		UINT8_C(5)
+
+/** IIR filter settings */
+#define BME680_FILTER_SIZE_0	UINT8_C(0)
+#define BME680_FILTER_SIZE_1	UINT8_C(1)
+#define BME680_FILTER_SIZE_3	UINT8_C(2)
+#define BME680_FILTER_SIZE_7	UINT8_C(3)
+#define BME680_FILTER_SIZE_15	UINT8_C(4)
+#define BME680_FILTER_SIZE_31	UINT8_C(5)
+#define BME680_FILTER_SIZE_63	UINT8_C(6)
+#define BME680_FILTER_SIZE_127	UINT8_C(7)
+
+/** Power mode settings */
+#define BME680_SLEEP_MODE	UINT8_C(0)
+#define BME680_FORCED_MODE	UINT8_C(1)
+
+/** Delay related macro declaration */
+#define BME680_RESET_PERIOD	UINT32_C(10)
+
+/** SPI memory page settings */
+#define BME680_MEM_PAGE0	UINT8_C(0x10)
+#define BME680_MEM_PAGE1	UINT8_C(0x00)
+
+/** Ambient humidity shift value for compensation */
+#define BME680_HUM_REG_SHIFT_VAL	UINT8_C(4)
+
+/** Run gas enable and disable settings */
+#define BME680_RUN_GAS_DISABLE	UINT8_C(0)
+#define BME680_RUN_GAS_ENABLE	UINT8_C(1)
+
+/** Buffer length macro declaration */
+#define BME680_TMP_BUFFER_LENGTH	UINT8_C(40)
+#define BME680_REG_BUFFER_LENGTH	UINT8_C(6)
+#define BME680_FIELD_DATA_LENGTH	UINT8_C(3)
+#define BME680_GAS_REG_BUF_LENGTH	UINT8_C(20)
+
+/** Settings selector */
+#define BME680_OST_SEL			UINT16_C(1)
+#define BME680_OSP_SEL			UINT16_C(2)
+#define BME680_OSH_SEL			UINT16_C(4)
+#define BME680_GAS_MEAS_SEL		UINT16_C(8)
+#define BME680_FILTER_SEL		UINT16_C(16)
+#define BME680_HCNTRL_SEL		UINT16_C(32)
+#define BME680_RUN_GAS_SEL		UINT16_C(64)
+#define BME680_NBCONV_SEL		UINT16_C(128)
+#define BME680_GAS_SENSOR_SEL		(BME680_GAS_MEAS_SEL | BME680_RUN_GAS_SEL | BME680_NBCONV_SEL)
+
+/** Number of conversion settings*/
+#define BME680_NBCONV_MIN		UINT8_C(0)
+#define BME680_NBCONV_MAX		UINT8_C(10)
+
+/** Mask definitions */
+#define BME680_GAS_MEAS_MSK	UINT8_C(0x30)
+#define BME680_NBCONV_MSK	UINT8_C(0X0F)
+#define BME680_FILTER_MSK	UINT8_C(0X1C)
+#define BME680_OST_MSK		UINT8_C(0XE0)
+#define BME680_OSP_MSK		UINT8_C(0X1C)
+#define BME680_OSH_MSK		UINT8_C(0X07)
+#define BME680_HCTRL_MSK	UINT8_C(0x08)
+#define BME680_RUN_GAS_MSK	UINT8_C(0x10)
+#define BME680_MODE_MSK		UINT8_C(0x03)
+#define BME680_RHRANGE_MSK	UINT8_C(0x30)
+#define BME680_RSERROR_MSK	UINT8_C(0xf0)
+#define BME680_NEW_DATA_MSK	UINT8_C(0x80)
+#define BME680_GAS_INDEX_MSK	UINT8_C(0x0f)
+#define BME680_GAS_RANGE_MSK	UINT8_C(0x0f)
+#define BME680_GASM_VALID_MSK	UINT8_C(0x20)
+#define BME680_HEAT_STAB_MSK	UINT8_C(0x10)
+#define BME680_MEM_PAGE_MSK	UINT8_C(0x10)
+#define BME680_SPI_RD_MSK	UINT8_C(0x80)
+#define BME680_SPI_WR_MSK	UINT8_C(0x7f)
+#define	BME680_BIT_H1_DATA_MSK	UINT8_C(0x0F)
+
+/** Bit position definitions for sensor settings */
+#define BME680_GAS_MEAS_POS	UINT8_C(4)
+#define BME680_FILTER_POS	UINT8_C(2)
+#define BME680_OST_POS		UINT8_C(5)
+#define BME680_OSP_POS		UINT8_C(2)
+#define BME680_RUN_GAS_POS	UINT8_C(4)
+
+/** Array Index to Field data mapping for Calibration Data*/
+#define BME680_T2_LSB_REG	(1)
+#define BME680_T2_MSB_REG	(2)
+#define BME680_T3_REG		(3)
+#define BME680_P1_LSB_REG	(5)
+#define BME680_P1_MSB_REG	(6)
+#define BME680_P2_LSB_REG	(7)
+#define BME680_P2_MSB_REG	(8)
+#define BME680_P3_REG		(9)
+#define BME680_P4_LSB_REG	(11)
+#define BME680_P4_MSB_REG	(12)
+#define BME680_P5_LSB_REG	(13)
+#define BME680_P5_MSB_REG	(14)
+#define BME680_P7_REG		(15)
+#define BME680_P6_REG		(16)
+#define BME680_P8_LSB_REG	(19)
+#define BME680_P8_MSB_REG	(20)
+#define BME680_P9_LSB_REG	(21)
+#define BME680_P9_MSB_REG	(22)
+#define BME680_P10_REG		(23)
+#define BME680_H2_MSB_REG	(25)
+#define BME680_H2_LSB_REG	(26)
+#define BME680_H1_LSB_REG	(26)
+#define BME680_H1_MSB_REG	(27)
+#define BME680_H3_REG		(28)
+#define BME680_H4_REG		(29)
+#define BME680_H5_REG		(30)
+#define BME680_H6_REG		(31)
+#define BME680_H7_REG		(32)
+#define BME680_T1_LSB_REG	(33)
+#define BME680_T1_MSB_REG	(34)
+#define BME680_GH2_LSB_REG	(35)
+#define BME680_GH2_MSB_REG	(36)
+#define BME680_GH1_REG		(37)
+#define BME680_GH3_REG		(38)
+
+/** BME680 register buffer index settings*/
+#define BME680_REG_FILTER_INDEX		UINT8_C(5)
+#define BME680_REG_TEMP_INDEX		UINT8_C(4)
+#define BME680_REG_PRES_INDEX		UINT8_C(4)
+#define BME680_REG_HUM_INDEX		UINT8_C(2)
+#define BME680_REG_NBCONV_INDEX		UINT8_C(1)
+#define BME680_REG_RUN_GAS_INDEX	UINT8_C(1)
+#define BME680_REG_HCTRL_INDEX		UINT8_C(0)
+
+/** BME680 pressure calculation macros */
+/*! This max value is used to provide precedence to multiplication or division
+ * in pressure compensation equation to achieve least loss of precision and
+ * avoiding overflows.
+ * i.e Comparing value, BME680_MAX_OVERFLOW_VAL = INT32_C(1 << 30)
+ */
+#define BME680_MAX_OVERFLOW_VAL      INT32_C(0x40000000)
+
+/** Macro to combine two 8 bit data's to form a 16 bit data */
+#define BME680_CONCAT_BYTES(msb, lsb)	(((uint16_t)msb << 8) | (uint16_t)lsb)
+
+/** Macro to SET and GET BITS of a register */
+#define BME680_SET_BITS(reg_data, bitname, data) \
+		((reg_data & ~(bitname##_MSK)) | \
+		((data << bitname##_POS) & bitname##_MSK))
+#define BME680_GET_BITS(reg_data, bitname)	((reg_data & (bitname##_MSK)) >> \
+	(bitname##_POS))
+
+/** Macro variant to handle the bitname position if it is zero */
+#define BME680_SET_BITS_POS_0(reg_data, bitname, data) \
+				((reg_data & ~(bitname##_MSK)) | \
+				(data & bitname##_MSK))
+#define BME680_GET_BITS_POS_0(reg_data, bitname)  (reg_data & (bitname##_MSK))
+
+/** Type definitions */
+/*!
+ * Generic communication function pointer
+ * @param[in] dev_id: Place holder to store the id of the device structure
+ *                    Can be used to store the index of the Chip select or
+ *                    I2C address of the device.
+ * @param[in] reg_addr:	Used to select the register the where data needs to
+ *                      be read from or written to.
+ * @param[in/out] reg_data: Data array to read/write
+ * @param[in] len: Length of the data array
+ */
+typedef int8_t (*bme680_com_fptr_t)(uint8_t dev_id, uint8_t reg_addr, uint8_t *data, uint16_t len);
+
+/*!
+ * Delay function pointer
+ * @param[in] period: Time period in milliseconds
+ */
+typedef void (*bme680_delay_fptr_t)(uint32_t period);
+
+/*!
+ * @brief Interface selection Enumerations
+ */
+enum bme680_intf {
+	/*! SPI interface */
+	BME680_SPI_INTF,
+	/*! I2C interface */
+	BME680_I2C_INTF
+};
+
+/* structure definitions */
+/*!
+ * @brief Sensor field data structure
+ */
+struct	bme680_field_data {
+	/*! Contains new_data, gasm_valid & heat_stab */
+	uint8_t status;
+	/*! The index of the heater profile used */
+	uint8_t gas_index;
+	/*! Measurement index to track order */
+	uint8_t meas_index;
+
+#ifndef BME680_FLOAT_POINT_COMPENSATION
+	/*! Temperature in degree celsius x100 */
+	int16_t temperature;
+	/*! Pressure in Pascal */
+	uint32_t pressure;
+	/*! Humidity in % relative humidity x1000 */
+	uint32_t humidity;
+	/*! Gas resistance in Ohms */
+	uint32_t gas_resistance;
+#else
+	/*! Temperature in degree celsius */
+	float temperature;
+	/*! Pressure in Pascal */
+	float pressure;
+	/*! Humidity in % relative humidity x1000 */
+	float humidity;
+	/*! Gas resistance in Ohms */
+	float gas_resistance;
+
+#endif
+
+};
+
+/*!
+ * @brief Structure to hold the Calibration data
+ */
+struct	bme680_calib_data {
+	/*! Variable to store calibrated humidity data */
+	uint16_t par_h1;
+	/*! Variable to store calibrated humidity data */
+	uint16_t par_h2;
+	/*! Variable to store calibrated humidity data */
+	int8_t par_h3;
+	/*! Variable to store calibrated humidity data */
+	int8_t par_h4;
+	/*! Variable to store calibrated humidity data */
+	int8_t par_h5;
+	/*! Variable to store calibrated humidity data */
+	uint8_t par_h6;
+	/*! Variable to store calibrated humidity data */
+	int8_t par_h7;
+	/*! Variable to store calibrated gas data */
+	int8_t par_gh1;
+	/*! Variable to store calibrated gas data */
+	int16_t par_gh2;
+	/*! Variable to store calibrated gas data */
+	int8_t par_gh3;
+	/*! Variable to store calibrated temperature data */
+	uint16_t par_t1;
+	/*! Variable to store calibrated temperature data */
+	int16_t par_t2;
+	/*! Variable to store calibrated temperature data */
+	int8_t par_t3;
+	/*! Variable to store calibrated pressure data */
+	uint16_t par_p1;
+	/*! Variable to store calibrated pressure data */
+	int16_t par_p2;
+	/*! Variable to store calibrated pressure data */
+	int8_t par_p3;
+	/*! Variable to store calibrated pressure data */
+	int16_t par_p4;
+	/*! Variable to store calibrated pressure data */
+	int16_t par_p5;
+	/*! Variable to store calibrated pressure data */
+	int8_t par_p6;
+	/*! Variable to store calibrated pressure data */
+	int8_t par_p7;
+	/*! Variable to store calibrated pressure data */
+	int16_t par_p8;
+	/*! Variable to store calibrated pressure data */
+	int16_t par_p9;
+	/*! Variable to store calibrated pressure data */
+	uint8_t par_p10;
+
+#ifndef BME680_FLOAT_POINT_COMPENSATION
+	/*! Variable to store t_fine size */
+	int32_t t_fine;
+#else
+	/*! Variable to store t_fine size */
+	float t_fine;
+#endif
+	/*! Variable to store heater resistance range */
+	uint8_t res_heat_range;
+	/*! Variable to store heater resistance value */
+	int8_t res_heat_val;
+	/*! Variable to store error range */
+	int8_t range_sw_err;
+};
+
+/*!
+ * @brief BME680 sensor settings structure which comprises of ODR,
+ * over-sampling and filter settings.
+ */
+struct	bme680_tph_sett {
+	/*! Humidity oversampling */
+	uint8_t os_hum;
+	/*! Temperature oversampling */
+	uint8_t os_temp;
+	/*! Pressure oversampling */
+	uint8_t os_pres;
+	/*! Filter coefficient */
+	uint8_t filter;
+};
+
+/*!
+ * @brief BME680 gas sensor which comprises of gas settings
+ *  and status parameters
+ */
+struct	bme680_gas_sett {
+	/*! Variable to store nb conversion */
+	uint8_t nb_conv;
+	/*! Variable to store heater control */
+	uint8_t heatr_ctrl;
+	/*! Run gas enable value */
+	uint8_t run_gas;
+	/*! Heater temperature value */
+	uint16_t heatr_temp;
+	/*! Duration profile value */
+	uint16_t heatr_dur;
+};
+
+/*!
+ * @brief BME680 device structure
+ */
+struct	bme680_dev {
+	/*! Chip Id */
+	uint8_t chip_id;
+	/*! Device Id */
+	uint8_t dev_id;
+	/*! SPI/I2C interface */
+	enum bme680_intf intf;
+	/*! Memory page used */
+	uint8_t mem_page;
+	/*! Ambient temperature in Degree C */
+	int8_t amb_temp;
+	/*! Sensor calibration data */
+	struct bme680_calib_data calib;
+	/*! Sensor settings */
+	struct bme680_tph_sett tph_sett;
+	/*! Gas Sensor settings */
+	struct bme680_gas_sett gas_sett;
+	/*! Sensor power modes */
+	uint8_t power_mode;
+	/*! New sensor fields */
+	uint8_t new_fields;
+	/*! Store the info messages */
+	uint8_t info_msg;
+	/*! Bus read function pointer */
+	bme680_com_fptr_t read;
+	/*! Bus write function pointer */
+	bme680_com_fptr_t write;
+	/*! delay function pointer */
+	bme680_delay_fptr_t delay_ms;
+	/*! Communication function result */
+	int8_t com_rslt;
+};
+
+
+
+#endif /* BME680_DEFS_H_ */
+/** @}*/
+/** @}*/
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_datatypes.h b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_datatypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..535ed5d7c6fefac5eab6dfbf499569606e4875e0
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_datatypes.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+ /**
+ * @file        bsec_datatypes.h
+ *
+ * @brief
+ * Contains the data types used by BSEC
+ *
+ */
+
+#ifndef __BSEC_DATATYPES_H__
+#define __BSEC_DATATYPES_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*!
+ * @addtogroup bsec_interface BSEC C Interface
+ * @{*/
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#endif
+#include <stdint.h>
+#include <stddef.h>
+
+#define BSEC_MAX_WORKBUFFER_SIZE     (2048)    /*!< Maximum size (in bytes) of the work buffer */
+#define BSEC_MAX_PHYSICAL_SENSOR     (8)         /*!< Number of physical sensors that need allocated space before calling bsec_update_subscription() */
+#define BSEC_MAX_PROPERTY_BLOB_SIZE  (454)     /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_configuration() */
+#define BSEC_MAX_STATE_BLOB_SIZE     (139)        /*!< Maximum size (in bytes) of the data blobs returned by bsec_get_state()*/
+#define BSEC_SAMPLE_RATE_DISABLED    (65535.0f)      /*!< Sample rate of a disabled sensor */
+#define BSEC_SAMPLE_RATE_ULP         (0.0033333f)           /*!< Sample rate in case of Ultra Low Power Mode */
+#define BSEC_SAMPLE_RATE_CONTINUOUS  (1.0f)    /*!< Sample rate in case of Continuous Mode */ 
+#define BSEC_SAMPLE_RATE_LP          (0.33333f)            /*!< Sample rate in case of Low Power Mode */
+#define BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND         (0.0f)            /*!< Input value used to trigger an extra measurment (ULP plus) */        
+
+#define BSEC_PROCESS_PRESSURE       (1 << (BSEC_INPUT_PRESSURE-1))      /*!< process_data bitfield constant for pressure @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_TEMPERATURE    (1 << (BSEC_INPUT_TEMPERATURE-1))   /*!< process_data bitfield constant for temperature @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_HUMIDITY       (1 << (BSEC_INPUT_HUMIDITY-1))      /*!< process_data bitfield constant for humidity @sa bsec_bme_settings_t */
+#define BSEC_PROCESS_GAS            (1 << (BSEC_INPUT_GASRESISTOR-1))   /*!< process_data bitfield constant for gas sensor @sa bsec_bme_settings_t */
+#define BSEC_NUMBER_OUTPUTS         (14)     /*!< Number of outputs, depending on solution */
+#define BSEC_OUTPUT_INCLUDED        (1210863)         /*!< bitfield that indicates which outputs are included in the solution */
+
+/*!
+ * @brief Enumeration for input (physical) sensors.
+ *
+ * Used to populate bsec_input_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs
+ * returned in the parameter required_sensor_settings of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_input_t
+ */
+typedef enum
+{
+    /**
+     * @brief Pressure sensor output of BMExxx [Pa]
+     */
+    BSEC_INPUT_PRESSURE = 1,  
+
+    /**
+     * @brief Humidity sensor output of BMExxx [%]
+     *
+     * @note Relative humidity strongly depends on the temperature (it is measured at). It may require a conversion to
+     * the temperature outside of the device. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HUMIDITY = 2,            
+
+    /**
+     * @brief Temperature sensor output of BMExxx [degrees Celsius]
+     * 
+     * @note The BME680 is factory trimmed, thus the temperature sensor of the BME680 is very accurate. 
+     * The temperature value is a very local measurement value and can be influenced by external heat sources. 
+     *
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_TEMPERATURE = 3,        
+
+    /**
+     * @brief Gas sensor resistance output of BMExxx [Ohm]
+     * 
+     * The resistance value changes due to varying VOC concentrations (the higher the concentration of reducing VOCs, 
+     * the lower the resistance and vice versa). 
+     */
+    BSEC_INPUT_GASRESISTOR = 4,         /*!<  */
+
+    /**
+     * @brief Additional input for device heat compensation
+     * 
+     * IAQ solution: The value is subtracted from ::BSEC_INPUT_TEMPERATURE to compute 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     *
+     * ALL solution: Generic heat source 1
+     * 
+     * @sa bsec_virtual_sensor_t
+     */
+    BSEC_INPUT_HEATSOURCE = 14,        
+
+    /**
+     * @brief Additional input for device heat compensation 8
+     *
+     * Generic heat source 8
+     */
+
+    
+    /**
+     * @brief Additional input that disables baseline tracker
+     *
+     * 0 - Normal  
+     * 1 - Event 1
+     * 2 - Event 2
+     */
+    BSEC_INPUT_DISABLE_BASELINE_TRACKER = 23, 
+
+} bsec_physical_sensor_t;
+
+/*!
+ * @brief Enumeration for output (virtual) sensors
+ *
+ * Used to populate bsec_output_t::sensor_id. It is also used in bsec_sensor_configuration_t::sensor_id structs 
+ * passed in the parameter requested_virtual_sensors of bsec_update_subscription().
+ *
+ * @sa bsec_sensor_configuration_t @sa bsec_output_t
+ */
+typedef enum
+{
+    /**
+     * @brief Indoor-air-quality estimate [0-500]
+     * 
+     * Indoor-air-quality (IAQ) gives an indication of the relative change in ambient TVOCs detected by BME680. 
+     * 
+     * @note The IAQ scale ranges from 0 (clean air) to 500 (heavily polluted air). During operation, algorithms 
+     * automatically calibrate and adapt themselves to the typical environments where the sensor is operated 
+     * (e.g., home, workplace, inside a car, etc.).This automatic background calibration ensures that users experience 
+     * consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four 
+     * days) to ensure that IAQ=25 corresponds to typical good air and IAQ=250 indicates typical polluted air.
+     */
+    BSEC_OUTPUT_IAQ = 1,                           
+    BSEC_OUTPUT_STATIC_IAQ = 2,                             /*!< Unscaled indoor-air-quality estimate */ 
+    BSEC_OUTPUT_CO2_EQUIVALENT = 3,                         /*!< co2 equivalent estimate [ppm] */   
+    BSEC_OUTPUT_BREATH_VOC_EQUIVALENT = 4,                  /*!< breath VOC concentration estimate [ppm] */    	
+
+    /**
+     * @brief Temperature sensor signal [degrees Celsius]
+     * 
+     * Temperature directly measured by BME680 in degree Celsius. 
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_TEMPERATURE = 6,                
+
+    /**
+     * @brief Pressure sensor signal [Pa]
+     * 
+     * Pressure directly measured by the BME680 in Pa.
+     */
+    BSEC_OUTPUT_RAW_PRESSURE = 7,                   
+
+    /**
+     * @brief Relative humidity sensor signal [%] 
+     * 
+     * Relative humidity directly measured by the BME680 in %.  
+     * 
+     * @note This value is cross-influenced by the sensor heating and device specific heating.
+     */
+    BSEC_OUTPUT_RAW_HUMIDITY = 8,     
+
+    /**
+     * @brief Gas sensor signal [Ohm]
+     * 
+     * Gas resistance measured directly by the BME680 in Ohm.The resistance value changes due to varying VOC 
+     * concentrations (the higher the concentration of reducing VOCs, the lower the resistance and vice versa). 
+     */
+    BSEC_OUTPUT_RAW_GAS = 9,                
+
+    /**
+     * @brief Gas sensor stabilization status [boolean]
+     * 
+     * Indicates initial stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).   
+     */
+    BSEC_OUTPUT_STABILIZATION_STATUS = 12,                 
+
+    /**
+     * @brief Gas sensor run-in status [boolean]
+     *
+     * Indicates power-on stabilization status of the gas sensor element: stabilization is ongoing (0) or stabilization 
+     * is finished (1).
+     */
+    BSEC_OUTPUT_RUN_IN_STATUS = 13,                         
+
+    /**
+     * @brief Sensor heat compensated temperature [degrees Celsius]
+     * 
+     * Temperature measured by BME680 which is compensated for the influence of sensor (heater) in degree Celsius. 
+     * The self heating introduced by the heater is depending on the sensor operation mode and the sensor supply voltage. 
+     * 
+     * 
+     * @note IAQ solution: In addition, the temperature output can be compensated by an user defined value 
+     * (::BSEC_INPUT_HEATSOURCE in degrees Celsius), which represents the device specific self-heating.
+     * 
+     * Thus, the value is calculated as follows:
+     * * IAQ solution: ```BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage) - ::BSEC_INPUT_HEATSOURCE```
+     * * other solutions: ```::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = ::BSEC_INPUT_TEMPERATURE -  function(sensor operation mode, sensor supply voltage)```
+     *
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_ULP is negligible.
+     * The self-heating in operation mode BSEC_SAMPLE_RATE_LP is supported for 1.8V by default (no config file required). If the BME680 sensor supply voltage is 3.3V, the IoT_LP_3_3V.config shall be used.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE = 14,   
+
+    /**
+     * @brief Sensor heat compensated humidity [%] 
+     * 
+     * Relative measured by BME680 which is compensated for the influence of sensor (heater) in %.
+     * 
+     * It converts the ::BSEC_INPUT_HUMIDITY from temperature ::BSEC_INPUT_TEMPERATURE to temperature 
+     * ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE.
+     * 
+     * @note IAQ solution: If ::BSEC_INPUT_HEATSOURCE is used for device specific temperature compensation, it will be 
+     * effective for ::BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY too.
+     */
+    BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY = 15,     
+
+    BSEC_OUTPUT_COMPENSATED_GAS = 18,         			    /*!< Reserved internal debug output */ 	
+	BSEC_OUTPUT_GAS_PERCENTAGE = 21                         /*!< percentage of min and max filtered gas value [%] */
+} bsec_virtual_sensor_t;
+
+/*!
+ * @brief Enumeration for function return codes 
+ */
+typedef enum
+{
+    BSEC_OK = 0,                                    /*!< Function execution successful */
+    BSEC_E_DOSTEPS_INVALIDINPUT = -1,               /*!< Input (physical) sensor id passed to bsec_do_steps() is not in the valid range or not valid for requested virtual sensor */
+    BSEC_E_DOSTEPS_VALUELIMITS = -2,                /*!< Value of input (physical) sensor signal passed to bsec_do_steps() is not in the valid range */
+    BSEC_E_DOSTEPS_DUPLICATEINPUT = -6,             /*!< Duplicate input (physical) sensor ids passed as input to bsec_do_steps() */
+    BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE = 2,         /*!< No memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs == 0 */
+    BSEC_W_DOSTEPS_EXCESSOUTPUTS = 3,               /*!< Not enough memory allocated to hold return values from bsec_do_steps(), i.e., n_outputs < maximum number of requested output (virtual) sensors */
+    BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE = 4,       /*!< Duplicate timestamps passed to bsec_do_steps() */
+    BSEC_E_SU_WRONGDATARATE = -10,                  /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is zero */
+    BSEC_E_SU_SAMPLERATELIMITS = -12,               /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not match with the sampling rate allowed for that sensor */
+    BSEC_E_SU_DUPLICATEGATE = -13,                  /*!< Duplicate output (virtual) sensor ids requested through bsec_update_subscription() */
+    BSEC_E_SU_INVALIDSAMPLERATE = -14,              /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() does not fall within the global minimum and maximum sampling rates  */
+    BSEC_E_SU_GATECOUNTEXCEEDSARRAY = -15,          /*!< Not enough memory allocated to hold returned input (physical) sensor data from bsec_update_subscription(), i.e., n_required_sensor_settings < #BSEC_MAX_PHYSICAL_SENSOR */
+    BSEC_E_SU_SAMPLINTVLINTEGERMULT = -16,          /*!< The sample_rate of the requested output (virtual) sensor passed to bsec_update_subscription() is not correct */
+    BSEC_E_SU_MULTGASSAMPLINTVL = -17,              /*!< The sample_rate of the requested output (virtual), which requires the gas sensor, is not equal to the sample_rate that the gas sensor is being operated */
+    BSEC_E_SU_HIGHHEATERONDURATION = -18,           /*!< The duration of one measurement is longer than the requested sampling interval */
+    BSEC_W_SU_UNKNOWNOUTPUTGATE = 10,               /*!< Output (virtual) sensor id passed to bsec_update_subscription() is not in the valid range; e.g., n_requested_virtual_sensors > actual number of output (virtual) sensors requested */
+    BSEC_W_SU_MODINNOULP = 11,                      /*!< ULP plus can not be requested in non-ulp mode */ /*MOD_ONLY*/
+    BSEC_I_SU_SUBSCRIBEDOUTPUTGATES = 12,           /*!< No output (virtual) sensor data were requested via bsec_update_subscription() */
+    BSEC_E_PARSE_SECTIONEXCEEDSWORKBUFFER = -32,    /*!< n_work_buffer_size passed to bsec_set_[configuration/state]() not sufficient */
+    BSEC_E_CONFIG_FAIL = -33,                       /*!< Configuration failed */
+    BSEC_E_CONFIG_VERSIONMISMATCH = -34,            /*!< Version encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current version */
+    BSEC_E_CONFIG_FEATUREMISMATCH = -35,            /*!< Enabled features encoded in serialized_[settings/state] passed to bsec_set_[configuration/state]() does not match with current library implementation */
+    BSEC_E_CONFIG_CRCMISMATCH = -36,                /*!< serialized_[settings/state] passed to bsec_set_[configuration/state]() is corrupted */
+    BSEC_E_CONFIG_EMPTY = -37,                      /*!< n_serialized_[settings/state] passed to bsec_set_[configuration/state]() is to short to be valid */
+    BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER = -38,     /*!< Provided work_buffer is not large enough to hold the desired string */
+    BSEC_E_CONFIG_INVALIDSTRINGSIZE = -40,          /*!< String size encoded in configuration/state strings passed to bsec_set_[configuration/state]() does not match with the actual string size n_serialized_[settings/state] passed to these functions */
+    BSEC_E_CONFIG_INSUFFICIENTBUFFER = -41,         /*!< String buffer insufficient to hold serialized data from BSEC library */
+    BSEC_E_SET_INVALIDCHANNELIDENTIFIER = -100,     /*!< Internal error code, size of work buffer in setConfig must be set to BSEC_MAX_WORKBUFFER_SIZE */
+    BSEC_E_SET_INVALIDLENGTH = -104,                /*!< Internal error code */
+    BSEC_W_SC_CALL_TIMING_VIOLATION = 100,          /*!< Difference between actual and defined sampling intervals of bsec_sensor_control() greater than allowed */
+    BSEC_W_SC_MODEXCEEDULPTIMELIMIT = 101,          /*!< ULP plus is not allowed because an ULP measurement just took or will take place */ /*MOD_ONLY*/
+    BSEC_W_SC_MODINSUFFICIENTWAITTIME = 102         /*!< ULP plus is not allowed because not sufficient time passed since last ULP plus */ /*MOD_ONLY*/
+} bsec_library_return_t;
+
+/*!
+ * @brief Structure containing the version information
+ *
+ * Please note that configuration and state strings are coded to a specific version and will not be accepted by other 
+ * versions of BSEC.
+ * 
+ */
+typedef struct
+{
+    uint8_t major; /**< @brief Major version */
+    uint8_t minor; /**< @brief Minor version */
+    uint8_t major_bugfix; /**< @brief Major bug fix version */
+    uint8_t minor_bugfix; /**< @brief Minor bug fix version */
+} bsec_version_t;
+
+/*!
+ * @brief Structure describing an input sample to the library
+ *
+ * Each input sample is provided to BSEC as an element in a struct array of this type. Timestamps must be provided 
+ * in nanosecond  resolution. Moreover, duplicate timestamps for subsequent samples are not allowed and will results in 
+ * an error code being returned from bsec_do_steps().
+ *
+ * The meaning unit of the signal field are determined by the bsec_input_t::sensor_id field content. Possible 
+ * bsec_input_t::sensor_id values and and their meaning are described in ::bsec_physical_sensor_t.
+ *
+ * @sa bsec_physical_sensor_t
+ * 
+ */
+typedef struct
+{
+    /**
+     * @brief Time stamp in nanosecond resolution [ns]
+     *
+     * Timestamps must be provided as non-repeating and increasing values. They can have their 0-points at system start or
+     * at a defined wall-clock time (e.g., 01-Jan-1970 00:00:00)
+     */
+    int64_t time_stamp;        
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective sensor_id @sa bsec_physical_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of physical sensor @sa bsec_physical_sensor_t */
+} bsec_input_t;
+
+/*!
+ * @brief Structure describing an output sample of the library
+ *
+ * Each output sample is returned from BSEC by populating the element of a struct array of this type. The contents of 
+ * the signal field is defined by the supplied bsec_output_t::sensor_id. Possible output 
+ * bsec_output_t::sensor_id values are defined in ::bsec_virtual_sensor_t. 
+ *
+ * @sa bsec_virtual_sensor_t
+ */
+typedef struct
+{
+    int64_t time_stamp;         /*!< @brief Time stamp in nanosecond resolution as provided as input [ns] */
+    float signal;               /*!< @brief Signal sample in the unit defined for the respective bsec_output_t::sensor_id @sa bsec_virtual_sensor_t */
+    uint8_t signal_dimensions;  /*!< @brief Signal dimensions (reserved for future use, shall be set to 1) */
+    uint8_t sensor_id;          /*!< @brief Identifier of virtual sensor @sa bsec_virtual_sensor_t  */
+    
+    /**
+     * @brief Accuracy status 0-3
+     *
+     * Some virtual sensors provide a value in the accuracy field. If this is the case, the meaning of the field is as 
+     * follows:
+     *
+     * | Name                       | Value |  Accuracy description                                                                                       |
+     * |----------------------------|-------|-------------------------------------------------------------------------------------------------------------|
+     * | UNRELIABLE                 |   0   | Sensor data is unreliable, the sensor must be calibrated                                                    |
+     * | LOW_ACCURACY               |   1   | Low accuracy, sensor should be calibrated                                                                   |
+     * | MEDIUM_ACCURACY            |   2   | Medium accuracy, sensor calibration may improve performance                                                 |
+     * | HIGH_ACCURACY              |   3   | High accuracy                                                                                               |
+     *
+     * For example:
+     * 
+     * - Ambient temperature accuracy is derived from change in the temperature in 1 minute.
+     * 
+     *   | Virtual sensor       | Value |  Accuracy description                                                        |
+     *   |--------------------- |-------|------------------------------------------------------------------------------|
+     *   | Ambient temperature  |   0   | The difference in ambient temperature is greater than 4 degree in one minute |
+     *   |                      |   1   | The difference in ambient temperature is less than 4 degree in one minute    |
+     *   |                      |   2   | The difference in ambient temperature is less than 3 degree in one minute    |
+     *   |                      |   3   | The difference in ambient temperature is less than 2 degree in one minute    |
+     * 
+     * - IAQ accuracy indicator will notify the user when she/he should initiate a calibration process. Calibration is 
+     *   performed automatically in the background if the sensor is exposed to clean and polluted air for approximately 
+     *   30 minutes each.
+     * 
+     *   | Virtual sensor             | Value |  Accuracy description                                                                                                                                         |
+     *   |----------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+     *   | IAQ                        |   0   | Stabilization / run-in ongoing                                                                                                                                |
+     *   |                            |   1   | Low accuracy,to reach high accuracy(3),please expose sensor once to good air (e.g. outdoor air) and bad air (e.g. box with exhaled breath) for auto-trimming  |
+     *   |                            |   2   | Medium accuracy: auto-trimming ongoing                                                                                                                        |
+     *   |                            |   3   | High accuracy                                                                                                                                                 |
+     */     
+    uint8_t accuracy;           
+} bsec_output_t;
+
+/*!
+ * @brief Structure describing sample rate of physical/virtual sensors
+ *
+ * This structure is used together with bsec_update_subscription() to enable BSEC outputs and to retrieve information
+ * about the sample rates used for BSEC inputs.
+ */
+typedef struct
+{
+    /**
+     * @brief Sample rate of the virtual or physical sensor in Hertz [Hz]
+     *
+     * Only supported sample rates are allowed.
+     */
+    float sample_rate;           
+        
+    /**
+     * @brief Identifier of the virtual or physical sensor
+     *
+     * The meaning of this field changes depending on whether the structs are as the requested_virtual_sensors argument
+     * to bsec_update_subscription() or as the required_sensor_settings argument.
+     *
+     * | bsec_update_subscription() argument | sensor_id field interpretation |
+     * |-------------------------------------|--------------------------------|
+     * | requested_virtual_sensors           | ::bsec_virtual_sensor_t        |
+     * | required_sensor_settings            | ::bsec_physical_sensor_t       |
+     *
+     * @sa bsec_physical_sensor_t 
+     * @sa bsec_virtual_sensor_t 
+     */
+    uint8_t sensor_id;              
+} bsec_sensor_configuration_t;
+
+/*!
+ * @brief Structure returned by bsec_sensor_control() to configure BMExxx sensor  
+ *
+ * This structure contains settings that must be used to configure the BMExxx to perform a forced-mode measurement. 
+ * A measurement should only be executed if bsec_bme_settings_t::trigger_measurement is 1. If so, the oversampling 
+ * settings for temperature, humidity, and pressure should be set to the provided settings provided in 
+ * bsec_bme_settings_t::temperature_oversampling, bsec_bme_settings_t::humidity_oversampling, and
+ * bsec_bme_settings_t::pressure_oversampling, respectively. 
+ *
+ * In case of bsec_bme_settings_t::run_gas = 1, the gas sensor must be enabled with the provided 
+ * bsec_bme_settings_t::heater_temperature and bsec_bme_settings_t::heating_duration settings.
+ */
+typedef struct
+{
+    int64_t next_call;                  /*!< @brief Time stamp of the next call of the sensor_control*/
+    uint32_t process_data;              /*!< @brief Bit field describing which data is to be passed to bsec_do_steps() @sa BSEC_PROCESS_* */
+    uint16_t heater_temperature;        /*!< @brief Heating temperature [degrees Celsius] */
+    uint16_t heating_duration;          /*!< @brief Heating duration [ms] */
+    uint8_t run_gas;                    /*!< @brief Enable gas measurements [0/1] */
+    uint8_t pressure_oversampling;      /*!< @brief Pressure oversampling settings [0-5] */
+    uint8_t temperature_oversampling;   /*!< @brief Temperature oversampling settings [0-5] */
+    uint8_t humidity_oversampling;      /*!< @brief Humidity oversampling settings [0-5] */
+    uint8_t trigger_measurement;        /*!< @brief Trigger a forced measurement with these settings now [0/1] */
+} bsec_bme_settings_t;
+
+/* internal defines and backward compatibility */
+#define BSEC_STRUCT_NAME            Bsec                       /*!< Internal struct name */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.c b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.c
new file mode 100644
index 0000000000000000000000000000000000000000..af447e4f72984642be9c90538600038c23f7684e
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.c
@@ -0,0 +1,562 @@
+/*
+ * Copyright (C) 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+/*!
+ * @file bsec_integration.c
+ *
+ * @brief
+ * Private part of the example for using of BSEC library.
+ */
+
+/*!
+ * @addtogroup bsec_examples BSEC Examples
+ * @brief BSEC usage examples
+ * @{*/
+
+/**********************************************************************************************************************/
+/* header files */
+/**********************************************************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "bsec_integration.h"
+
+/**********************************************************************************************************************/
+/* local macro definitions */
+/**********************************************************************************************************************/
+
+#define NUM_USED_OUTPUTS 10
+
+/**********************************************************************************************************************/
+/* global variable declarations */
+/**********************************************************************************************************************/
+
+/* Global sensor APIs data structure */
+static struct bme680_dev bme680_g;
+
+/* Global temperature offset to be subtracted */
+static float bme680_temperature_offset_g = 0.0f;
+
+/**********************************************************************************************************************/
+/* functions */
+/**********************************************************************************************************************/
+
+/*!
+ * @brief        Virtual sensor subscription
+ *               Please call this function before processing of data using bsec_do_steps function
+ *
+ * @param[in]    sample_rate         mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP)
+ *  
+ * @return       subscription result, zero when successful
+ */
+static bsec_library_return_t bme680_bsec_update_subscription(float sample_rate)
+{
+    bsec_sensor_configuration_t requested_virtual_sensors[NUM_USED_OUTPUTS];
+    uint8_t n_requested_virtual_sensors = NUM_USED_OUTPUTS;
+    
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+    
+    bsec_library_return_t status = BSEC_OK;
+    
+    /* note: Virtual sensors as desired to be added here */
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = sample_rate;
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = sample_rate;
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = sample_rate;
+    requested_virtual_sensors[3].sensor_id = BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY;
+    requested_virtual_sensors[3].sample_rate = sample_rate;
+    requested_virtual_sensors[4].sensor_id = BSEC_OUTPUT_RAW_GAS;
+    requested_virtual_sensors[4].sample_rate = sample_rate;
+    requested_virtual_sensors[5].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[5].sample_rate = sample_rate;
+    requested_virtual_sensors[6].sensor_id = BSEC_OUTPUT_RAW_HUMIDITY;
+    requested_virtual_sensors[6].sample_rate = sample_rate;
+    requested_virtual_sensors[7].sensor_id = BSEC_OUTPUT_STATIC_IAQ;
+    requested_virtual_sensors[7].sample_rate = sample_rate;
+    requested_virtual_sensors[8].sensor_id = BSEC_OUTPUT_CO2_EQUIVALENT;
+    requested_virtual_sensors[8].sample_rate = sample_rate;
+    requested_virtual_sensors[9].sensor_id = BSEC_OUTPUT_BREATH_VOC_EQUIVALENT;
+    requested_virtual_sensors[9].sample_rate = sample_rate;
+    
+    /* Call bsec_update_subscription() to enable/disable the requested virtual sensors */
+    status = bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings,
+        &n_required_sensor_settings);
+    
+    return status;
+}
+
+/*!
+ * @brief       Initialize the BME680 sensor and the BSEC library
+ *
+ * @param[in]   sample_rate         mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP)
+ * @param[in]   temperature_offset  device-specific temperature offset (due to self-heating)
+ * @param[in]   bus_write           pointer to the bus writing function
+ * @param[in]   bus_read            pointer to the bus reading function
+ * @param[in]   sleep               pointer to the system specific sleep function
+ * @param[in]   state_load          pointer to the system-specific state load function
+ * @param[in]   config_load         pointer to the system-specific config load function
+ *
+ * @return      zero if successful, negative otherwise
+ */
+return_values_init bsec_iot_init(float sample_rate, float temperature_offset, bme680_com_fptr_t bus_write, 
+                    bme680_com_fptr_t bus_read, sleep_fct sleep, state_load_fct state_load, config_load_fct config_load)
+{
+    return_values_init ret = {BME680_OK, BSEC_OK};
+    __attribute__((unused)) bsec_library_return_t bsec_status = BSEC_OK;
+    
+    uint8_t bsec_data[BSEC_MAX_PROPERTY_BLOB_SIZE] = {0};
+    uint8_t work_buffer[BSEC_MAX_WORKBUFFER_SIZE] = {0};
+    int bsec_state_len, bsec_config_len;
+    
+    /* Fixed I2C configuration */
+    bme680_g.dev_id = BME680_I2C_ADDR_PRIMARY;
+    bme680_g.intf = BME680_I2C_INTF;
+    /* User configurable I2C configuration */
+    bme680_g.write = bus_write;
+    bme680_g.read = bus_read;
+    bme680_g.delay_ms = sleep;
+    
+    /* Initialize BME680 API */
+    ret.bme680_status = bme680_init(&bme680_g);
+    if (ret.bme680_status != BME680_OK)
+    {
+        return ret;
+    }
+    
+    /* Initialize BSEC library */
+    ret.bsec_status = bsec_init();
+    if (ret.bsec_status != BSEC_OK)
+    {
+        return ret;
+    }
+    
+    /* Load library config, if available */
+    bsec_config_len = config_load(bsec_data, sizeof(bsec_data));
+    if (bsec_config_len != 0)
+    {       
+        ret.bsec_status = bsec_set_configuration(bsec_data, bsec_config_len, work_buffer, sizeof(work_buffer));     
+        if (ret.bsec_status != BSEC_OK)
+        {
+            return ret;
+        }
+    }
+    
+    /* Load previous library state, if available */
+    bsec_state_len = state_load(bsec_data, sizeof(bsec_data));
+    if (bsec_state_len != 0)
+    {       
+        ret.bsec_status = bsec_set_state(bsec_data, bsec_state_len, work_buffer, sizeof(work_buffer));     
+        if (ret.bsec_status != BSEC_OK)
+        {
+            return ret;
+        }
+    }
+    
+    /* Set temperature offset */
+    bme680_temperature_offset_g = temperature_offset;
+    
+    /* Call to the function which sets the library with subscription information */
+    ret.bsec_status = bme680_bsec_update_subscription(sample_rate);
+    if (ret.bsec_status != BSEC_OK)
+    {
+        return ret;
+    }
+    
+    return ret;
+}
+
+/*!
+ * @brief       Trigger the measurement based on sensor settings
+ *
+ * @param[in]   sensor_settings     settings of the BME680 sensor adopted by sensor control function
+ * @param[in]   sleep               pointer to the system specific sleep function
+ *
+ * @return      none
+ */
+static void bme680_bsec_trigger_measurement(bsec_bme_settings_t *sensor_settings, sleep_fct sleep)
+{
+    uint16_t meas_period;
+    uint8_t set_required_settings;
+    __attribute__((unused)) int8_t bme680_status = BME680_OK;
+        
+    /* Check if a forced-mode measurement should be triggered now */
+    if (sensor_settings->trigger_measurement)
+    {
+        /* Set sensor configuration */
+
+        bme680_g.tph_sett.os_hum  = sensor_settings->humidity_oversampling;
+        bme680_g.tph_sett.os_pres = sensor_settings->pressure_oversampling;
+        bme680_g.tph_sett.os_temp = sensor_settings->temperature_oversampling;
+        bme680_g.gas_sett.run_gas = sensor_settings->run_gas;
+        bme680_g.gas_sett.heatr_temp = sensor_settings->heater_temperature; /* degree Celsius */
+        bme680_g.gas_sett.heatr_dur  = sensor_settings->heating_duration; /* milliseconds */
+        
+        /* Select the power mode */
+        /* Must be set before writing the sensor configuration */
+        bme680_g.power_mode = BME680_FORCED_MODE;
+        /* Set the required sensor settings needed */
+        set_required_settings = BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_GAS_SENSOR_SEL;
+        
+        /* Set the desired sensor configuration */
+        bme680_status = bme680_set_sensor_settings(set_required_settings, &bme680_g);
+             
+        /* Set power mode as forced mode and trigger forced mode measurement */
+        bme680_status = bme680_set_sensor_mode(&bme680_g);
+        
+        /* Get the total measurement duration so as to sleep or wait till the measurement is complete */
+        bme680_get_profile_dur(&meas_period, &bme680_g);
+        
+        /* Delay till the measurement is ready. Timestamp resolution in ms */
+        sleep((uint32_t)meas_period);
+    }
+    
+    /* Call the API to get current operation mode of the sensor */
+    bme680_status = bme680_get_sensor_mode(&bme680_g);  
+    /* When the measurement is completed and data is ready for reading, the sensor must be in BME680_SLEEP_MODE.
+     * Read operation mode to check whether measurement is completely done and wait until the sensor is no more
+     * in BME680_FORCED_MODE. */
+    while (bme680_g.power_mode == BME680_FORCED_MODE)
+    {
+        /* sleep for 5 ms */
+        sleep(5);
+        bme680_status = bme680_get_sensor_mode(&bme680_g);
+    }
+}
+
+/*!
+ * @brief       Read the data from registers and populate the inputs structure to be passed to do_steps function
+ *
+ * @param[in]   time_stamp_trigger      settings of the sensor returned from sensor control function
+ * @param[in]   inputs                  input structure containing the information on sensors to be passed to do_steps
+ * @param[in]   num_bsec_inputs         number of inputs to be passed to do_steps
+ * @param[in]   bsec_process_data       process data variable returned from sensor_control
+ *
+ * @return      none
+ */
+static void bme680_bsec_read_data(int64_t time_stamp_trigger, bsec_input_t *inputs, uint8_t *num_bsec_inputs,
+    int32_t bsec_process_data)
+{
+    static struct bme680_field_data data;
+    __attribute__((unused)) int8_t bme680_status = BME680_OK;
+    
+    /* We only have to read data if the previous call the bsec_sensor_control() actually asked for it */
+    if (bsec_process_data)
+    {
+        bme680_status = bme680_get_sensor_data(&data, &bme680_g);
+
+        if (data.status & BME680_NEW_DATA_MSK)
+        {
+            /* Pressure to be processed by BSEC */
+            if (bsec_process_data & BSEC_PROCESS_PRESSURE)
+            {
+                /* Place presssure sample into input struct */
+                inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_PRESSURE;
+                inputs[*num_bsec_inputs].signal = data.pressure;
+                inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger;
+                (*num_bsec_inputs)++;
+            }
+            /* Temperature to be processed by BSEC */
+            if (bsec_process_data & BSEC_PROCESS_TEMPERATURE)
+            {
+                /* Place temperature sample into input struct */
+                inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_TEMPERATURE;
+                #ifdef BME680_FLOAT_POINT_COMPENSATION
+                    inputs[*num_bsec_inputs].signal = data.temperature;
+                #else
+                    inputs[*num_bsec_inputs].signal = data.temperature / 100.0f;
+                #endif
+                inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger;
+                (*num_bsec_inputs)++;
+                
+                /* Also add optional heatsource input which will be subtracted from the temperature reading to 
+                 * compensate for device-specific self-heating (supported in BSEC IAQ solution)*/
+                inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_HEATSOURCE;
+                inputs[*num_bsec_inputs].signal = bme680_temperature_offset_g;
+                inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger;
+                (*num_bsec_inputs)++;
+            }
+            /* Humidity to be processed by BSEC */
+            if (bsec_process_data & BSEC_PROCESS_HUMIDITY)
+            {
+                /* Place humidity sample into input struct */
+                inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_HUMIDITY;
+                #ifdef BME680_FLOAT_POINT_COMPENSATION
+                    inputs[*num_bsec_inputs].signal = data.humidity;
+                #else
+                    inputs[*num_bsec_inputs].signal = data.humidity / 1000.0f;
+                #endif  
+                inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger;
+                (*num_bsec_inputs)++;
+            }
+            /* Gas to be processed by BSEC */
+            if (bsec_process_data & BSEC_PROCESS_GAS)
+            {
+                /* Check whether gas_valid flag is set */
+                if(data.status & BME680_GASM_VALID_MSK)
+                {
+                    /* Place sample into input struct */
+                    inputs[*num_bsec_inputs].sensor_id = BSEC_INPUT_GASRESISTOR;
+                    inputs[*num_bsec_inputs].signal = data.gas_resistance;
+                    inputs[*num_bsec_inputs].time_stamp = time_stamp_trigger;
+                    (*num_bsec_inputs)++;
+                }
+            }
+        }
+    }
+}
+
+/*!
+ * @brief       This function is written to process the sensor data for the requested virtual sensors
+ *
+ * @param[in]   bsec_inputs         input structure containing the information on sensors to be passed to do_steps
+ * @param[in]   num_bsec_inputs     number of inputs to be passed to do_steps
+ * @param[in]   output_ready        pointer to the function processing obtained BSEC outputs
+ *
+ * @return      none
+ */
+static void bme680_bsec_process_data(bsec_input_t *bsec_inputs, uint8_t num_bsec_inputs, output_ready_fct output_ready)
+{
+    /* Output buffer set to the maximum virtual sensor outputs supported */
+    bsec_output_t bsec_outputs[BSEC_NUMBER_OUTPUTS];
+    uint8_t num_bsec_outputs = 0;
+    uint8_t index = 0;
+
+    bsec_library_return_t bsec_status = BSEC_OK;
+    
+    int64_t timestamp = 0;
+    float iaq = 0.0f;
+    uint8_t iaq_accuracy = 0;
+    float temp = 0.0f;
+    float raw_temp = 0.0f;
+    float raw_pressure = 0.0f;
+    float humidity = 0.0f;
+    float raw_humidity = 0.0f;
+    float raw_gas = 0.0f;
+    float static_iaq = 0.0f;
+    __attribute__((unused)) uint8_t static_iaq_accuracy = 0;
+    float co2_equivalent = 0.0f;
+    __attribute__((unused)) uint8_t co2_accuracy = 0;
+    float breath_voc_equivalent = 0.0f;
+    __attribute__((unused)) uint8_t breath_voc_accuracy = 0;
+    __attribute__((unused)) float comp_gas_value = 0.0f;
+    __attribute__((unused)) uint8_t comp_gas_accuracy = 0;
+    __attribute__((unused)) float gas_percentage = 0.0f;
+    __attribute__((unused)) uint8_t gas_percentage_acccuracy = 0;
+    
+    /* Check if something should be processed by BSEC */
+    if (num_bsec_inputs > 0)
+    {
+        /* Set number of outputs to the size of the allocated buffer */
+        /* BSEC_NUMBER_OUTPUTS to be defined */
+        num_bsec_outputs = BSEC_NUMBER_OUTPUTS;
+        
+        /* Perform processing of the data by BSEC 
+           Note:
+           * The number of outputs you get depends on what you asked for during bsec_update_subscription(). This is
+             handled under bme680_bsec_update_subscription() function in this example file.
+           * The number of actual outputs that are returned is written to num_bsec_outputs. */
+        bsec_status = bsec_do_steps(bsec_inputs, num_bsec_inputs, bsec_outputs, &num_bsec_outputs);
+        
+        /* Iterate through the outputs and extract the relevant ones. */
+        for (index = 0; index < num_bsec_outputs; index++)
+        {
+            switch (bsec_outputs[index].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    iaq = bsec_outputs[index].signal;
+                    iaq_accuracy = bsec_outputs[index].accuracy;
+                    break;
+                case BSEC_OUTPUT_STATIC_IAQ:
+                    static_iaq = bsec_outputs[index].signal;
+                    static_iaq_accuracy = bsec_outputs[index].accuracy;
+                    break;
+                case BSEC_OUTPUT_CO2_EQUIVALENT:
+                    co2_equivalent = bsec_outputs[index].signal;
+                    co2_accuracy = bsec_outputs[index].accuracy;
+                    break;
+                case BSEC_OUTPUT_BREATH_VOC_EQUIVALENT:
+                    breath_voc_equivalent = bsec_outputs[index].signal;
+                    breath_voc_accuracy = bsec_outputs[index].accuracy;
+                    break;
+                case BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE:
+                    temp = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_RAW_PRESSURE:
+                    raw_pressure = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY:
+                    humidity = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_RAW_GAS:
+                    raw_gas = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_RAW_TEMPERATURE:
+                    raw_temp = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_RAW_HUMIDITY:
+                    raw_humidity = bsec_outputs[index].signal;
+                    break;
+                case BSEC_OUTPUT_COMPENSATED_GAS:
+                    comp_gas_value = bsec_outputs[index].signal;
+                    comp_gas_accuracy = bsec_outputs[index].accuracy;
+                    break;
+                case BSEC_OUTPUT_GAS_PERCENTAGE:
+                    gas_percentage = bsec_outputs[index].signal;
+                    gas_percentage_acccuracy = bsec_outputs[index].accuracy;
+                    break;
+                default:
+                    continue;
+            }
+            
+            /* Assume that all the returned timestamps are the same */
+            timestamp = bsec_outputs[index].time_stamp;
+        }
+        
+        /* Pass the extracted outputs to the user provided output_ready() function. */
+        output_ready(timestamp, iaq, iaq_accuracy, temp, humidity, raw_pressure, raw_temp, 
+            raw_humidity, raw_gas, bsec_status, static_iaq, co2_equivalent, breath_voc_equivalent);
+    }
+}
+
+/*!
+ * @brief       Runs the main (endless) loop that queries sensor settings, applies them, and processes the measured data
+ *
+ * @param[in]   sleep               pointer to the system specific sleep function
+ * @param[in]   get_timestamp_us    pointer to the system specific timestamp derivation function
+ * @param[in]   output_ready        pointer to the function processing obtained BSEC outputs
+ * @param[in]   state_save          pointer to the system-specific state save function
+ * @param[in]   save_intvl          interval at which BSEC state should be saved (in samples)
+ *
+ * @return      none
+ */
+void bsec_iot_loop(sleep_fct sleep, get_timestamp_us_fct get_timestamp_us, output_ready_fct output_ready,
+                    state_save_fct state_save, uint32_t save_intvl)
+{
+    /* Timestamp variables */
+    int64_t time_stamp = 0;
+    int64_t time_stamp_interval_ms = 0;
+    
+    /* Allocate enough memory for up to BSEC_MAX_PHYSICAL_SENSOR physical inputs*/
+    bsec_input_t bsec_inputs[BSEC_MAX_PHYSICAL_SENSOR];
+    
+    /* Number of inputs to BSEC */
+    uint8_t num_bsec_inputs = 0;
+    
+    /* BSEC sensor settings struct */
+    bsec_bme_settings_t sensor_settings;
+    
+    /* Save state variables */
+    uint8_t bsec_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint8_t work_buffer[BSEC_MAX_WORKBUFFER_SIZE];
+    uint32_t bsec_state_len = 0;
+    uint32_t n_samples = 0;
+    
+    bsec_library_return_t bsec_status = BSEC_OK;
+
+    while (1)
+    {
+        /* get the timestamp in nanoseconds before calling bsec_sensor_control() */
+        time_stamp = get_timestamp_us() * 1000;
+        
+        /* Retrieve sensor settings to be used in this time instant by calling bsec_sensor_control */
+        bsec_sensor_control(time_stamp, &sensor_settings);
+        
+        /* Trigger a measurement if necessary */
+        bme680_bsec_trigger_measurement(&sensor_settings, sleep);
+        
+        /* Read data from last measurement */
+        num_bsec_inputs = 0;
+        bme680_bsec_read_data(time_stamp, bsec_inputs, &num_bsec_inputs, sensor_settings.process_data);
+        
+        /* Time to invoke BSEC to perform the actual processing */
+        bme680_bsec_process_data(bsec_inputs, num_bsec_inputs, output_ready);
+        
+        /* Increment sample counter */
+        n_samples++;
+        
+        /* Retrieve and store state if the passed save_intvl */
+        if (n_samples >= save_intvl)
+        {
+            bsec_status = bsec_get_state(0, bsec_state, sizeof(bsec_state), work_buffer, sizeof(work_buffer), &bsec_state_len);
+            if (bsec_status == BSEC_OK)
+            {
+                state_save(bsec_state, bsec_state_len);
+            }
+            n_samples = 0;
+        }
+        
+        
+        /* Compute how long we can sleep until we need to call bsec_sensor_control() next */
+        /* Time_stamp is converted from microseconds to nanoseconds first and then the difference to milliseconds */
+        time_stamp_interval_ms = (sensor_settings.next_call - get_timestamp_us() * 1000) / 1000000;
+        if (time_stamp_interval_ms > 0)
+        {
+            sleep((uint32_t)time_stamp_interval_ms);
+        }
+    }
+}
+
+/*! @}*/
+
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.h b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.h
new file mode 100644
index 0000000000000000000000000000000000000000..a15177f9c7a6d3884fa017d50ff1dfd0ae593ae8
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_integration.h
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+/*!
+ * @file bsec_integration.h
+ *
+ * @brief
+ * Contains BSEC integration API
+ */
+
+/*!
+ * @addtogroup bsec_examples BSEC Examples
+ * @brief BSEC usage examples
+ * @{*/
+
+#ifndef __BSEC_INTEGRATION_H__
+#define __BSEC_INTEGRATION_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**********************************************************************************************************************/
+/* header files */
+/**********************************************************************************************************************/
+
+/* Use the following bme680 driver: https://github.com/BoschSensortec/BME680_driver/releases/tag/bme680_v3.5.1 */
+#include "bme680.h"
+/* BSEC header files are available in the inc/ folder of the release package */
+#include "bsec_interface.h"
+#include "bsec_datatypes.h"
+
+
+/**********************************************************************************************************************/
+/* type definitions */
+/**********************************************************************************************************************/
+
+/* function pointer to the system specific sleep function */
+typedef void (*sleep_fct)(uint32_t t_ms);
+
+/* function pointer to the system specific timestamp derivation function */
+typedef int64_t (*get_timestamp_us_fct)();
+
+/* function pointer to the function processing obtained BSEC outputs */
+typedef void (*output_ready_fct)(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity,
+     float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status,
+     float static_iaq, float co2_equivalent, float breath_voc_equivalent);
+
+/* function pointer to the function loading a previous BSEC state from NVM */
+typedef uint32_t (*state_load_fct)(uint8_t *state_buffer, uint32_t n_buffer);
+
+/* function pointer to the function saving BSEC state to NVM */
+typedef void (*state_save_fct)(const uint8_t *state_buffer, uint32_t length);
+
+/* function pointer to the function loading the BSEC configuration string from NVM */
+typedef uint32_t (*config_load_fct)(uint8_t *state_buffer, uint32_t n_buffer);
+    
+/* structure definitions */
+
+/* Structure with the return value from bsec_iot_init() */
+typedef struct{
+	/*! Result of API execution status */
+	int8_t bme680_status;
+	/*! Result of BSEC library */
+	bsec_library_return_t bsec_status;
+}return_values_init;
+/**********************************************************************************************************************/
+/* function declarations */
+/**********************************************************************************************************************/
+
+/*!
+ * @brief       Initialize the BME680 sensor and the BSEC library
+ *
+ * @param[in]   sample_rate         mode to be used (either BSEC_SAMPLE_RATE_ULP or BSEC_SAMPLE_RATE_LP)
+ * @param[in]   temperature_offset  device-specific temperature offset (due to self-heating)
+ * @param[in]   bus_write           pointer to the bus writing function
+ * @param[in]   bus_read            pointer to the bus reading function
+ * @param[in]   sleep               pointer to the system-specific sleep function
+ * @param[in]   state_load          pointer to the system-specific state load function
+ *
+ * @return      zero if successful, negative otherwise
+ */
+return_values_init bsec_iot_init(float sample_rate, float temperature_offset, bme680_com_fptr_t bus_write, bme680_com_fptr_t bus_read, 
+    sleep_fct sleep, state_load_fct state_load, config_load_fct config_load);
+
+/*!
+ * @brief       Runs the main (endless) loop that queries sensor settings, applies them, and processes the measured data
+ *
+ * @param[in]   sleep               pointer to the system-specific sleep function
+ * @param[in]   get_timestamp_us    pointer to the system-specific timestamp derivation function
+ * @param[in]   output_ready        pointer to the function processing obtained BSEC outputs
+ * @param[in]   state_save          pointer to the system-specific state save function
+ * @param[in]   save_intvl          interval at which BSEC state should be saved (in samples)
+ *
+ * @return      return_values_init	struct with the result of the API and the BSEC library
+ */ 
+void bsec_iot_loop(sleep_fct sleep, get_timestamp_us_fct get_timestamp_us, output_ready_fct output_ready,
+    state_save_fct state_save, uint32_t save_intvl);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BSEC_INTEGRATION_H__ */
+
+/*! @}*/
+
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_interface.h b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6c09a392958a326a5553bf2c5bbb4afa2d0cedc
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_interface.h
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2015, 2016, 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+ /*!
+ * 
+ * @file        bsec_interface.h
+ *
+ * @brief
+ * Contains the API for BSEC
+ *
+ */
+
+
+#ifndef __BSEC_INTERFACE_H__
+#define __BSEC_INTERFACE_H__
+
+#include "bsec_datatypes.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*! @addtogroup bsec_interface BSEC C Interface
+ *   @brief Interfaces of BSEC signal processing library
+ *
+ * ### Interface usage
+ * 
+ * The following provides a short overview on the typical operation sequence for BSEC.
+ * 
+ * - Initialization of the library
+ * 
+ * | Steps                                                               | Function                 |
+ * |---------------------------------------------------------------------|--------------------------|
+ * | Initialization of library                                           | bsec_init()              |
+ * | Update configuration settings (optional)                            | bsec_set_configuration() |
+ * | Restore the state of the library (optional)                         | bsec_set_state()         |
+ *
+ * 
+ * - The following function is called to enable output signals and define their sampling rate / operation mode.
+ * 
+ * | Steps                                       |  Function                  |
+ * |---------------------------------------------|----------------------------|
+ * | Enable library outputs with specified mode  | bsec_update_subscription() |
+ *
+ * 
+ * - This table describes the main processing loop.
+ * 
+ * | Steps                                     | Function                         |
+ * |-------------------------------------------|----------------------------------|
+ * | Retrieve sensor settings to be used       | bsec_sensor_control()            |
+ * | Configure sensor and trigger measurement  | See BME680 API and example codes |
+ * | Read results from sensor                  | See BME680 API and example codes |
+ * | Perform signal processing                 | bsec_do_steps()                  |
+ *
+ * 
+ * - Before shutting down the system, the current state of BSEC can be retrieved and can then be used during 
+ *   re-initialization to continue processing.
+ *   
+ * | Steps                                  | Function          |
+ * |----------------------------------------|-------------------|
+ * | To retrieve the current library state  |  bsec_get_state() |
+ * 
+ * 
+ * 
+ * ### Configuration and state                       
+ * 
+ * Values of variables belonging to a BSEC instance are divided into two groups:
+ *  - Values **not updated by processing** of signals belong to the **configuration group**. If available, BSEC can be 
+ *    configured before use with a customer specific configuration string.
+ *  - Values **updated during processing** are member of the **state group**. Saving and restoring of the state of BSEC 
+ *    is necessary to maintain previously estimated sensor models and baseline information which is important for best 
+ *    performance of the gas sensor outputs.
+ * 
+ * @note BSEC library consists of adaptive algorithms which models the gas sensor which improves its performance over 
+ *       the time. These will be lost if library is initialized due to system reset. In order to avoid this situation 
+ *       library state shall be stored in non volatile memory so that it can be loaded after system reset.
+ *
+ * 
+ *   @{
+ */
+
+
+/*!
+ * @brief Return the version information of BSEC library
+ *
+ * @param [out]     bsec_version_p      pointer to struct which is to be populated with the version information
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+ * See also: bsec_version_t
+ *
+  \code{.c}
+    // Example // 
+    bsec_version_t  version;
+    bsec_get_version(&version);
+    printf("BSEC version: %d.%d.%d.%d",version.major, version.minor, version.major_bugfix, version.minor_bugfix);
+ 
+  \endcode
+*/
+
+bsec_library_return_t bsec_get_version(bsec_version_t * bsec_version_p);
+
+
+/*!
+ * @brief Initialize the library
+ *
+ * Initialization and reset of BSEC is performed by calling bsec_init(). Calling this function sets up the relation 
+ * among all internal modules, initializes run-time dependent library states and resets the configuration and state
+ * of all BSEC signal processing modules to defaults.
+ * 
+ * Before any further use, the library must be initialized. This ensure that all memory and states are in defined
+ * conditions prior to processing any data.
+ *
+ * @return Zero if successful, otherwise an error code
+ *
+  \code{.c}
+ 
+    // Initialize BSEC library before further use
+    bsec_init();
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_init(void);
+
+/*!
+ * @brief Subscribe to library virtual sensors outputs
+ *
+ * Use bsec_update_subscription() to instruct BSEC which of the processed output signals are requested at which sample rates.
+ * See ::bsec_virtual_sensor_t for available library outputs. 
+ *
+ * Based on the requested virtual sensors outputs, BSEC will provide information about the required physical sensor input signals 
+ * (see ::bsec_physical_sensor_t) with corresponding sample rates. This information is purely informational as bsec_sensor_control()
+ * will ensure the sensor is operated in the required manner. To disable a virtual sensor, set the sample rate to BSEC_SAMPLE_RATE_DISABLED.
+ *
+ * The subscription update using bsec_update_subscription() is apart from the signal processing one of the the most 
+ * important functions. It allows to enable the desired library outputs. The function determines which physical input 
+ * sensor signals are required at which sample rate to produce the virtual output sensor signals requested by the user. 
+ * When this function returns with success, the requested outputs are called subscribed. A very important feature is the 
+ * retaining of already subscribed outputs. Further outputs can be requested or disabled both individually and 
+ * group-wise in addition to already subscribed outputs without changing them unless a change of already subscribed 
+ * outputs is requested.
+ *
+ * @note The state of the library concerning the subscribed outputs cannot be retained among reboots.
+ *
+ * The interface of bsec_update_subscription() requires the usage of arrays of sensor configuration structures. 
+ * Such a structure has the fields sensor identifier and sample rate. These fields have the properties:
+ *  - Output signals of virtual sensors must be requested using unique identifiers (Member of ::bsec_virtual_sensor_t)
+ *  - Different sets of identifiers are available for inputs of physical sensors and outputs of virtual sensors
+ *  - Identifiers are unique values defined by the library, not from external
+ *  - Sample rates must be provided as value of
+ *     - An allowed sample rate for continuously sampled signals
+ *     - 65535.0f (BSEC_SAMPLE_RATE_DISABLED) to turn off outputs and identify disabled inputs
+ *
+ * @note The same sensor identifiers are also used within the functions bsec_do_steps().
+ *
+ * The usage principles of bsec_update_subscription() are:
+ *  - Differential updates (i.e., only asking for outputs that the user would like to change) is supported.
+ *  - Invalid requests of outputs are ignored. Also if one of the requested outputs is unavailable, all the requests 
+ *    are ignored. At the same time, a warning is returned.
+ *  - To disable BSEC, all outputs shall be turned off. Only enabled (subscribed) outputs have to be disabled while 
+ *    already disabled outputs do not have to be disabled explicitly.
+ *
+ * @param[in]       requested_virtual_sensors       Pointer to array of requested virtual sensor (output) configurations for the library
+ * @param[in]       n_requested_virtual_sensors     Number of virtual sensor structs pointed by requested_virtual_sensors
+ * @param[out]      required_sensor_settings        Pointer to array of required physical sensor configurations for the library
+ * @param[in,out]   n_required_sensor_settings      [in] Size of allocated required_sensor_settings array, [out] number of sensor configurations returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ * @sa bsec_sensor_configuration_t
+ * @sa bsec_physical_sensor_t
+ * @sa bsec_virtual_sensor_t
+ *
+  \code{.c}
+    // Example //
+
+    // Change 3 virtual sensors (switch IAQ and raw temperature -> on / pressure -> off) 
+    bsec_sensor_configuration_t requested_virtual_sensors[3];
+    uint8_t n_requested_virtual_sensors = 3;
+ 
+    requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
+    requested_virtual_sensors[0].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
+    requested_virtual_sensors[1].sample_rate = BSEC_SAMPLE_RATE_ULP; 
+    requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
+    requested_virtual_sensors[2].sample_rate = BSEC_SAMPLE_RATE_DISABLED; 
+    
+    // Allocate a struct for the returned physical sensor settings
+    bsec_sensor_configuration_t required_sensor_settings[BSEC_MAX_PHYSICAL_SENSOR];
+    uint8_t  n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
+ 
+    // Call bsec_update_subscription() to enable/disable the requested virtual sensors
+    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
+  \endcode
+ *
+ */
+bsec_library_return_t bsec_update_subscription(const bsec_sensor_configuration_t * const requested_virtual_sensors,
+                const uint8_t n_requested_virtual_sensors, bsec_sensor_configuration_t * required_sensor_settings,
+                uint8_t * n_required_sensor_settings);
+
+
+/*!
+ * @brief Main signal processing function of BSEC
+ *
+ *
+ * Processing of the input signals and returning of output samples is performed by bsec_do_steps().
+ * - The samples of all library inputs must be passed with unique identifiers representing the input signals from 
+ *   physical sensors where the order of these inputs can be chosen arbitrary. However, all input have to be provided 
+ *   within the same time period as they are read. A sequential provision to the library might result in undefined 
+ *   behavior.
+ * - The samples of all library outputs are returned with unique identifiers corresponding to the output signals of 
+ *   virtual sensors where the order of the returned outputs may be arbitrary.
+ * - The samples of all input as well as output signals of physical as well as virtual sensors use the same 
+ *   representation in memory with the following fields:
+ * - Sensor identifier:
+ *   - For inputs: required to identify the input signal from a physical sensor
+ *   - For output: overwritten by bsec_do_steps() to identify the returned signal from a virtual sensor
+ *   - Time stamp of the sample
+ *
+ * Calling bsec_do_steps() requires the samples of the input signals to be provided along with their time stamp when 
+ * they are recorded and only when they are acquired. Repetition of samples with the same time stamp are ignored and 
+ * result in a warning. Repetition of values of samples which are not acquired anew by a sensor result in deviations 
+ * of the computed output signals. Concerning the returned output samples, an important feature is, that a value is 
+ * returned for an output only when a new occurrence has been computed. A sample of an output signal is returned only 
+ * once.
+ *
+ *
+ * @param[in]       inputs          Array of input data samples. Each array element represents a sample of a different physical sensor.
+ * @param[in]       n_inputs        Number of passed input data structs.
+ * @param[out]      outputs         Array of output data samples. Each array element represents a sample of a different virtual sensor.
+ * @param[in,out]   n_outputs       [in] Number of allocated output structs, [out] number of outputs returned
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+
+ \code{.c}
+    // Example //
+        
+    // Allocate input and output memory
+    bsec_input_t input[3];
+    uint8_t n_input = 3;
+    bsec_output_t output[2];
+    uint8_t  n_output=2;
+
+    bsec_library_return_t status;
+
+    // Populate the input structs, assuming the we have timestamp (ts), 
+    // gas sensor resistance (R), temperature (T), and humidity (rH) available
+    // as input variables
+    input[0].sensor_id = BSEC_INPUT_GASRESISTOR;
+    input[0].signal = R;
+    input[0].time_stamp= ts;   
+    input[1].sensor_id = BSEC_INPUT_TEMPERATURE;   
+    input[1].signal = T;   
+    input[1].time_stamp= ts;   
+    input[2].sensor_id = BSEC_INPUT_HUMIDITY;
+    input[2].signal = rH;
+    input[2].time_stamp= ts;   
+
+        
+    // Invoke main processing BSEC function
+    status = bsec_do_steps( input, n_input, output, &n_output );
+
+    // Iterate through the BSEC output data, if the call succeeded
+    if(status == BSEC_OK)
+    {
+        for(int i = 0; i < n_output; i++)
+        {   
+            switch(output[i].sensor_id)
+            {
+                case BSEC_OUTPUT_IAQ:
+                    // Retrieve the IAQ results from output[i].signal
+                    // and do something with the data
+                    break;
+                case BSEC_OUTPUT_AMBIENT_TEMPERATURE:
+                    // Retrieve the ambient temperature results from output[i].signal
+                    // and do something with the data
+                    break;
+                
+            }
+        }
+    }
+    
+ \endcode
+ */
+ 
+bsec_library_return_t bsec_do_steps(const bsec_input_t * const inputs, const uint8_t n_inputs, bsec_output_t * outputs, uint8_t * n_outputs);
+
+
+/*!
+ * @brief Reset a particular virtual sensor output
+ *
+ * This function allows specific virtual sensor outputs to be reset. The meaning of "reset" depends on the specific 
+ * output. In case of the IAQ output, reset means zeroing the output to the current ambient conditions.
+ *
+ * @param[in]       sensor_id           Virtual sensor to be reset
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+ *
+  \code{.c}
+    // Example // 
+    bsec_reset_output(BSEC_OUTPUT_IAQ);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_reset_output(uint8_t sensor_id);
+
+
+/*!
+ * @brief Update algorithm configuration parameters
+ *
+ * BSEC uses a default configuration for the modules and common settings. The initial configuration can be customized 
+ * by bsec_set_configuration(). This is an optional step.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose 
+ * the serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting 
+ * the required size.
+ *
+ * @param[in]       serialized_settings     Settings serialized to a binary blob
+ * @param[in]       n_serialized_settings   Size of the settings blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+    
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a provided config string into serialized_settings 
+    
+    // Apply the configuration
+    bsec_set_configuration(serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_set_configuration(const uint8_t * const serialized_settings,
+                const uint32_t n_serialized_settings, uint8_t * work_buffer,
+                const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Restore the internal state of the library
+ *
+ * BSEC uses a default state for all signal processing modules and the BSEC module. To ensure optimal performance, 
+ * especially of the gas sensor functionality, it is recommended to retrieve the state using bsec_get_state()
+ * before unloading the library, storing it in some form of non-volatile memory, and setting it using bsec_set_state() 
+ * before resuming further operation of the library.
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ *
+ * @param[in]       serialized_state        States serialized to a binary blob
+ * @param[in]       n_serialized_state      Size of the state blob
+ * @param[in,out]   work_buffer             Work buffer used to parse the blob
+ * @param[in]       n_work_buffer_size      Length of the work buffer available for parsing the blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example // 
+  
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_serialized_state = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_PROPERTY_BLOB_SIZE;
+
+    // Here we will load a state string from a previous use of BSEC
+
+    // Apply the previous state to the current BSEC session
+    bsec_set_state(serialized_state, n_serialized_state, work_buffer_state, n_work_buffer_size);
+
+  \endcode
+*/
+
+bsec_library_return_t bsec_set_state(const uint8_t * const serialized_state, const uint32_t n_serialized_state,
+                uint8_t * work_buffer, const uint32_t n_work_buffer_size);
+
+
+/*!
+ * @brief Retrieve the current library configuration
+ *
+ * BSEC allows to retrieve the current configuration using bsec_get_configuration(). Returns a binary blob encoding 
+ * the current configuration parameters of the library in a format compatible with bsec_set_configuration().
+ *
+ * @note The function bsec_get_configuration() is required to be used for debugging purposes only.
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_PROPERTY_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       config_id                   Identifier for a specific set of configuration settings to be returned;
+ *                                              shall be zero to retrieve all configuration settings.
+ * @param[out]      serialized_settings         Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_settings_max   Maximum available size for the serialized settings
+ * @param[in,out]   work_buffer                 Work buffer used to parse the binary blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_settings       Actual size of the returned serialized configuration blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_settings[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_serialized_settings_max = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint8_t work_buffer[BSEC_MAX_PROPERTY_BLOB_SIZE];
+    uint32_t n_work_buffer = BSEC_MAX_PROPERTY_BLOB_SIZE;
+    uint32_t n_serialized_settings = 0;
+    
+    // Configuration of BSEC algorithm is stored in 'serialized_settings'
+    bsec_get_configuration(0, serialized_settings, n_serialized_settings_max, work_buffer, n_work_buffer, &n_serialized_settings);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_configuration(const uint8_t config_id, uint8_t * serialized_settings, const uint32_t n_serialized_settings_max,
+                uint8_t * work_buffer, const uint32_t n_work_buffer, uint32_t * n_serialized_settings);
+
+
+/*!
+ *@brief Retrieve the current internal library state
+ *
+ * BSEC allows to retrieve the current states of all signal processing modules and the BSEC module using 
+ * bsec_get_state(). This allows a restart of the processing after a reboot of the system by calling bsec_set_state().
+ * 
+ * @note A work buffer with sufficient size is required and has to be provided by the function caller to decompose the 
+ * serialization and apply it to the library and its modules. Please use #BSEC_MAX_STATE_BLOB_SIZE for allotting the 
+ * required size.
+ * 
+ *
+ * @param[in]       state_set_id                Identifier for a specific set of states to be returned; shall be
+ *                                              zero to retrieve all states.
+ * @param[out]      serialized_state            Buffer to hold the serialized config blob
+ * @param[in]       n_serialized_state_max      Maximum available size for the serialized states
+ * @param[in,out]   work_buffer                 Work buffer used to parse the blob
+ * @param[in]       n_work_buffer               Length of the work buffer available for parsing the blob
+ * @param[out]      n_serialized_state          Actual size of the returned serialized blob
+ *
+ * @return Zero when successful, otherwise an error code
+ *
+  \code{.c}
+    // Example //
+ 
+    // Allocate variables
+    uint8_t serialized_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t n_serialized_state_max = BSEC_MAX_STATE_BLOB_SIZE;
+    uint32_t  n_serialized_state = BSEC_MAX_STATE_BLOB_SIZE;
+    uint8_t work_buffer_state[BSEC_MAX_STATE_BLOB_SIZE];
+    uint32_t  n_work_buffer_size = BSEC_MAX_STATE_BLOB_SIZE;
+    
+    // Algorithm state is stored in 'serialized_state'
+    bsec_get_state(0, serialized_state, n_serialized_state_max, work_buffer_state, n_work_buffer_size, &n_serialized_state);
+
+  \endcode
+ */
+
+bsec_library_return_t bsec_get_state(const uint8_t state_set_id, uint8_t * serialized_state,
+                const uint32_t n_serialized_state_max, uint8_t * work_buffer, const uint32_t n_work_buffer,
+                uint32_t * n_serialized_state);
+
+/*!
+ * @brief Retrieve BMExxx sensor instructions
+ *
+ * The bsec_sensor_control() interface is a key feature of BSEC, as it allows an easy way for the signal processing 
+ * library to control the operation of the BME sensor. This is important since gas sensor behaviour is mainly 
+ * determined by how the integrated heater is configured. To ensure an easy integration of BSEC into any system, 
+ * bsec_sensor_control() will provide the caller with information about the current sensor configuration that is 
+ * necessary to fulfill the input requirements derived from the current outputs requested via 
+ * bsec_update_subscription().
+ *
+ * In practice the use of this function shall be as follows:
+ * - Call bsec_sensor_control() which returns a bsec_bme_settings_t struct.
+ * - Based on the information contained in this struct, the sensor is configured and a forced-mode measurement is 
+ *   triggered if requested by bsec_sensor_control().
+ * - Once this forced-mode measurement is complete, the signals specified in this struct shall be passed to 
+ *   bsec_do_steps() to perform the signal processing.
+ * - After processing, the process should sleep until the bsec_bme_settings_t::next_call timestamp is reached.
+ *
+ * 
+ * @param [in]      time_stamp                Current timestamp in [ns]
+ * @param[out]      sensor_settings           Settings to be passed to API to operate sensor at this time instance
+ *
+ * @return Zero when successful, otherwise an error code
+ */
+
+bsec_library_return_t bsec_sensor_control(const int64_t time_stamp, bsec_bme_settings_t *sensor_settings);
+
+/*@}*/  //BSEC Interface
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __BSEC_INTERFACE_H__ */
diff --git a/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_iot_example.ino b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_iot_example.ino
new file mode 100644
index 0000000000000000000000000000000000000000..8d03ec70c60365a5f4756ff37d12bb8231f71bf4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/examples/bsec_iot_example/bsec_iot_example.ino
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2017 Robert Bosch. All Rights Reserved. 
+ *
+ * Disclaimer
+ *
+ * Common:
+ * Bosch Sensortec products are developed for the consumer goods industry. They may only be used
+ * within the parameters of the respective valid product data sheet.  Bosch Sensortec products are
+ * provided with the express understanding that there is no warranty of fitness for a particular purpose.
+ * They are not fit for use in life-sustaining, safety or security sensitive systems or any system or device
+ * that may lead to bodily harm or property damage if the system or device malfunctions. In addition,
+ * Bosch Sensortec products are not fit for use in products which interact with motor vehicle systems.
+ * The resale and/or use of products are at the purchasers own risk and his own responsibility. The
+ * examination of fitness for the intended use is the sole responsibility of the Purchaser.
+ *
+ * The purchaser shall indemnify Bosch Sensortec from all third party claims, including any claims for
+ * incidental, or consequential damages, arising from any product use not covered by the parameters of
+ * the respective valid product data sheet or not approved by Bosch Sensortec and reimburse Bosch
+ * Sensortec for all costs in connection with such claims.
+ *
+ * The purchaser must monitor the market for the purchased products, particularly with regard to
+ * product safety and inform Bosch Sensortec without delay of all security relevant incidents.
+ *
+ * Engineering Samples are marked with an asterisk (*) or (e). Samples may vary from the valid
+ * technical specifications of the product series. They are therefore not intended or fit for resale to third
+ * parties or for use in end products. Their sole purpose is internal client testing. The testing of an
+ * engineering sample may in no way replace the testing of a product series. Bosch Sensortec
+ * assumes no liability for the use of engineering samples. By accepting the engineering samples, the
+ * Purchaser agrees to indemnify Bosch Sensortec from all claims arising from the use of engineering
+ * samples.
+ *
+ * Special:
+ * This software module (hereinafter called "Software") and any information on application-sheets
+ * (hereinafter called "Information") is provided free of charge for the sole purpose to support your
+ * application work. The Software and Information is subject to the following terms and conditions:
+ *
+ * The Software is specifically designed for the exclusive use for Bosch Sensortec products by
+ * personnel who have special experience and training. Do not use this Software if you do not have the
+ * proper experience or training.
+ *
+ * This Software package is provided `` as is `` and without any expressed or implied warranties,
+ * including without limitation, the implied warranties of merchantability and fitness for a particular
+ * purpose.
+ *
+ * Bosch Sensortec and their representatives and agents deny any liability for the functional impairment
+ * of this Software in terms of fitness, performance and safety. Bosch Sensortec and their
+ * representatives and agents shall not be liable for any direct or indirect damages or injury, except as
+ * otherwise stipulated in mandatory applicable law.
+ *
+ * The Information provided is believed to be accurate and reliable. Bosch Sensortec assumes no
+ * responsibility for the consequences of use of such Information nor for any infringement of patents or
+ * other rights of third parties which may result from its use. No license is granted by implication or
+ * otherwise under any patent or patent rights of Bosch. Specifications mentioned in the Information are
+ * subject to change without notice.
+ *
+ * It is not allowed to deliver the source code of the Software to any third party without permission of
+ * Bosch Sensortec.
+ *
+ */
+
+/*!
+ * @file bsec_iot_example.ino
+ *
+ * @brief
+ * Example for using of BSEC library in a fixed configuration with the BME680 sensor.
+ * This works by running an endless loop in the bsec_iot_loop() function.
+ */
+
+/*!
+ * @addtogroup bsec_examples BSEC Examples
+ * @brief BSEC usage examples
+ * @{*/
+
+/**********************************************************************************************************************/
+/* header files */
+/**********************************************************************************************************************/
+
+#include "bsec_integration.h"
+#include <Wire.h>
+
+/**********************************************************************************************************************/
+/* functions */
+/**********************************************************************************************************************/
+
+/*!
+ * @brief           Write operation in either Wire or SPI
+ *
+ * param[in]        dev_addr        Wire or SPI device address
+ * param[in]        reg_addr        register address
+ * param[in]        reg_data_ptr    pointer to the data to be written
+ * param[in]        data_len        number of bytes to be written
+ *
+ * @return          result of the bus communication function
+ */
+int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len)
+{
+    Wire.beginTransmission(dev_addr);
+    Wire.write(reg_addr);    /* Set register address to start writing to */
+ 
+    /* Write the data */
+    for (int index = 0; index < data_len; index++) {
+        Wire.write(reg_data_ptr[index]);
+    }
+ 
+    return (int8_t)Wire.endTransmission();
+}
+
+/*!
+ * @brief           Read operation in either Wire or SPI
+ *
+ * param[in]        dev_addr        Wire or SPI device address
+ * param[in]        reg_addr        register address
+ * param[out]       reg_data_ptr    pointer to the memory to be used to store the read data
+ * param[in]        data_len        number of bytes to be read
+ *
+ * @return          result of the bus communication function
+ */
+int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len)
+{
+    int8_t comResult = 0;
+    Wire.beginTransmission(dev_addr);
+    Wire.write(reg_addr);                    /* Set register address to start reading from */
+    comResult = Wire.endTransmission();
+ 
+    delayMicroseconds(150);                 /* Precautionary response delay */
+    Wire.requestFrom(dev_addr, (uint8_t)data_len);    /* Request data */
+ 
+    int index = 0;
+    while (Wire.available())  /* The slave device may send less than requested (burst read) */
+    {
+        reg_data_ptr[index] = Wire.read();
+        index++;
+    }
+ 
+    return comResult;
+}
+
+/*!
+ * @brief           System specific implementation of sleep function
+ *
+ * @param[in]       t_ms    time in milliseconds
+ *
+ * @return          none
+ */
+void sleep(uint32_t t_ms)
+{
+    delay(t_ms);
+}
+
+/*!
+ * @brief           Capture the system time in microseconds
+ *
+ * @return          system_current_time    current system timestamp in microseconds
+ */
+int64_t get_timestamp_us()
+{
+    return (int64_t) millis() * 1000;
+}
+
+/*!
+ * @brief           Handling of the ready outputs
+ *
+ * @param[in]       timestamp       time in nanoseconds
+ * @param[in]       iaq             IAQ signal
+ * @param[in]       iaq_accuracy    accuracy of IAQ signal
+ * @param[in]       temperature     temperature signal
+ * @param[in]       humidity        humidity signal
+ * @param[in]       pressure        pressure signal
+ * @param[in]       raw_temperature raw temperature signal
+ * @param[in]       raw_humidity    raw humidity signal
+ * @param[in]       gas             raw gas sensor signal
+ * @param[in]       bsec_status     value returned by the bsec_do_steps() call
+ *
+ * @return          none
+ */
+void output_ready(int64_t timestamp, float iaq, uint8_t iaq_accuracy, float temperature, float humidity,
+     float pressure, float raw_temperature, float raw_humidity, float gas, bsec_library_return_t bsec_status,
+     float static_iaq, float co2_equivalent, float breath_voc_equivalent)
+{
+    Serial.print("[");
+    Serial.print(timestamp/1e6);
+    Serial.print("] T: ");
+    Serial.print(temperature);
+    Serial.print("| rH: ");
+    Serial.print(humidity);
+    Serial.print("| IAQ: ");
+    Serial.print(iaq);
+    Serial.print(" (");
+    Serial.print(iaq_accuracy);
+    Serial.print("| Static IAQ: ");
+    Serial.print(static_iaq);
+    Serial.print("| CO2e: ");
+    Serial.print(co2_equivalent);
+    Serial.print("| bVOC: ");
+    Serial.println(breath_voc_equivalent);
+}
+
+/*!
+ * @brief           Load previous library state from non-volatile memory
+ *
+ * @param[in,out]   state_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to state_buffer
+ */
+uint32_t state_load(uint8_t *state_buffer, uint32_t n_buffer)
+{
+    // ...
+    // Load a previous library state from non-volatile memory, if available.
+    //
+    // Return zero if loading was unsuccessful or no state was available, 
+    // otherwise return length of loaded state string.
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief           Save library state to non-volatile memory
+ *
+ * @param[in]       state_buffer    buffer holding the state to be stored
+ * @param[in]       length          length of the state string to be stored
+ *
+ * @return          none
+ */
+void state_save(const uint8_t *state_buffer, uint32_t length)
+{
+    // ...
+    // Save the string some form of non-volatile memory, if possible.
+    // ...
+}
+
+/*!
+ * @brief           Load library config from non-volatile memory
+ *
+ * @param[in,out]   config_buffer    buffer to hold the loaded state string
+ * @param[in]       n_buffer        size of the allocated state buffer
+ *
+ * @return          number of bytes copied to config_buffer
+ */
+uint32_t config_load(uint8_t *config_buffer, uint32_t n_buffer)
+{
+    // ...
+    // Load a library config from non-volatile memory, if available.
+    //
+    // Return zero if loading was unsuccessful or no config was available, 
+    // otherwise return length of loaded config string.
+    // ...
+    return 0;
+}
+
+/*!
+ * @brief       Main function which configures BSEC library and then reads and processes the data from sensor based
+ *              on timer ticks
+ *
+ * @return      result of the processing
+ */
+void setup()
+{
+    return_values_init ret;
+
+    /* Init I2C and serial communication */
+    Wire.begin();
+    Serial.begin(115200);
+  
+    /* Call to the function which initializes the BSEC library 
+     * Switch on low-power mode and provide no temperature offset */
+    ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 5.0f, bus_write, bus_read, sleep, state_load, config_load);
+    if (ret.bme680_status)
+    {
+        /* Could not intialize BME680 */
+        Serial.println("Error while initializing BME680");
+        return;
+    }
+    else if (ret.bsec_status)
+    {
+        /* Could not intialize BSEC library */
+        Serial.println("Error while initializing BSEC library");
+        return;
+    }
+    
+    /* Call to endless loop function which reads and processes data based on sensor settings */
+    /* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes  */
+    bsec_iot_loop(sleep, get_timestamp_us, output_ready, state_save, 10000);
+}
+
+void loop()
+{
+}
+
+/*! @}*/
+
diff --git a/lib/vendor/Bosch/BSEC/integration_guide/BST-BME680-Integration-Guide-AN008-48.pdf b/lib/vendor/Bosch/BSEC/integration_guide/BST-BME680-Integration-Guide-AN008-48.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6fc319d9ff5293b85358ee7f027539b6d9415f21
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/integration_guide/BST-BME680-Integration-Guide-AN008-48.pdf
@@ -0,0 +1,17876 @@
+%PDF-1.7
+%����
+4 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+7 0 obj
+(\376\377\000B\000S\000E\000C\000\040\000I\000n\000t\000e\000g\000r\000a\000t\000i\000o\000n\000\040\000G\000u\000i\000d\000e\000l\000i\000n\000e)
+endobj
+8 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+11 0 obj
+(\376\377\000O\000v\000e\000r\000v\000i\000e\000w\000\040\000o\000f\000\040\000B\000M\000E\000\040\000F\000a\000m\000i\000l\000y\000\040\000S\000e\000n\000s\000o\000r\000s)
+endobj
+12 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+15 0 obj
+(\376\377\000T\000h\000e\000\040\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000a\000l\000\040\000F\000u\000s\000i\000o\000n\000\040\000L\000i\000b\000r\000a\000r\000y\000\040\000B\000S\000E\000C)
+endobj
+16 0 obj
+<< /S /GoTo /D (subsection.1.2.1) >>
+endobj
+19 0 obj
+(\376\377\000B\000S\000E\000C\000\040\000L\000i\000b\000r\000a\000r\000y\000\040\000S\000o\000l\000u\000t\000i\000o\000n\000s)
+endobj
+20 0 obj
+<< /S /GoTo /D (subsection.1.2.2) >>
+endobj
+23 0 obj
+(\376\377\000B\000S\000E\000C\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000S\000e\000t\000t\000i\000n\000g\000s)
+endobj
+24 0 obj
+<< /S /GoTo /D (subsection.1.2.3) >>
+endobj
+27 0 obj
+(\376\377\000K\000e\000y\000\040\000F\000e\000a\000t\000u\000r\000e\000s)
+endobj
+28 0 obj
+<< /S /GoTo /D (subsection.1.2.4) >>
+endobj
+31 0 obj
+(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000V\000i\000r\000t\000u\000a\000l\000\040\000S\000e\000n\000s\000o\000r\000\040\000O\000u\000t\000p\000u\000t\000\040\000S\000i\000g\000n\000a\000l\000s)
+endobj
+32 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+35 0 obj
+(\376\377\000R\000e\000q\000u\000i\000r\000e\000m\000e\000n\000t\000s\000\040\000f\000o\000r\000\040\000I\000n\000t\000e\000g\000r\000a\000t\000i\000o\000n)
+endobj
+36 0 obj
+<< /S /GoTo /D (subsection.1.3.1) >>
+endobj
+39 0 obj
+(\376\377\000H\000a\000r\000d\000w\000a\000r\000e)
+endobj
+40 0 obj
+<< /S /GoTo /D (subsection.1.3.2) >>
+endobj
+43 0 obj
+(\376\377\000S\000o\000f\000t\000w\000a\000r\000e\000\040\000F\000r\000a\000m\000e\000w\000o\000r\000k)
+endobj
+44 0 obj
+<< /S /GoTo /D (subsection.1.3.3) >>
+endobj
+47 0 obj
+(\376\377\000P\000h\000y\000s\000i\000c\000a\000l\000\040\000I\000n\000p\000u\000t\000\040\000S\000e\000n\000s\000o\000r\000\040\000S\000i\000g\000n\000a\000l\000s)
+endobj
+48 0 obj
+<< /S /GoTo /D (subsection.1.3.4) >>
+endobj
+51 0 obj
+(\376\377\000B\000u\000i\000l\000d\000\040\000t\000h\000e\000\040\000S\000o\000l\000u\000t\000i\000o\000n)
+endobj
+52 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+55 0 obj
+(\376\377\000B\000S\000E\000C\000\040\000S\000t\000e\000p\000-\000b\000y\000-\000s\000t\000e\000p\000\040\000E\000x\000a\000m\000p\000l\000e)
+endobj
+56 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+59 0 obj
+(\376\377\000P\000r\000e\000r\000e\000q\000u\000i\000s\000i\000t\000e\000s)
+endobj
+60 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+63 0 obj
+(\376\377\000S\000e\000t\000t\000i\000n\000g\000\040\000E\000v\000e\000r\000y\000t\000h\000i\000n\000g\000\040\000U\000p)
+endobj
+64 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+67 0 obj
+(\376\377\000T\000h\000e\000\040\000E\000x\000a\000m\000p\000l\000e\000\040\000C\000o\000d\000e)
+endobj
+68 0 obj
+<< /S /GoTo /D (section.2.4) >>
+endobj
+71 0 obj
+(\376\377\000H\000e\000l\000l\000o\000\040\000`\000\250\000I\000n\000d\000o\000o\000r\000-\000A\000i\000r\000-\000Q\000u\000a\000l\000i\000t\000y\000`\000\250)
+endobj
+72 0 obj
+<< /S /GoTo /D (section.2.5) >>
+endobj
+75 0 obj
+(\376\377\000R\000e\000d\000u\000c\000i\000n\000g\000\040\000p\000o\000w\000e\000r\000\040\000c\000o\000n\000s\000u\000m\000p\000t\000i\000o\000n)
+endobj
+76 0 obj
+<< /S /GoTo /D (section.2.6) >>
+endobj
+79 0 obj
+(\376\377\000T\000r\000i\000g\000g\000e\000r\000\040\000U\000L\000P\000\040\000p\000l\000u\000s)
+endobj
+80 0 obj
+<< /S /GoTo /D (section.2.7) >>
+endobj
+83 0 obj
+(\376\377\000T\000e\000m\000p\000e\000r\000a\000t\000u\000r\000e\000\040\000o\000f\000f\000s\000e\000t\000s\000\040\000d\000u\000e\000\040\000t\000o\000\040\000h\000e\000a\000t\000\040\000s\000o\000u\000r\000c\000e\000s\000\040\000o\000n\000\040\000t\000h\000e\000\040\000b\000o\000a\000r\000d)
+endobj
+84 0 obj
+<< /S /GoTo /D (section.2.8) >>
+endobj
+87 0 obj
+(\376\377\000S\000i\000m\000u\000l\000a\000t\000e\000\040\000m\000u\000l\000t\000i\000p\000l\000e\000\040\000s\000e\000n\000s\000o\000r\000s\000\040\000u\000s\000i\000n\000g\000\040\000s\000i\000n\000g\000l\000e\000\040\000B\000S\000E\000C\000\040\000i\000n\000s\000t\000a\000n\000c\000e)
+endobj
+88 0 obj
+<< /S /GoTo /D (section.2.9) >>
+endobj
+91 0 obj
+(\376\377\000Q\000u\000i\000c\000k\000\040\000U\000l\000t\000r\000a\000-\000l\000o\000w\000\040\000P\000o\000w\000e\000r\000\040\000m\000o\000d\000e\000\040\000\050\000q\000-\000U\000L\000P\000\051)
+endobj
+92 0 obj
+<< /S /GoTo /D (section.2.10) >>
+endobj
+95 0 obj
+(\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n)
+endobj
+96 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+99 0 obj
+(\376\377\000F\000A\000Q)
+endobj
+100 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+103 0 obj
+(\376\377\000N\000o\000\040\000O\000u\000t\000p\000u\000t\000\040\000F\000r\000o\000m\000\040\000b\000s\000e\000c\000\137\000d\000o\000\137\000s\000t\000e\000p\000s\000\050\000\051)
+endobj
+104 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+107 0 obj
+(\376\377\000I\000A\000Q\000\040\000o\000u\000t\000p\000u\000t\000\040\000d\000o\000e\000s\000\040\000n\000o\000t\000\040\000c\000h\000a\000n\000g\000e\000\040\000o\000r\000\040\000a\000c\000c\000u\000r\000a\000c\000y\000\040\000r\000e\000m\000a\000i\000n\000s\000\040\0000)
+endobj
+108 0 obj
+<< /S /GoTo /D (section.3.3) >>
+endobj
+111 0 obj
+(\376\377\000E\000r\000r\000o\000r\000\040\000C\000o\000d\000e\000s\000\040\000a\000n\000d\000\040\000C\000o\000r\000r\000e\000c\000t\000i\000v\000e\000\040\000M\000e\000a\000s\000u\000r\000e\000s)
+endobj
+112 0 obj
+<< /S /GoTo /D (subsection.3.3.1) >>
+endobj
+115 0 obj
+(\376\377\000E\000r\000r\000o\000r\000s\000\040\000R\000e\000t\000u\000r\000n\000e\000d\000\040\000b\000y\000\040\000b\000s\000e\000c\000\137\000d\000o\000\137\000s\000t\000e\000p\000s\000\050\000\051)
+endobj
+116 0 obj
+<< /S /GoTo /D (subsection.3.3.2) >>
+endobj
+119 0 obj
+(\376\377\000E\000r\000r\000o\000r\000s\000\040\000R\000e\000t\000u\000r\000n\000e\000d\000\040\000b\000y\000\040\000b\000s\000e\000c\000\137\000u\000p\000d\000a\000t\000e\000\137\000s\000u\000b\000s\000c\000r\000i\000p\000t\000i\000o\000n\000\050\000\051)
+endobj
+120 0 obj
+<< /S /GoTo /D (subsection.3.3.3) >>
+endobj
+123 0 obj
+(\376\377\000E\000r\000r\000o\000r\000s\000\040\000R\000e\000t\000u\000r\000n\000e\000d\000\040\000b\000y\000\040\000b\000s\000e\000c\000\137\000s\000e\000t\000\137\000c\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\050\000\051\000\040\000/\000\040\000b\000s\000e\000c\000\137\000s\000e\000t\000\137\000s\000t\000a\000t\000e\000\050\000\051)
+endobj
+124 0 obj
+<< /S /GoTo /D (subsection.3.3.4) >>
+endobj
+127 0 obj
+(\376\377\000E\000r\000r\000o\000r\000s\000\040\000R\000e\000t\000u\000r\000n\000e\000d\000\040\000b\000y\000\040\000b\000s\000e\000c\000\137\000s\000e\000n\000s\000o\000r\000\137\000c\000o\000n\000t\000r\000o\000l\000\050\000\051)
+endobj
+128 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+131 0 obj
+(\376\377\000M\000o\000d\000u\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+132 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+135 0 obj
+(\376\377\000B\000S\000E\000C\000\040\000C\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e)
+endobj
+136 0 obj
+<< /S /GoTo /D (subsection.4.1.1) >>
+endobj
+139 0 obj
+(\376\377\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000U\000s\000a\000g\000e)
+endobj
+140 0 obj
+<< /S /GoTo /D (subsection.4.1.2) >>
+endobj
+143 0 obj
+(\376\377\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000s)
+endobj
+144 0 obj
+<< /S /GoTo /D (subsection.4.1.3) >>
+endobj
+147 0 obj
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000s)
+endobj
+148 0 obj
+<< /S /GoTo /D (subsection.4.1.4) >>
+endobj
+151 0 obj
+(\376\377\000D\000e\000f\000i\000n\000e\000s)
+endobj
+152 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+155 0 obj
+(\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+156 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+159 0 obj
+(\376\377\000b\000s\000e\000c\000\137\000b\000m\000e\000\137\000s\000e\000t\000t\000i\000n\000g\000s\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+160 0 obj
+<< /S /GoTo /D (subsection.5.1.1) >>
+endobj
+163 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+164 0 obj
+<< /S /GoTo /D (subsection.5.1.2) >>
+endobj
+167 0 obj
+(\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+168 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+171 0 obj
+(\376\377\000b\000s\000e\000c\000\137\000i\000n\000p\000u\000t\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+172 0 obj
+<< /S /GoTo /D (subsection.5.2.1) >>
+endobj
+175 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+176 0 obj
+<< /S /GoTo /D (subsection.5.2.2) >>
+endobj
+179 0 obj
+(\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+180 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+183 0 obj
+(\376\377\000b\000s\000e\000c\000\137\000o\000u\000t\000p\000u\000t\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+184 0 obj
+<< /S /GoTo /D (subsection.5.3.1) >>
+endobj
+187 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+188 0 obj
+<< /S /GoTo /D (subsection.5.3.2) >>
+endobj
+191 0 obj
+(\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+192 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+195 0 obj
+(\376\377\000b\000s\000e\000c\000\137\000s\000e\000n\000s\000o\000r\000\137\000c\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+196 0 obj
+<< /S /GoTo /D (subsection.5.4.1) >>
+endobj
+199 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+200 0 obj
+<< /S /GoTo /D (subsection.5.4.2) >>
+endobj
+203 0 obj
+(\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+204 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+207 0 obj
+(\376\377\000b\000s\000e\000c\000\137\000v\000e\000r\000s\000i\000o\000n\000\137\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+endobj
+208 0 obj
+<< /S /GoTo /D (subsection.5.5.1) >>
+endobj
+211 0 obj
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+endobj
+212 0 obj
+<< /S /GoTo /D (subsection.5.5.2) >>
+endobj
+215 0 obj
+(\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+endobj
+216 0 obj
+<< /S /GoTo /D [217 0 R /Fit] >>
+endobj
+224 0 obj
+<<
+/Length 1012      
+/Filter /FlateDecode
+>>
+stream
+xڭUK��6��W�h%ͧD�'�m�h�z�䠕h[�-9��������M;V�.?8�8�M0��G�E���W�0E�(b��J��D�E�
z2�����XjBc��-�c�iF���W�ڍ�-G��џ�'H�_�+0�M��ľB�'�2��ee��ջ�Gm!1��
#iI��瑮�!EL��P�Q�{X�;`\���@�"!��;�:"�
+��b�������*�u)F"-����2D��[��8�D�U��zj���U��v�(�)�81W�?��Dpu+4�z��=�+� �BH㪙-F�_�D���B�%��Z�J�b�z(���&/�	�����N�,>��
+�!<8r��㬬ӵw����%���+��,��h���z��׍���g��l~�V���u�8��
pr�L�/��ӝE��]�JYO"�#{U z~E�z�^�,c?�����ӥeυ���E�-�1t�W��bbb��H��W�������iK��_kek[=�l�������>i���O۴�M��t���6/y�.��AQ6yjOC���q�3�o�l�f��T��|1Qj�g��"Mq@iܲ���R���H7��q�����p�����2�}g襵ܺW�6h�.�Ƌ�gib"a'�ό[8��syju�a�F��!X��$��FC�74����hP9w�BP�Ph8��bD
�����S4�gZ|�/gޛ���1�����4�ڕF�:�mm�fb�3�P��u�����?T��"�KH���ܶ�MgҲ)mI^���{��jŀ�Z�/�H�G1�K���ӗ��t<�E]V�M�����7hqcZr�	����n6^[�uS{}?p~q�h�l�W��*ˋ��I�o^��zW�ɦuPc��nS�M;'����2ۧ��hl���P��h��i�$���b�C�;y��Ӭ�߰�n~�% l��#����BR.�dKv�M~2Y�e��̋l����U8��Vͷn��ؐ��/k��:
+endstream
+endobj
+217 0 obj
+<<
+/Type /Page
+/Contents 224 0 R
+/Resources 223 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+/Group 226 0 R
+>>
+endobj
+220 0 obj
+<<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./Bosch-SupergraphicUp-Gray-Medium-top.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 231 0 R
+/BBox [0 0 504.566101 1275.590576]
+/Group 226 0 R
+/Resources <<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>/XObject <<
+/x5 232 0 R
+/x6 233 0 R
+/x7 234 0 R
+/x8 235 0 R
+/x9 236 0 R
+/x10 237 0 R
+/x11 238 0 R
+/x12 239 0 R
+/x13 240 0 R
+/x14 241 0 R
+/x15 242 0 R
+/x16 243 0 R
+/x17 244 0 R
+/x18 245 0 R
+/x19 246 0 R
+/x20 247 0 R
+/x21 248 0 R
+/x22 249 0 R
+>>>>
+/Length 1151
+/Filter /FlateDecode
+>>
+stream
+x��WK�7�����EI$��/�U����f&�K69~��UK�<�L뵨b���|���EO�b`N�c	,�?������?ݧ#�������VR���{�������_��0!R�-p#�8#Z�{��j)pU�:δY�?�'�T٧ZC[w=�MTr���늉#[��c����1q��:EKP-&
+L=�-����y��(�e�e.%�DJ���k�fFih�V�{��(�K�t�T����{]��E9��ޖ�/�=ܭ��R��G̅;�3_�e52&�Q���֫��M��9�KD���*%)v'��2l��rʶ�B�����X�� Q�3�jH�?|R�n2���&�A���2�!��V x�6�7.�|�� ��p>e��y;h�D5��t���p4�m�ȣ�	��RCQ��%��BnˎD���B����¦̌���!"�@��Vu�!Y�5e�5�
���}�@�-|���.,�)� �:�ɐ~�0�%�J�01p8.��X����V�6�L%�r�lT�#�Ώ�:�W1u:���hL:�����?+�T	��nP%����[�(�kR�2^��$'tA��ْ��aئ�E��Ϧ?(�Z|��R������Vd��U3=�q�Z�+�(�E�;�"�e{N�us�'o�t�ZPu�z�!�������l��ʝ�'�o��
a�o�6	rP��uݱH	T�����4B9Zw�@�AW��$o��sޥ޺�4�_m"�,q�u�L�5X����m�݁xJiJ�gb
6e��=m�n��e��.]«�����5�e��l�͓n7�����f�z�����K�'a��
+�hA4���*n ,y���m�����f<C{���3R�
%��P�"V匢�����`��lA�0w�ןc7p{�8���Pn�G��RP��.�v]b���y�Nc�ͨv�@�'�l��@���i�N�nt?��>L�5+�_n�v�o��ۼ�u��kRߨ�I����.�Q��3,o��J%�M��0�-��x���vb���`@�k�M��"ū�N�)�S7��a��d��I��f��c;]�₪�=�����-�ɮ�O�nEp�`nK���R�����.�u�e?m�Ŀ�ڌ�;��8��n�?��9�p���u2����C���[G,
+endstream
+endobj
+231 0 obj
+<<
+/Creator (cairo 1.15.2 \(http://cairographics.org\))
+/Producer (cairo 1.15.2 \(http://cairographics.org\))
+>>
+endobj
+232 0 obj
+<<
+/Length 250 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 251 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ02Sp��
+B�}�s
+endstream
+endobj
+233 0 obj
+<<
+/Length 252 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 253 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ0�Tp��
+B�}�v
+endstream
+endobj
+234 0 obj
+<<
+/Length 254 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 255 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ06Rp��
+B�}lp
+endstream
+endobj
+235 0 obj
+<<
+/Length 256 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 257 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ06Up��
+B�}�s
+endstream
+endobj
+236 0 obj
+<<
+/Length 258 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 259 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ0�Pp��
+B�}�v
+endstream
+endobj
+237 0 obj
+<<
+/Length 260 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 261 0 R
+>>
+stream
+x�+�
+T(�2P04�4г47V050�353S�����+�*�+�qr*�!�L���O4PH/VЯ01Tp��
+B�x
+endstream
+endobj
+238 0 obj
+<<
+/Length 262 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 263 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ01Qp��
+B�}�s
+endstream
+endobj
+239 0 obj
+<<
+/Length 264 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 265 0 R
+>>
+stream
+x�+�
+T(�2P04�4г47V050�353S�����+�*�+�qr*�!�L���O4PH/VЯ��q��
+B�A~
+endstream
+endobj
+240 0 obj
+<<
+/Length 266 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 267 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ05Pp��
+B�}np
+endstream
+endobj
+241 0 obj
+<<
+/Length 268 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 269 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ05Vp��
+B�}�s
+endstream
+endobj
+242 0 obj
+<<
+/Length 270 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 271 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ05Sp��
+B�}�v
+endstream
+endobj
+243 0 obj
+<<
+/Length 272 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 273 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ0�Tp��
+B�}�y
+endstream
+endobj
+244 0 obj
+<<
+/Length 274 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 275 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ03Rp��
+B�}�s
+endstream
+endobj
+245 0 obj
+<<
+/Length 276 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 277 0 R
+>>
+stream
+x�+�
+T(�2P04�4г47V050�353S�����+�*�+�qr*�!�L���O4PH/VЯ03Up��
+B�C~
+endstream
+endobj
+246 0 obj
+<<
+/Length 278 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 279 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ0�Pp��
+B�}�y
+endstream
+endobj
+247 0 obj
+<<
+/Length 280 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 281 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ07Tp��
+B�}�s
+endstream
+endobj
+248 0 obj
+<<
+/Length 282 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 283 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ07Qp��
+B�}�v
+endstream
+endobj
+249 0 obj
+<<
+/Length 284 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 285 0 R
+>>
+stream
+x�+�
+T(�2P04�4г43T050�353S����*�*�+�qr*�!�L���O4PH/VЯ07Wp��
+B�}�y
+endstream
+endobj
+250 0 obj
+75
+endobj
+251 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x26 286 0 R
+>>
+>>
+endobj
+252 0 obj
+75
+endobj
+253 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x29 287 0 R
+>>
+>>
+endobj
+254 0 obj
+75
+endobj
+255 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x32 288 0 R
+>>
+>>
+endobj
+256 0 obj
+75
+endobj
+257 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x35 289 0 R
+>>
+>>
+endobj
+258 0 obj
+75
+endobj
+259 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x38 290 0 R
+>>
+>>
+endobj
+260 0 obj
+75
+endobj
+261 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x41 291 0 R
+>>
+>>
+endobj
+262 0 obj
+75
+endobj
+263 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x44 292 0 R
+>>
+>>
+endobj
+264 0 obj
+74
+endobj
+265 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x47 293 0 R
+>>
+>>
+endobj
+266 0 obj
+75
+endobj
+267 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x50 294 0 R
+>>
+>>
+endobj
+268 0 obj
+75
+endobj
+269 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x53 295 0 R
+>>
+>>
+endobj
+270 0 obj
+75
+endobj
+271 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x56 296 0 R
+>>
+>>
+endobj
+272 0 obj
+75
+endobj
+273 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x59 297 0 R
+>>
+>>
+endobj
+274 0 obj
+75
+endobj
+275 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x62 298 0 R
+>>
+>>
+endobj
+276 0 obj
+75
+endobj
+277 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x65 299 0 R
+>>
+>>
+endobj
+278 0 obj
+75
+endobj
+279 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x68 300 0 R
+>>
+>>
+endobj
+280 0 obj
+75
+endobj
+281 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x71 301 0 R
+>>
+>>
+endobj
+282 0 obj
+75
+endobj
+283 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x74 302 0 R
+>>
+>>
+endobj
+284 0 obj
+75
+endobj
+285 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/XObject <<
+/x77 303 0 R
+>>
+>>
+endobj
+286 0 obj
+<<
+/Length 304 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 305 0 R
+>>
+stream
+x�M�1
+�@D�>��gׄ5ǰ�mt��X�o>�S*iH)�Q:8M��y���Z0�Ⓢ�_"{��wd�j�y�v"֊�n=Q7�n4�
+endstream
+endobj
+287 0 obj
+<<
+/Length 306 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 307 0 R
+>>
+stream
+x�U�1
+�@D�^��X[����R���g�Yܙ�|�)�LTұ,I�0���tA���'� ��e��M}�d�Yw��]�����}�����
+endstream
+endobj
+288 0 obj
+<<
+/Length 308 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 309 0 R
+>>
+stream
+x�M�11{�b?߆�q�*j�׀t���i���j9�PIC�I�hp�z���[���
)��m\rw�n�y��`�eI��0���:o���kb��蘻\W~:#>
+endstream
+endobj
+289 0 obj
+<<
+/Length 310 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 311 0 R
+>>
+stream
+x�U�1
+�@D�^��X�j���R���g�6��o>�C&*�0KjFE�kL74��x�'����yf<�(�h�L�u�i���2��u`[O�M��b�`
+endstream
+endobj
+290 0 obj
+<<
+/Length 312 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 313 0 R
+>>
+stream
+x�U�1�@D�ާ�ę��`|*j�i@
+{��������B'��r@Wb��"�y����gF����<Ȃ�\������X�Vs���}1�
+endstream
+endobj
+291 0 obj
+<<
+/Length 314 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 92 505 193]
+/Resources 315 0 R
+>>
+stream
+x�M�1�@{^�/ �w��<�M�8E��K�
+�FB�`��a�;��S<��M��H���M� �E��^���¡=���iE]�*������Z&s�c|����
+xѓ��%<
+endstream
+endobj
+292 0 obj
+<<
+/Length 316 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 317 0 R
+>>
+stream
+x�U�1�@{�b?g������B�)��%Nth��s�)�t���!������xg��fEU�s¶�捶�y�6n��d�ρu���/|�
+endstream
+endobj
+293 0 obj
+<<
+/Length 318 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 289]
+/Resources 319 0 R
+>>
+stream
+x�}�K� D�9�O��>F��M�Im�/��G>j��o���KP�.b��'�I
�=���#0A�#��#���	}���ɧcM�jP�ƶ;TTP�ǂ�ءV�R��Źg��7�RDMiw܎�-
�$�Z�Fli��T�i�]2'�����my�1��4�Vl��;� 4#�ގ�g>dKJ����7av�w_W-e�
+endstream
+endobj
+294 0 obj
+<<
+/Length 320 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 321 0 R
+>>
+stream
+x�M�1�0{�b?��6�<��!
H\�/]Du�j��GI̤A�2������wǂ[�>y��I�����(�ȓU+��a%����ʂv�����
+
+endstream
+endobj
+295 0 obj
+<<
+/Length 322 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 323 0 R
+>>
+stream
+x�]�A
+A����d;��l��'�"�^��?(^�KQ�ю�)�C�(�A�H�oO�n8�ٺ�
+S�N�0q����H��(]e��%���\���2we`�m��H�0
+endstream
+endobj
+296 0 obj
+<<
+/Length 324 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 325 0 R
+>>
+stream
+x�M�1�@{�b?p����gPQ#�HR��K �h���!�4S3½L+ݨ=���3�y���4�U�UU"��j��9\�6��[�&�+q�r3<'���
�].?�9#.
+endstream
+endobj
+297 0 obj
+<<
+/Length 326 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 327 0 R
+>>
+stream
+x�M�1
+�0�{�~@�}gY�H�:718�?Dvev�=��L:��\˄��(HW/��xb���Q�v�}�R!��SyQ�Qxmx���m��6{t��
+endstream
+endobj
+298 0 obj
+<<
+/Length 328 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 329 0 R
+>>
+stream
+x�M�A
+�0�z�~��ʑ*�9�\Bi.-��?��T�3���RXI�jg���i��n��w|��7�����@��ZCF�l���߲<���2�1�&?���
+endstream
+endobj
+299 0 obj
+<<
+/Length 330 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 589 505 620]
+/Resources 331 0 R
+>>
+stream
+x�Mɻ�@�ќ*����s�a	&�h��?�8f;oO`�K�ݚ���׆�¸��轨�<���#>�Q]I�cH[¿��]�R
+endstream
+endobj
+300 0 obj
+<<
+/Length 332 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 333 0 R
+>>
+stream
+x�M�1�@{�b?p�>���*j�Ph������f5+�Aa�j
+g�p1�@��[�aƗ���Z33��Zf{��]���!
+��Z5���c��YG�i:���
+endstream
+endobj
+301 0 obj
+<<
+/Length 334 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 335 0 R
+>>
+stream
+x�M�A
+�0�~�~��Z���=�\JH.-��?���2s��T
+�h-)�N����=��pǻTO�ј�f*:43�z:C��������*˃�'�y4Ụ�~|I�.
+endstream
+endobj
+302 0 obj
+<<
+/Length 336 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 337 0 R
+>>
+stream
+x�M�;1C�9�/������1��BlҒ�K���Yz��L͈��4zA5j�HP��y���$���1ࡍ�rZ��e(;�����B�_��ωm��+�.��/"t
+endstream
+endobj
+303 0 obj
+<<
+/Length 338 0 R
+/Filter /FlateDecode
+/Type /XObject
+/Subtype /Form
+/BBox [ 0 0 505 1191]
+/Resources 339 0 R
+>>
+stream
+x�]�1
+�@{�b?`Y:���g�J�����?ĸ
+a�ev9d25�p�)[ �j6L���p�xb���,d���e����f�y�%���p,�_���<6/c���QZQ
+endstream
+endobj
+304 0 obj
+92
+endobj
+305 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh80 340 0 R
+>>
+>>
+endobj
+306 0 obj
+99
+endobj
+307 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh83 341 0 R
+>>
+>>
+endobj
+308 0 obj
+105
+endobj
+309 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh86 342 0 R
+>>
+>>
+endobj
+310 0 obj
+98
+endobj
+311 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh89 343 0 R
+>>
+>>
+endobj
+312 0 obj
+98
+endobj
+313 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh92 344 0 R
+>>
+>>
+endobj
+314 0 obj
+115
+endobj
+315 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+>>
+endobj
+316 0 obj
+99
+endobj
+317 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh97 345 0 R
+>>
+>>
+endobj
+318 0 obj
+194
+endobj
+319 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+>>
+endobj
+320 0 obj
+99
+endobj
+321 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh102 346 0 R
+>>
+>>
+endobj
+322 0 obj
+104
+endobj
+323 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh105 347 0 R
+>>
+>>
+endobj
+324 0 obj
+104
+endobj
+325 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh108 348 0 R
+>>
+>>
+endobj
+326 0 obj
+99
+endobj
+327 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh111 349 0 R
+>>
+>>
+endobj
+328 0 obj
+99
+endobj
+329 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh114 350 0 R
+>>
+>>
+endobj
+330 0 obj
+84
+endobj
+331 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+>>
+endobj
+332 0 obj
+105
+endobj
+333 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh119 351 0 R
+>>
+>>
+endobj
+334 0 obj
+106
+endobj
+335 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh122 352 0 R
+>>
+>>
+endobj
+336 0 obj
+105
+endobj
+337 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh125 353 0 R
+>>
+>>
+endobj
+338 0 obj
+103
+endobj
+339 0 obj
+<<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>
+/Shading <<
+/sh128 354 0 R
+>>
+>>
+endobj
+340 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 355 0 R
+>>
+endobj
+341 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 356 0 R
+>>
+endobj
+342 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 357 0 R
+>>
+endobj
+343 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 358 0 R
+>>
+endobj
+344 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 359 0 R
+>>
+endobj
+345 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 360 0 R
+>>
+endobj
+346 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 361 0 R
+>>
+endobj
+347 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 362 0 R
+>>
+endobj
+348 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 363 0 R
+>>
+endobj
+349 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 364 0 R
+>>
+endobj
+350 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 365 0 R
+>>
+endobj
+351 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 363 0 R
+>>
+endobj
+352 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 366 0 R
+>>
+endobj
+353 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 367 0 R
+>>
+endobj
+354 0 obj
+<<
+/ShadingType 2
+/ColorSpace /DeviceRGB
+/Coords [ 0 0 1 0]
+/Domain [ 0 1]
+/Extend [ true true]
+/Function 368 0 R
+>>
+endobj
+355 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 369 0 R 370 0 R 370 0 R]
+/Bounds [ 0.998902 0.999891]
+/Encode [ 0 1 0 1 0 1]
+>>
+endobj
+356 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 371 0 R 372 0 R 365 0 R 373 0 R]
+/Bounds [ 0.42145 0.471603 0.943808]
+/Encode [ 0 1 0 1 0 1 0 1]
+>>
+endobj
+357 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 374 0 R 375 0 R 376 0 R]
+/Bounds [ 0.428836 0.829244]
+/Encode [ 0 1 0 1 0 1]
+>>
+endobj
+358 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 377 0 R 378 0 R]
+/Bounds [ 0.219969]
+/Encode [ 0 1 0 1]
+>>
+endobj
+359 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 379 0 R 370 0 R]
+/Bounds [ 0.445434]
+/Encode [ 0 1 0 1]
+>>
+endobj
+360 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 371 0 R 372 0 R 365 0 R 373 0 R]
+/Bounds [ 0.42145 0.471603 0.943808]
+/Encode [ 0 1 0 1 0 1 0 1]
+>>
+endobj
+361 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 380 0 R 373 0 R]
+/Bounds [ 0.557724]
+/Encode [ 0 1 0 1]
+>>
+endobj
+362 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 372 0 R 365 0 R]
+/Bounds [ 0.16318]
+/Encode [ 0 1 0 1]
+>>
+endobj
+363 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.905882 0.909804 0.909804]
+/C1 [ 0.862745 0.866667 0.870588]
+/N 1
+>>
+endobj
+364 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 380 0 R 373 0 R]
+/Bounds [ 0.900901]
+/Encode [ 0 1 0 1]
+>>
+endobj
+365 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.905882 0.909804 0.909804]
+/C1 [ 0.819608 0.827451 0.831373]
+/N 1
+>>
+endobj
+366 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 380 0 R 373 0 R]
+/Bounds [ 0.900901]
+/Encode [ 0 1 0 1]
+>>
+endobj
+367 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 381 0 R 382 0 R]
+/Bounds [ 0.900901]
+/Encode [ 0 1 0 1]
+>>
+endobj
+368 0 obj
+<<
+/FunctionType 3
+/Domain [ 0 1]
+/Functions [ 369 0 R 370 0 R]
+/Bounds [ 0.621891]
+/Encode [ 0 1 0 1]
+>>
+endobj
+369 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.776471 0.784314 0.792157]
+/C1 [ 0.945098 0.945098 0.94902]
+/N 1
+>>
+endobj
+370 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.945098 0.945098 0.94902]
+/C1 [ 0.945098 0.945098 0.94902]
+/N 1
+>>
+endobj
+371 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.945098 0.945098 0.94902]
+/C1 [ 0.905882 0.909804 0.909804]
+/N 1
+>>
+endobj
+372 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.905882 0.909804 0.909804]
+/C1 [ 0.905882 0.909804 0.909804]
+/N 1
+>>
+endobj
+373 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.819608 0.827451 0.831373]
+/C1 [ 0.819608 0.827451 0.831373]
+/N 1
+>>
+endobj
+374 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.921569 0.92549 0.92549]
+/C1 [ 0.921569 0.92549 0.92549]
+/N 1
+>>
+endobj
+375 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.921569 0.92549 0.92549]
+/C1 [ 0.819608 0.827451 0.831373]
+/N 1
+>>
+endobj
+376 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.819608 0.827451 0.831373]
+/C1 [ 0.776471 0.784314 0.792157]
+/N 1
+>>
+endobj
+377 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.862745 0.866667 0.870588]
+/C1 [ 0.862745 0.866667 0.870588]
+/N 1
+>>
+endobj
+378 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.862745 0.866667 0.870588]
+/C1 [ 0.819608 0.827451 0.831373]
+/N 1
+>>
+endobj
+379 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.733333 0.741176 0.752941]
+/C1 [ 0.945098 0.945098 0.94902]
+/N 1
+>>
+endobj
+380 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.945098 0.945098 0.94902]
+/C1 [ 0.819608 0.827451 0.831373]
+/N 1
+>>
+endobj
+381 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.945098 0.945098 0.94902]
+/C1 [ 0.733333 0.741176 0.752941]
+/N 1
+>>
+endobj
+382 0 obj
+<<
+/FunctionType 2
+/Domain [ 0 1]
+/C0 [ 0.733333 0.741176 0.752941]
+/C1 [ 0.733333 0.741176 0.752941]
+/N 1
+>>
+endobj
+226 0 obj
+<<
+/Type /Group
+/S /Transparency
+/I true
+/CS /DeviceRGB
+>>
+endobj
+221 0 obj
+<<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (C:/branch/ku_algorithm_environment/20_Documents/20_Documentation/texmfbosch/tex/generic/images/bosch/CD2016Graphics/Bosch_4C_S.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 383 0 R
+/BBox [0 0 425.196 94.487]
+/Resources <<
+/ColorSpace <<
+/Cs6 384 0 R
+>>/ExtGState <<
+/GS1 385 0 R
+/GS2 386 0 R
+/GS3 387 0 R
+/GS4 388 0 R
+>>/ProcSet [ /PDF ]
+/Shading <<
+/Sh1 389 0 R
+>>>>
+/Length 43794     
+/Filter /FlateDecode
+>>
+stream
+xڴ�ˮ�ʒ8ϯ�����1�A�@�=4JI-	y�.P������I�9�IF�t�{{l����=�-�����^?>Χ����Oj��B��^o�kx������}�����V^?����XC���9���~���?��������/'���T?���Ͽ��_?���ç��J�K~��ܤė��&]x���I��#�OK҉>��WL������G�՛�U�i�>I������tr�����������>dy����%]��?M:&�G�������Y�	%mm�
+EF�����?>��R8��W��#wx��I�����~�22a|c���_��\�~��r�6ٷ�7���[{�����=D�q����r���TE�r���6���r�?�1
�c��h�&����5+u:n:ڣG�{W�o�>���M^W��{����[���<+��2s��V�&�;~��VdF�
�gw�́�;h����'T��K�H�c���^U��
+]�ƻ�O�Ճ)�ӫ�cz�ݻ�[�������Y�W��ˏw�n�t�6���������j�4��/c�a)�|b~�yƿ��ǒ��g��梭�?5������.=8Z"a����o��L
+tY^򣵌��!m-y�]�[���e��U����Vn��h�/����r�ĵ��h`(�7l,��cT���W���r�������3h��uk�cK����x�7�kGS�a�������z��û}0F~j�l͟?�D�֒��A�?���Ji{OK�	��')���z�]��:2y�YKg3��e-3�*���k
�q�QN~kr&��*�M���x�7���Dj��x��.����k��~L���}���l�Y����wu���2��:��"O7���6�CFFk��>ha��v�$\�>A�n,����h�y�L����<��&?����;����âȓA�2"2hAV�h��į��~)�-�Ɨ�"_����㎮T��>�3`4�j}�����o>i:�ۨnp��12o�#��1FS:5��hq%����/�c/[;D��������[�?��bF��?ʶl�G�����@ɏX�4��ʹ��0���0��k�W������/�R�}o�\zwD�D�ݧ�x���:&���wm����eL�1�cڏW0Z?�E��FN�(ߖNʹ��8X乂�ti��E���3*Bw�9'�֒U�8����i|�d�*�}��	�;%�:���������⍽4�Y �L�t�� ��h9ݷ��F�Y�Q҅UȤȸߓ�l��i0��t�Vړ�pc?�>j/��k4�E9���cj�wyU�����\
+=X����|�,
+�A��DN�*�S6��Yޣ�t���o��e�+6n��̉�3%��#.*3��wh�V�f�{P�����@�De��Ae+��1��~��1���J���p���G�]N��9�dV����[�ڧY�>��O#~�x����9���T�[�:G)�I�ko�W��!�kc��>}�x�Rݴe��ǯx3OYq����i�wɭ�껵;��Y��̲m��$g��WG==ű ��6�	���ήp�bW#(��mHO^Wlq�&/�	���|�	��]9��#�ll�R���i=6�*����]K�cC�u���P���t*�ݦC�m�{9���־����MC��hSI[Kﳟ�ڍ��.9C��d��y�_�Z^���55�Elڜ̶^�N����>ڛ���fn�Nm���z���ƕ���q��q���������7������0��H8,/�R�[5���礒������-���j��9��io{��?���PH�y43Ԭ��Č���}���1E��"�����@�u�~�*�P_�mP�%l�T���+o��;�M�	�az��@u�,�O�A�N'+\������3oȺ�w##�2X�I�D�����}&�7��R<6�цJޡ�M�!���XT���(�7�0�Et��m.�0}�����){{��2>8������	9Extyo�	0n?>��c���`z:X�aN�����az�X�2�@K�n�$���G���.����r|��(�����1G�b�@6jX;�|g���1��8�^���k{z��kyRY��FV��:<t`V�^7'f�9��n�fKro���0d>���������r7��E�@�}k�:ǷG�m_�|c|ޤg��
+O
�EGճ�Œ�����qo'�DQ_-��<�!��<un��?qx���F_�<y8�^��<p��0��3�y�?�\�S�OS�޵pǃ�t��7�3T�
+Ln�&N(��p��Mx��!�;"�����kA�Ӗ�J7Nz�1&U��&�G���B�
F<�=b����ٖq���Y=�p�BߔLv9�9}�,et�A�M]��� A�B'e@�zM(^�oHw��[i�?�cW�����\���PG<�Y`���qy&�
�A�-Ky9YA	���[�'�N�����N��tM&�P�#\�"c*�}}a.d4��@C���ʀA Vy��;y��I�u(m���~4UG�@/f�X&��l�D��`Ft�
+MM�Ҏ&;F����NulYr]�w�e��j��
<c���tX�K'�ۜ�h����i���/*�R��Gu�%��&��9��l���(��tc#�_�>�s��FU9'�s=���Y��֌�#r���Hw��&��%�/�����Ο�9�2�4m�:�lM�]�%Oֹ>dagm�Mm��!=�j4����M�q��T��/������_B!��D�:^�([���+s||����x��w4�L����h@��8"����;y�A}��WU�����n�O6�s;���x�/�ct�Ʀ�'�fl:9&�-�t�F[�H�t��&�������w?�}���ď�Sɾ즇�F��lM�h��1�E��z��5�q�ì���
�;������u^,�QXn�T3\9�?�@'��bT^�p��Gk^yF�v��]�Z�	A8��/2��0�>r�{�>��G���C]�ǭ�`��Dz��{{=�%w�@�ADf��CY�M|4���X�18�;�D����b�ȉ�:ڥ����`����p6h�H&���i�ɞz'��N��@�GD`l��q�S�
��9�]K���9F�J�uK��q�6�p�l�zO�h4��֢/4Ծ�o�>\�V�U1�d�u~�|�'o�
++f�̔���ڂ>Q��RT��xU����y�4u_�]|���aT(��ݚt4����Ii��z4g�lS_7,�_G�f�`�n~ͱ��D��G�J���菴��_8����X#
+�50�HC��)��q��PɁ4�[��j4\48�����-����8�G9o�����M����Ǔl��6pJ��6�A��<MW���L��;�Z5o���V�Ƌ%��#���_�#�Z�yZ\2���.�oR�y���l�(��
+�҅�t������r����̀��p�n�E6m�
+�����[o�%�Uwj����B��O�t�)�	Ɛ�w�X�O�����e�_��1��ZΪ�%95�D:]SU�zHC�k[�
�1{��z��i([�T�EWv�>��hְ9y��3����~�(��69#�!��c�q�f)gV�[c��v�|��P9��-;xͣ-�1�����厶�t|q�������M۷��?��212#�q}�PlM�bd�mm@_��ʗ��8�W���g��A�?��6��h����֧�ե�?��?���*%H��G��$����������4��/���+����?�G��?��-���m~Sj�fd��?:�]O[no��Ʊ�G���E�j��I�S�ф�x.��5�3�ME]p��e�_L���_C�����YtZH��%���(i���48���,��.SL�zV����ffaAN*��t�e�8:��^���L��g8X���di���V�h���B��$�F���,���vo�%6]g8�gY8�`_��C�
�/�|�3va1��qgy鯣Ww�����
+�
+C@QfJ8��vy+H��з��,ڮ��G�P���(�**�eM4��p��څ�1ݞqԠ.BM��u;Y�@^�rL߬�L?Z�L�h=3�o^��z0K�}���pzR������:d�k��@�,(r�:�����䭂Dq���em��j9��]�޻<�*,�N��-�w9va�ȉ���S��J������JG���C�¼J��Ф�e:{�t�L�kA�9�L��-��'{hJ��NK�����DOC��R�<:9��j�`�:�]:��h��M-w(���3�����o(bm���aU��t��2��K�"Kg���K(a�ü_ʮE�U�������kF>{�nǵ�^h�����sE'�H�7O�e�l%ot�uY�b3(c�ց�<�9ޚsgh����;�"��k��1�bw���խ��w��:�]�9Bt��iv�1!�
+c��ְz�Ha��s������Q�'8��W��6�)����u�%"2�-C7�HzE!+����*�@y���e�~��G6�W�Djv���2�Da��Si�8���ET�0���YQ���,�Z>��C4���/&���+P(�}#�3O�IƘ}�1�恱�ym]�;���sY�}q�I66ʊ�}=�V5'�䪜�����[5����f�A��Yz������YV����}#�k2�dH�™��1�f��l�N��	�
|}\�����fFS
_.F�3��8�9a�I�c��&�n"FF��;3
sxs�]���y3����O>��0-7�qqcD�'Y5�����5ys���?>��H��'M��ֳ14�EE�͙�Cc��E���]K�8����5t�3�=_L&��I�C{_��uG�/4��3B _Y��vr�dsm����t��o��ǹ���Q]��2-w����{��vNWs�f��'\폎n֨���Q9'�4p�aMo��w���	�Z�Fȵ�x�7�j�1"���X�V�*�4��B������ؐc�O���S����	Q$�
����j���*���狣�;
+n;����f=�ꇏ�w���D�|� �AY��sk����J��$
+�H��c۽TF�DV�����U���EV���.�9��xf@#�"��rg9�q�=��Et�P�IV���[{f@$^P��;"�
�<��X8PEEoY�⇜����ό��	m�@�Y��4�۰�3-Jd�3+/���C�������Yw<�Z\�D�n���g} t����&��;���!`f�����.���.�lX�D����ʂ��_�,����+Y@�0�&�G``����c�����D�N��o2@�β��Y��h��"��.R{e!04��4�X�h6�"/��
+�yC�w~����f�.
+f���9�O���I�	
+j&�u����ijiW#����y�)�����<D�l&�"%ʂ�E�\ǿ����q�1k�=�m��6yb�D�
�9�]wȢv���#XYM�w��2˂�F�e�b��"Y��i-�Ͳ�VEO�&�#���g�y�J7�X٭�G�p`�?ػE���y�b^5#f�,�_�m���I!n�$
+�meu����D��3�LT�}��ɳn?T�")�BY�����vY��l?����,Qo�Ń�B:�\<vQ�ԍѷEP&���a������z�V�^���$KL��h���;����kM�����qzW"+��>�FQ�b�2���J<�@����z:�S?D�������)0���^�ȼJ�����A�%HT���D�0��d�h�q���*�Y�,؀�����zv�gFk��5�ن�
+�j�,nYۿg{ "�g�j�`H=!Hmą��8�1sV������x�I��A-�pâ_ WM�0�.��3�h��B�>
�i���Lm��Ud��g�&DM�paBv�7坋��L�	G&l�C��P�0\�2�����1�Y�8�K��R/��.엎�d�)�(,��o��5_…��=A>�cE�)�o0�vQ*C��pautx���qռ��a�S�h5:…� ��f�BE|%��N�jH�d���&��@�W��-|�����j(��\$u�qF�lUxM�ը���RPy� =���LfC@,���{xJ;3�?9�{d��]�DeZr�y���O�[V$9`��cQ"*Iw�#���-$<�ň(D]�B�gQ�S|���%]�SS��,Jn���m@�r<�D#�M�zJ�����5oa��c�CUTr^�&����Z�e}��)�����ӎ��8����H��p�w��L��X�χ1BS��ũ�..��b�1�@9���^���߼���	'��ޟ%��b����%j�6�sb����-:�g
X��}�c���qd�(8��դ�`ds�\י-9>�[�9�ڞ�:���/��Q{�3әIm�rX6��*Q��t�Ť֘�8�#u�,�ƑIa�Đ�Kf��G��4b�kD7.0v_������aϼ�ٶ
+GV�S�*,�rbu�����t�N��m)��,�LW5���: ��ʁ�3�D���x:i)_���c&�|5
?+��M�����#�	=��A��j&A~�:�KǢ��lv2�tۀ]�l�����ج0�e®o�22ۢ1	�/��\ͽ�Y�D.��4���{m�:2(;G;������oM$�5_�xuq�kx��l�h���^�{�L�*���������{t1�w��ӆq*(�H�>����\h�;
+�&}?��@1#������y�&����nZL�>]�XrI&��I|��=�(��ٚ�<�ؘr\_�n�^�D�!���r
+�8�LBB��=پ���n�����4�S��Z�]���H�!�ӑ?�oȏ��,�<�GT��lqS D-/��HR�D�B��Xmw1MJ���4�/q?F����~�C.Kn
�h��;��Q�"�y
+����z97���rB�Rn��"(Vb���7E�=�
k{�w t13|��	�q����Dx�Y$�l�3����1�iP"�i��_-���؎s�j�6h��oyl9(C]Aި�,b}�l��́�Q�����u~��&��xE��tq9�{��q>.p�[��W�)(�a	�j���؛Τ:fٸlT!3��{ӑ�Ȅ�ji�3��7�^S]�
€x�	�]�HK"�(6�(S��c������e��H��M�@�6C����ȶGBz�Ά�:N�v����L�m�
+ה�<��i��~�nF*$E�_?^��-d��?�8�1)"C�V;Q� f����AO2d���2�ZFW�s��l�̮l���A��or��
�y#��6<5l��c�.����	G�A\����ɏz�%i(p�.V�1A�v8$�]�HפFb�O��ry�L
�OC��H��R�NЀy,�L�a!�{/(�A0�P��B�J>������CW��X�LT��@ܻ/��g|��@]������������"���f i�Ɔ;��sUH����M��=V*5��
���Ѹ)!%�-a�ʰh~Ӏ�J��[��]�>�i4�e�rX�A���޿Ai\y��*�|�ne�d�����Ĝ}����Yv��i���%���Qq�aܢCDT"����xB��CȖܔt�LB�0�I���M��KE)�ڔ�E24"�c�	XS29��wDZ�gճ���tV9gӔ�uJ!�	9=��3����K�6?Pjoa΀��L��9d�����e�x��/��ѯ	~�b~�'
+��l�6���>��1D�Rژ"��$�W'絛�����'��-��hT�c�}	L���O�S��Q�PAVF��c3 ���d�MG��l�N֗ʬ$��C$��;,�W�����c��m���������0@���[�|��&����=I��Kd��5��;�n���G8������L��ڠ]��g^��du�����O&�����I�9ʷ�F0��\1(��*����6��Uy�ˁ�������.���Z㇔���u��y���+����/�_`����~���ՓaT=�0w�l��Ҏ��\��F?,�$�����j�y��[�s�i��ǹFt�f���[)8!⪡�<:��*.>l��t#l`ɂ��,�<���VXboR]�@m�q�xz�r�<u	�B��S��m��pFР�O�!��9G�uR�b����A\����;!F�����:ŭ�:��@����iFڞ��Ŧ��C�hi펲�A"/p|q�v��=n:�9:d{K�"`|���1�,��/���+��SL�%�ul[�i��}Q�F�xVm�:� |�
+;��h�aq��ھi��Pa�ƹ�1al$O�0��0�4���Y����$�~홣�t�h��DJӔI[U�9����YYS��-%Ӥ�A\7���{B$ݢl���
ԛsj0���P4�֚����Hox,�)��è{&D�y������GB{� �5_]S���v�s����3�`��|{x�b&��;�+Nk�4y��t�D���Y@$��av�������$��&����ZP�m�!a�I��+�A lĦ*!t��>,�|Z6ė5�j%%��dfzn�q$�Q�Kb	�1��,���D^�vtO��=Rh��d.u���י�_��t�1�>MȢ��������&&9&�4�mܞ�f��Tx^��2��cr7o��e�˘4��^��t�ea`����t�Ψ7��l.�t��7�U�؝ L��ٛXc`>��3X�b↾)���?���b�~��<Az�����g�P�&R�y�H%FdM��W8I��(� H�f����n��e�S��gApg��՟�CB �(rj�} �\x�U�Dž�@M��ڞ�Z����If�k͘����E��/���؇�_�'#���0��#�	}�A�*Jd���Z�Oe�i�����n}�EIT�|X'���hi#<���w!E��P�
+�6�C��C����/��K�(�͘�!��k�M�)���b�A�%t���L"�|�����Ʌn���r���K]��a� �3�c�1n��#A?�.�D����Հl���PTo�r��s'ف�0;^��jw�e�������C -;ԏB&N��7�sE�XUI��+�2}���Qgc��~�G}����j�B�:H���b@Qa��Eu�x9,Wsz�`�B���Lq��>��J1ay����I2jn�����u*�.�DHP��Jsd\���(�/7E/�,����p��F꺞T���
+����5
+�4��k��2vZ
+��\�����e�Lb��y"��i�
+Z�n�~'���XOX��п~�'>Y�W�:y����X1����ևE� �
+�~[Z���V'�\]9^��ɿ�6��)V������dX�5m��@��
"h��4�Op[�H�S)*�	w��;�Ms����>�����f=!"���W��V��V%���	pm�Q�)�,�`�8�Q�MP� ���g�D���XQTr����Z��S��ط/T�����f�%���8Ƈ�=�j4��}*��I%�(��<�	�m'-��U���M��[�pBM�.�J���G#�#����tGOX��x�(*΄j7n|Tāo��lcIc�q�"E�sapΐ���6�?cjj��lL0�{KzN
+���b��&� ���
+�-A�ڍ/ss�����"���p�,<��*�U����lZuY�V�!����_��n\�e����@�����P�G%b�<j������0��Y/�(J�Z��X(��L�v�cd�ᵄj��)�d��c���PӉ����z�S>�="*x-�
���M�[dX$~��ҭ*��;�ڠyx���(-.E�b�R$�h�T�lA�Vb�6���GIbt�=���[E����Z��<?E
+��a*
�w6dA�>��
+��KV����;��t_��� �s�.��m��%)<�H�����N���؞E*B���p�>�'�����U}Q����e��Nu̟s�r�X�Y�O�dn_����'�i��I��CMV�� �x���0f�͛�d�9�Y&���dm_L(�Nx�[&
��,\���H~юŏ�?.�)���Q�
Y��L��[.luZ��n�(�������;pa�7���P�g�=�3��A���f�q:4�;�`;q���q-ĸ��D�0%�>^�*�M�Ā�m�mE�.���0��2`�pK�zIZ�!|��yZ�BT���E�s�&����…vv@�X��ղ�+����J�Y�0����J���`���$@I�`{�2����@e�6�yd�/� ЄĞ� GסHJ,f|-�s:�%G�~X(S-8p�:��N��z���`�Z�X�9\�PL��ȕG�/���&u�Y8YB%����5 Z�#ID[���ވ¦;�<���p �����%�R`��b��>|�
G�[
��
+w�h�Q$47�q�P�{��h4�8g��9�\�+���JR� 
)Fk�h�#�D+{�z�E73�8@�{��d1�,a+������4O.Y�837��zݫ%�2��!5[e��|z�����;&x��N���v����b�ͭ����|��\/)�;JH+��XR�@��Y�,w$��)=VK��r�F���ju�S��jI�4r��`����tw��T��Q����� �@�܇ZI�[���z��B�c��F�Rk�����^^J��`-}#���m�\1Y��B�[M�#���i:.Jϩ]urp�օ��/:՝{IDU���)XM��h��{I^1�VN��ܶ)8p�_{mc�:Xb�e�}���!������^��F������U��'�ǃ�C���k.�;���s�F�q�k*��̽�a��غ{��_e���ܽ���<Q�������)�#ܭ�r�HM~Xd��y��o���"zޟ��Z�wK��y����������4�������{i�u�`9rw���ܻ�t�-x��eB4@�V�?7�~�Z/'���$���Q���
+ �&�]EG������ya�@�� 6��Ά�h~2��yQ���l�D���@<���`q��Q�T�MK*<�"��|��e�0��Z�]���h�����ئjwaD��"�!ۄe�kiD��qĆm3��3ٷ̘Ҕ=
$vG�i���4�4�o�FuI�(�]a�$��6J��Dd�dOf?#�����ծ���v1l��q(�;��\���b�D�pK�0am�ٶ+#��q0Q�e
+	�'JΑуL$�t"�Y?�%��&�"8��ҩ���H�Z[v�h4������C?)$b��t��`fBiw����Y��X�~���/��ld�#�I^��h��G;v�D�#J4��:��x�&��]CṲ�_K��o��[��V߹I���>���w�<��/w�:�
+=��
++�H��x���3@ھ�*�X��g�;�G^�M��3��w&��[yq�GD�eclF#�W�j�
��iF1i,�,�Fd������\���N��%�tF��e%�$ kڑ��<��^e���^�s�9ر�sR�Y�H�w/��[�*���:�BXN���6{��A�t������\�U�D��Rn�(3��4�Pk'Y����H��hҕ��0g�=*b�?���o\n��U�ЕR?a�8)
dc��<'f`����<ٟ�́h(��g,�H
+��:Q:���`����@��Z֨��#�"2�)UOd�	��*M��r�%CB!�/X�,�|i�"��M�܏um����30t����v�y��C��Z�Ϭ�S��6�P�pt��ќ`{if(w����X���V�e���[���n�$�F��
�]9�ie/M
+�X/-��d�2~��Ɲe�6=�t��K�7P��]q%>w�~�u�kNv<����s�-k"�O�f&����ê�
+���3f&�X�3E�#�ņ�y��-��������:��<�.C�� �]X�Ŝ��<��y����,d�3L�_��9��c��l�y�>@\�9�a�z�F?!?�2�U�9<�m��4��w��)�)1<���+ڜ���9K�L����������
L�H��
8�lJL"���b��N#����M`��([��2�
�i8�KH��N=��E�>�x$��>��v �8Z�(%�[OA��l�ʯfM�[��Z�*^lً����?�Y@"h]ԗ�ڊ��wE�9��������2W����,�·�J�}�'<u�2N�l`x��^Uk��~3����,���P®��9��6t�3r�"�@ګ�J�ê��ݑV/^("�b-7��� "���0Xb��0J���`W����X���$��������8���z|ҙeFb����~e�N5C��ro�pP��	��IZ怾y�0����c�YCe4�ɿ�{��f�E'�Vk�t�����;K1RIqP?(��[#/o�sfi5Zj��d�*��B�AS@ڕ�1�������BW#��,�x������W<����NN�oQܥ�3�:U�>K�D�ptG1'�dD.���+��CT��{�2"cPSy�ۈ�6��J�� a.+t�'(��,��A)/-���g����hbd�Q-�q*����(��T\����N4H��\\�����.�(���b[��*5��=�6����"�2�fK(�s":(K�n�dmFf�N��ॣ#
�m7���k��8�4�~!�q:�C���J��ٜ�/��vs%]Ŭ�2����5���	'��
+07�־��W��r��0c]��E��u�A�cU|�{�B�P�9FY=Uٜ,�d�hsϣ��x�d1ch,$���*.6G���*"�*�/B�(��4�Ҭf�w�C}��EF%�NF\[sv�}����̎,ij(�q�6FW�3(�f�8G?eb,�
�U%	O�Fh*,�ȇ�4�`h���e�k�
?�/U����e����< D�I9i;�5I��Х�������Ҙc(3��Bh>mu�S���"�_�����-Z��63�����"=*;6��!3�[���0L���3���<��zu:������1]���13)�S��NCF��^J�xzj�pL��4,�P�n�fit7�n�͵&�z2O�	6Ps�߽b"���[�F�V�x)��u�lh-�}�w
��P�ӏ8��;S���Q��e��T��`G�= );aɣ%&��6�G&Z���]H�T�>��s��h�B��h3'l�����=��kk�^I�	��,7�3��( ���F4�o�ha嵍��<;���'�7l~[���+p�hL������[d�P	"��Y~f�Α����|�)�R�C�����֯�	�Бbd�2�k!�ٕ����|S�����M�Ce�=��݁��9=L��CXx�� Ǖb��\��"Ma��M�n+>@V��2�^�"{r���( +q��)ʅ�\��<G[�(x���	3�
+Y�P_�c��b��d.�i�o|�1щ.�z��p��C�R'`e�'yzifapBD�|\���N�]ä��'J Lլo#�t���r�DP��]��5�,����#�QЇ�Y�������;o��g�~�h3��A����i�KE�f���c�љ4�ޅ� 
+o�+������j�F�`i
+#Mn��:�
7! %���2�%��f@�?�����
Ło*�<elCXz�>Œ���JV>ɺs E��pž�r"��9#����~����_b$��4Qa�����ozv����U�%�D�����>������%AU�|٫��'�m:aw��u�D)p��y��^���
+�~�{�H�;LwVC�x)� ����a���������,��=�U�CX��}@�$v������=��BJ,7IY���s	dU����u�$A�^��~'��KI�ļ��|)�ֆ����0�ga�hX���j��r��:�&d���C�X��%��0[�5���z�Y����SB�$:�)��U}̲@}o|ߏ��A��:�*�J�d��'DF&�A�
6�D픝�T�eAY�֋��Ǚ��N�.
+d�,�Ԫ�C��M�)�%����V	1�����+�%�kfc�5��\�V$����`�"�����W>�aY ��H�>e��V@e��=�i�l����7ّ�w�|��[U�bȀ���V|z���Z:��s��d:�%[�w7
�O��B��^��,���?��s�"���+��tYy�1۾I4,�5���[HT5�Dv�R�G�f)��*'2�y�M��,��Ry�)B�mI�di��<W!����V�@g:Py�'B��]J�K�����	u�,d��ЂjG�d�
+ޅ�����X\�_P�|�ϓ� �3חg$��ܯ[�������C��E�܁2�Q���$Q�< E�����*6�Z���j_8�Q�|`nU�sa"l�"��S��;������-�Ӱ��[�����欎��H�U  H�uT��vL����"�rYϓ���)K���ot�H�W;Z?�}Ʒ�jx�1��2�{0%��}��#��[XFQ=[�f`|�����`�ho�����>{0e�c��^R�'��>���/K�_A�?FFZD\n�42@�uP�E%�n�h)_�/�kv�x��+ӕ��ir�:	��d�w��Y�iF{<)�})�-�k�ǥ�P��R�c�����:���s���T��f�����y0��σ��1��`�+ai�j|���
���U-��^[�2�Oȁ�e&c���{���i������^_=�A�>3(ɈF��8^;�0Ր��/�G���*����+�C���Y�-����q<"���ߏ�4"�E�����F�w6[[�N��v�;m���
�n}oc�I�����w)����k�n/b�����.�9����Z��*l�{����z��<�����,�_�>�by�I���L8�Mȳ*�.(o�13�y�T��.�!K����Q3'乼5LA�/������7�}�N�j�u��FdУ��V����z���>2ҩ�hZc�^��C��2�:|k�<莅�EU��x���čV���BJ
5u���s���\���}��f{G����$�O�0k������;̙����
}oq�;��_?8jH���tuҜ�i��B���ݼ�F�6�t䨭%2X���T�ǐ�ݺ����<��8��`}���57����<~",�Wu�0R��_T�Q�q��%z�cb��$`�xN$�H�nܭ��C����i��zJ��C��jt^�0�&O@��0y����U-6��������@��,�l�:o*�~���V�,����si��i��Q*Ƒ�3��0�/�*q�+��
�����fB�)�G���\��NG,\E����<�ͧ^�D��/�K湐���1��wE����M�Z��{�ܾu7FB0C���Cvh����٨h#�`�R�a���9{q/��Y<B�r��1_�K�����Y�/D$?��}Ƚ(U0O^��E���A�22��K���N9��i��$|fe�9�����4��)���(`	?ԏ�D>OSp�7�,�����)��_阚�_�,���R�K��`�W�P'�ɽ��1�6�EO��A�\�:���T�
֔(�W����T�y�˃�<N�Y�]��	D�t�#���\d�h�7�sѼ�X6%1a5�E�d��l��k&�bE���@��g�'���NG|��Y����b8�Ȼ��YT~^��hY�����r|��t������Zq!�ަq|,d����.*ߤ�n��Tq�#�0'p�{⇬L��������]�T����?1]q�;M̲�d��`=���t����/�a��/�/�́�F7�j
N%<��X����1|�0;;�_.� 7n_��_��}�2������-���5�I��֟t������c�Aۗ��;���|9�G"l20kx�r�x\�yW&����:�K�WЪ���,R�?'FW"�x�.�ׇ�g�j�8Ee�Fۣ��b}]��(���1��|9^�ї"M��E��}�Y��b�x&B{M�7�Z`�?G�x�D��0_�5����7^�x�i��n����NI��b������w�v����:��֫Ej�q�|����qs���H�D��:�x^5Ĥߵ������iq����4�x�c�O 4�s�f�}��;gH</��ᾛ�N{l7�"���or�H�
+ѓW5���0;�	����D�Ͼ��y�ʢ���<w=�;�#�*�^u`���Z�w���dm�F�81�o^Uo}"��l=z�����y9��*�'PM̴ӷ��t��I�l�:$(������_�J��Y�g��]7��p�$
+��,��
�Đ[��i��: 3u��q<`�l�x�E!L��g*m��Ҡ���g�	��`��l�}��m�	����ANJ����)���[��b5�(���-�}�Ww]�3��~�	|��#o2}�ڞ�b�#�Uh�tX.���_�e�����(�3׳�d��O��梇4O��>�a��+|gi.�t����*'f��N�]�IA6������Tk~�(��F#���(M�u�C)e���P`j��BZ���4���7:�󄄼c#S���d0���U_��Z@��h�v�4����[�d�R1�m^e�/�����kIOeoʜ�g�C&L�'��3M�ҽ�6hqX5�C�&��#ʼ8��>��o_�OA��2���l���/hu��� ,����DU�/�?<�d'Qx6���֡¸���J���`��L�A�R�Ѕd�;��g� 8�b�ě�������b�!K��gz)��m:���o˕�u�5�@	zC�҅"�w�A������"{,h�8�rI6�yG�@C��M�\
+�Ȥ�<(���v���5�	��;D���dm�9;`������r��k�����d����Er8Ec�#�&��;���`����6%�"f��3|C�DO���ʶ{��]*z�B������>pe�������v�	�S��
+D#f��I[Τ�H¨��%r�7�K8�+�o)
K~�3'-���L$ő�v�2���@�AI��`�,KyOD�C�P�x����rz���<��n�n�~���)�~���eV������6Ѕe���fe.�t���k����dG�������\�,��+8�b>�R�V{��h�`�����U�i��*��^�3Ι��h��/Ұ�4XIٙ�R��1;����#���@�Ϧ�����U��ú�p�ϱi3���w<�6-Xh�%�[-_��'�Y�8�nC�J���#�	�mV3�dwVr���-�C�V._�5xe)�{�r�VC�+ϫ �n��bc�-^P��xX���r
+2�)�����6�Pb)@�ۮw�~a�����C���,`�g
+���(�bD���ސ��9�tl��Ӵ�dǞK����@Wt�E��8��}�(P�����]�[��c3���Eo�m$+��&�/��`hrz%�T�6`k��Y*�,�j��*H�jCڞ�z⥦-8�37fO��&f�����`��V�+��j]��p�V.Օ�CY�3�I�m,�Zj|f�p�*���X�2NN3g�v`����;��e���"��d��\�K�9��?\�+fB���s�����/�M�����|��\��6��5�ّ*Bi��t���Yh~�𦗏���k1`}�}v����>$g=|"	�T?)l������t�z��?8�F��m;d8o_�3:�zP
Y1��N�i
+���x����U��M a��=e�����Kd]�k7�l��ӵt�f���ĺy[�LtI����Q��d���5�k�ζ���hH�.��6HgbtX/�lJ���Wn���2��9�%�^@��J���*5Ѻ �����E�Е������=ݕOU�	c��ƒ�k( ��R_�6����mG���g�"?�Ĵ�
+����_F�'^E}���R���l�n.�&$S��~����n�|$q~����a�Dx�ӽ�}���B�U��_ŐUY9%���V�ϵ���j�Ajh���k��q!i)i���E�5D5-g_"�������/��5NqDO�l����JAF
+f�ú�x.��֢�!,�������rl�̓��9��}!��T�
+��7g�;� �b��D:���XC��);S��"�qNN�wE%�,[�=0���٠$�U	8MMb��_x����(�O5���������v�R�������::K�T��O���O��L�9]�etS�0���D)��`욭ZD�j�l������c�w˲^�By��IZ�>X��H��M�:��F���$}M��5�X������ff^!<�S�׈Ɏ`/%�E%U�Nm�Н��5R��8+!U(�J�ı�ED���C�ۚ�@��8}g�
+/��1)t�REq*0
?X�Ub��7�� ���/3j/��砍�D�)�(�;����$�6t]rC�����8�O�n�ɉ:p|��H)<k�͂ApF,�KrC�6�l��=_��<N�b���/����}~)�;�^�eŰ�=���ݙ��RE�E0��zW���Z���(I�+Bh=X09�R��c�
+šn.>^	;y.Q����2K�g����+����b��\�J��ő�c��Ս�����ӕ].˺��\b�>y�o�U�(�_��z����{@�����3]�'_H���d}-�,˓�>u'�[U�Z�0�pqT�w����Y� %�
E�<&�����Kq�'�g�RD��G��c�S9�pK��_'��G�Q=g�1٢^��z�V���^�s�9߱���mJ�B,O�,n���﨓m2��S�2�w6�������Nom��Q)G��!�s
+nmH��*;��ER,�u#���R�^e�ؑ���o�πS�)m�	X�ac�6��TC��T��-H�0�1)�O�ϓW�鶅����P����\ok��^��E������,os�	:_.2p�e�U����K��HS�[�8}K#�>ߖ�r��`Bok�_q�!7z�7����%f���-�a&,����3�L�wd�T����XՋ�-Н����b�*%ͼ��ۚ���ٗăL=w��!\�,��c�-�L������HT�����jY[,����DH.���	�o.z��]ȺV��y�����S
+�OxA�+"�w"���b/\05ڒ��d@����T��*M��a20���*���#��hp�a��LX�L��Ѧ�D:a��?���,P�Ԩ��&ws�W��j��fA�~�i���j�r8e�n��铺�ׁ��4_��R�M��š1��aɖ�����
+�Ɗ"ky�p����@8�K[�����
$u��:%�c����
+�.�Mp�{�N_v�J������s��΢y(�4:EM;�m-Y8�!����x��B�Q4�G&ϡ���z^�ɛ&��j�����/�j͢j�G�(�W��$N���4�eϘa����Q��‚��>�DW�I )�m����Dsr�����CԦ�8_<_��K,���kqiǭ�����l,Xl=3����mb�3�ߊR����8��n\�5�vUZ���K<��2_p��"%aY����
��o_�j,΂��-7�}��ۏ��{g��ĩ��#rG?5b7��m4���oK_dB��w�]Ͷ0}!�t�E��ϢǞD��"�R#�~	��	�)�p��V$Z����3��5Y���"���ҝ�88!���[Š�T�j�"�D��T��Z���2N��Hɂ��GY�)k�O4b�DpU�`q2���w���V�8l"�`�(&�#L���4��""�R,�����m�����FX��z�,��_m�iEVt�"GY �����E�>QX���-��q���"$�"�{��$��Lɒ��!��*�ςOe��| ^�뷈(��9ے7Jt78�ƙjW~�L��,
+Tlrn|Q�Fd�Q'�B�IN����UE��
+P1��lq��6(`q� ����7y�FDF��@��A}����_��*��d�0�ȋj��VI�r���w�g}F��5����i>��tG�bD��@Do���Z�L�aD�9�Sg����w�AV�_ͦ�+����{"�>��#� ��#����`%��9<Е��BJ����s[�i�'T�盠�͗�gp,�]��0����w+/���S7,(��K�[ �s�焂7�-͵8����n�9W-���s;�Qͳ������b�F��v�[�@ߤ����H�f��N�M=vc��0�Zbd7.�j�A�5ߺR��%���(�.���� ݑ\����&�
���X��58���R�UO~S��3�m	���Æ�}Ę�����ԗb�H��Θ�ƨ,��۫��:`ZQ�eKy���&����R�q
�!����=s�����w���j��	���#��P�Ge?w��JRIS��I;A�3'w���4dz[_,��ԷS�K$��r5�A]�S���|qE��`������]��͵�4)<��y7�N�W�H�\��r[$�I�bJ@G�d�M�l(|ߑ��p���TU/���i9[�{UaTU�]���]U�D�폲U��p#�iMu0�YOk�wڭ�j����ئ>����y�=��G}[Tݳ�D5���z���s�`����|XU�C�:U��}Ϫ��9�d.NU�×U�3�յؙ��U/�JY��G-�^�*�.묀��5��@d�UT��"c��n�gQ��eM�DaK�Fd���z���z�C���B[\�᫢ꤌ��Oÿ��zQQ}�f���eUu�
+�f�迨��>�e�OZ8>M���ʪ�SƻJ�Ϫ�S���ҿ����_D�g|VV]e٪�E���/��g���Nأ��{�q)�YU�!,�{VU}���I�mQu��"��ˢ�C�e����^u��������|\R�r����:���
+��I�[a�*�a����UV����uS��iAu�
+�Fأ��]e݌�Ê�T�REu
+���%�"�Q�BSQ]+����S�J�J������X�B�l(Z�<~S�Ik�BX�W��\�(�6M��(��[��XW0�������6E��,S�\��i\�W%��|������AX�e���Az��U�%@��:��9�����˨ޔUZXʩg�
?ђ>)�I������:RT�q(��9nn1@X���
+���z���ʢ�f�5���-��Y�}*��h��C[+��l����"�2�����L=u�t��ޣ�2���ݬ43�k�=+Ύڪ�з��,���@?�sDŪڊ�~�*ώ���2V��z��gxS$W�1lլ�N��vyV��QXZ�p3èL�����Y�*,�ջ��~���f��<x.�`�3��p��fg��*!G��*zY�11�=IQل���8�Oe�?��Qʴ��:�t���UE�!+_�y?T�c��&ʇs��v���*�kEj��~g��ѡ�z�#�g����mk3@U�5ڴ�G����vu _l]�������C�A:�h�ι�_��~���=�GloY�:sǪ
+.gExԤZ(jօg1p�]����b9�����_��	�R���F<�[�}��sE�ѧY���X�ik��6��F|��kJ�~�;�J5�G-��f���l������ ��_A�8F�<.~��?�S�YK=��c�7���;��(��~
t�`�U�(�G)���P;z�5^9�:Z|̨���	"�x��j��Ǝ�l���>�1�4N�����
+�lMQ�+��27��h�]�W?z�����1�F����Ӎ���U���1s�Qc�>�M�ʎ��c����|S���z�
+ae��}������,(�+z�Y�(E%ڕ)j?P�!fM)�l��G�h8
���fԔ�_[�qBB#�ɸjX���1:=ɷF�bc
)�u.w���k��֎]�U�6j5�kc[������ަ���q�}��l[3��6a<}�n4�y7������!gk�&?�'��go�#�ڭ��
+�t�ۘo-}!"M��}����2�$}��6� >�n3���1{FkA�=^���x������MP�K,�(��d�~����GTͭ�#	*��Fk��hWM���z$��9Z���hkg��LG��=�IS<�(���?P�����ˑu��M��N����������A������_�"�w��o��[���q��M��bc��L�(�
+@_��p�k�Y1�HeiaJ��O\
+T���BG-���B�U,��΅e^~��L�$i9],��9��%����/i���V����珷�˯���ϱ?כ����|�Qx�zs��6~(B��A��љgY#�2�㕏p��'4�����ҽ�ĵ/�9�y��]C3�룩�����냃M�MM-b�s�n�hC�������YC�vFK޴���曞�����Y2:�ϒ��1��Ìٸ?�
+;Nc��ÈQ�� �7�� �����ڥ���~�ML������.�Bˆ\��z�9nL��{�s�
+�F"�ޔS6���Ʊ@���A&-�&
�o�݌����~l�	ZEh�+��[�Y�W��0����F𶆡h�m	kc_��<���F����X��
"���Nf�}7p�o�����8��tm+�����8�9�a¿~p��6�v����s��_?��Ƌ���_Tݦ��S�k�oq|s�b�}��Tr=f��`<�[&��q/��F=������)G����Y� �Z#���~�l�>ۯ�W���m�,E���=~߬э��ǿ����_��/��Q�E���yA��E�ᱺi"Y]���vײ�㛣u�"ڮ������ڴm�@�]G{�h|��/��O0ژ?�o�A���U)mP���צ�>]g,�6Z�*�U����b���e
+-Nk�r�Gw�7mgE��7Ч�OT��2���	�|�-�����Ժ��?����x7���{�;y��GQ���+����?�G��?AK��ĄqP�C�q�)0+vE(�{[~6(t�T�EW���=%��fbSz��
+Gw��{���/���W|��a�s����	:�G��0bU�r����7��.�U�����ש���{ G�(mYm��S�?���S��WU4J��{�Ui�6�1�
+��rnчS�~�������uٔ��@��l/�
+#�2�Z��g2䗃T�h��*��^�v�߬l.�G�k�,L'�E
+nRC>��u�;I��(uV��ԋH
+0�Y���Td��,^�	So�67.PSdH�1hj G�azj��,�֢��z0Ҵ�m�O��8����eqn\��`�6ۄ�j`���_�N.�ɫ�(g���Ύ�������(w-j0֋jv �I<vL� �͢�07�M��ދF9�į�%д�����#�\ԝ?fG�
+KB)a��\�I�̵�9/��-xq������/`A��Ml�n�+�l`DX֘elƛb��_!�+o�,/Yn��v
+	ˮ��6YНD�R<�\`�'֎J�T�n���EJ���)�L�T�T�]�bW�([!���QΰnB��?���R��]Q��J<��O�e15>�Sƾ��Nbm!"7o�2���e��ȓ�N�Qn��ɮZ�딩?£������ �!M��v[�u�L��X�T��"��zS�{�G�&�j����g$����粬�l�N�e"�(��LM��"meJ/���&Rb��˜�͢`op+
+b���DʬQԃ��L�� ��4��N���03@YO��&������"�?H�1���Q�n=�S�U��^��H���ͯo�����Fu�LHTI#�X7a�Z�.�~5�$��,�LL
�J�,N�]��<@:o��bq�>w����;r��_̓�T<3����nمqjv]:�B̎�!�Y�"k��u6u.�~�fύ���g�7;��OЮJ�.�fO����>塥vݸ�N�~��e8�!+%�8A)���m����P�8b�d�����6YM���{���vdGZQ:]p`��u+�W��59^��7�0�<��ڽ��
+�����P�㗢��!��V�I{��ey���r�=‹	Y�@� ~S��]�o��5�p��E,��@�IT�Eѓ-��f��:�����Q/�Fre�BO:��7���x�^�۩z����An��A� �(�6WSIS��]��rC��Kԉ���!j�7�$�7wjw��,*>*T��̛"o������0�Ez�r��U�W:�2MUᦶD��]:���h�w���xLU���)Ѯ�7�~���e%�؁z�zV5��+H�g!1x����:���I�aM�O�
+�����̤��,m�^iz�5�H��6p-���rFZҾ������YO�RY2=.*�Oh����y�гv�7QHRݵı҆�h��+^��bH]a���M8`��k���%�6��?s�a�����Gu�zE������ЊM�K��@�~���=w#�*T�x�߸�0�V�dv2�^��Ge�#w�K3�Ju��坃����o_�=
+���E�CG��� 
+�Ze�$	D�q���y`T[�r��J.�V�=;�"�^84�ťv���,�-�B3���C7�
n^5��@ݍS�����[*$D;�Cz���p��(�V����\$�~���E��vV�@s�)˰|zx� +�Zع�]a&T�s�̋5��_Q�y�:m���ͬ9���ת*�e�Z����N+�v�Rl��gu�8�d=g��bx�`ע-��X�p��P8M�!�֫oZ�|�~9OQy��(r�\�i5�'��Uɕp�D���y,����o�ժ�?\9Y���:R�b�<d00��|��H�M�������P�o���Y�ZOLY��*R�"���lm�TGmc�R^�]��:C�P@D���|��ߕѐc��0-ۈ�H��2A�(3�`s~~��=��U.���3AVD�`H����� r�.:挞�Y��n�S�N���e��R�Yπ�J@��(d$1�je��SIx��gݷ�׽���TA�g+�e	<�����]�����`Wo��K�Ȟ��6��!_�-��-J�<�,�}��f����}��r�Z'f�Ў����g�f�+�,џɡm���@��&Iw��-^Qe%�XXY��|!!����?���Z��o��ޅE��j���o�B)h�w�'9Y�e���}B�����/i�*Q�ņ^clm*o�VcV=*_(8�+a���@O�,�ִ�9��@dU�7���NO��%�T�ՅJ��)���X����q.�rgǬ�p�@���ڝ!�6�s�.9�cV\��Y�v+�4�eӞ�eFBʘIl��s�-u��iz�#SfdH\(
�,�[�
y7D��q�n!'�۸��4�G��I����h�FN�nѠ \[���X^{"P!�1'.�HZ'�G��HEƁ��k[�hL���Ǝ~\��-
|����v�6%�A��8ur'"x�v����mB\��1%?7[�$2'�s� �`�6.T����"�E۩BZz����Q媥���p�� ;j�6��L�3b��'����>B��4�F�D��+nXѕu�V��<��u=��NN�Ee��QVwc`	���dكU3eK�τ��8,����%�doi*�0�j��8��ID��X�(2��a�aL�֔��8��{�q/�J�x{ba�#�q�����"j�]=�'�۹�1z�/��@���VCZo�Ź(
+�D��I�8gr�٦�E	�@�[��~y����'�G�7���W���j�n1��{$�@��Q��o��е3�a��W⬱.O]	�c��\@�aI�����Q��Xm%��������a�Ҳe���Y�m^D��'�<���7��X^�U*�y�Z�G;�(s��_�p8+SƂռ��
+�2��zw�精ȚV2�����
+�gN�-����p���06�+�Q��N�p�{ ���33L���I�f�'�j
+ae��=�J�l\Q@ί�o4��N�]�q�j4����bl��/h�ȋ��/�@d�O\؃,Cu|e��|W�>�o��h�Oo�A���e���|�cgF��MY�ǩ�6J0K�I�0h�ՐCޯ��c����y���ع�7��[�OCJ�WNY$o������v2�;.�
����S��`:��U�(pe��Y��LY%�a(���
�G=P`��'���WxI�������Y�m�3ϔf]�3����
���rU&B���d��
+D��R����ԙ�������t4͢e��nS2[Wz^]���\u��qdB��q�˝A��F5Ӻ�,��ؾ����_
��3�.� ���
���h�$�)��Q~~$s!�iiL���ZM�[MM<�(H.,e?�+�0���86��u�=�] �OK�P�+���P~���=� '�^>Nu/nω�F5�^�R���
_'-���C�m#(�TD+��vz�ȕ�2a��(��??�Kђ+�`�<!i�\$뽣*��^��Q����B�>>�GǒBx7�NJ2�=	�M�/��m�<�4d먖��q�I�T�,��@Qg��r�Jq哇��F�e��h��}r�c�5E:����kQ�p��r·b	A��k{l*�"�V�he"�9E��;�\���&C�Ϫz0dV
+O���EM��Ǟ[yYOLh�E�q��VV�`H��Ws.S��[��F��S����+L6�]K�/hJ�!�]��]}�����>�\y
�`��E)�d�?@�1)N�3�0A�Tt��H|�-y��1)��[�,O�!�cIt;�g���zǜ�9`H����`�K�xL��=2�ZczLYp�t��M�Fk��"F,��thQ�>%:?�PZH�	�]x�D���?�	�1_���#@��ST��U�zZ�?������,]��p�}�(�q\08��	��	���C*f��-�!�p�7B+}�zEPC*cxL
+Lc�>W�~
��-nsR�Bd�!,�fG�'�"n|��I��b5+�9�Fw������U���b������&ts�1�X2s1=~��ݜ�[��b�U�U���h(i�d"��\��I(Bp1X�QZSIѻ�K�<��ر��������]`0��0�|1����1MV���������.�	V.j1jZ\pkU�����������†���kq�`�����QG
+���
+AQ��2� 2uѤ�!G��oʜ0CX�� ��N���0"7��\��z�v�'d�-z�mLY�hJ`ȌK�^R$�xI����3Э,��3+�2�PT�N�d��J�X8f膌���"��EV�Ft+	�u�B���g��Q�j2���ˈ�<����*�H*���o_X*tb��TA͊�t�n@����b$n���T��}�)��1QD�4��2�̿�hyz=J�i�9姂r��" f�@�߬������r~�/��` k�d��&p����,`����TN�L��"��y���{��A<h;IQ��3,hpɔY�%�����ɹϰâ��inE�קԜ��k*Y�m�>�V���ϯ��#��`��D�+�q~�a*�K����/���
+��E��m�~�����gW����&�E���ٟ�+�ܡ̎��"���x�[�Lc�ؠkD�Vw|�Z�0��%�I?���O3+� g�c��Y��ۍ���>���
�, ��g*��
+�,�ۀH�F�C%]�D��W��*�V�7�Xg	���1r�Si),!M8�r��t�����E�N��:ɚ�_o3i�ZH���y��BG&�}"-�X��S"�����}"-��|X~�Bg��|�\��<Z�Ge�M
+%1�Xp�pQ���*�?I�z��U
+��<Zz�Y�[� �p��y�J`V�(�Ӣ�*����'��Ռlh�
+�xY��z�I�r���$�x�0�0>N�E`���h�K��\'�"��s����ZZ�����h��
d?I-D$#�jNn�ˣ}�m#^� ���uR��*\�T8RtcC-��h�GV�w�!��O�ە�����[�kq����:轴"�y�"s'S��4�{n���/�ނ�L�K�%�v�D�}kDDo��;���h�C�dg|s�T*I��q�R!� �!����1nȖ�d|e�俈�����l#{�P��y�W~���F#
+r�@ÈAN\�=d"Y�0�}"�**<�/Cd�^�Sp�|�X�s�fָ�HJ��������kΘ�6���sd���qƩoou#�9+n9+�|6�1�ꚧ��=Y�M��n��uc�	Jg��2$��څ�f��l�Y+�T�؝;���D�BW'qG������T�:�2�g'Q=����9	��B4��TK��S�;�i�!���cbk:�6��p�_U�pd�l��8f7'	l���t��/��yd��t������ڜ�}����S���I�Ty�����,/�:'���=���2����5��9Zd`�	Rm��T4a:>�~��Y4}4/Y�D_L	��V��dpK�=#!K�o&�2��\���?�|�s��܉#�\_3���!�
+��kIW@	7�s��O�+~q����N	=�h�ةmbg3�2p.��Z0;`��m߲c��d;�W�%�~|��F\
4�@���ZAIn9I�'�vfl�����������`�
���\n�N#w�����xm[���ժ�
|��ȃ�D򕨀
iz%.A8���E�}��Z�!��U�G�By-��h5'-@�OIˮP���<j�����gP�'_���)4V�X��p���z�o+��3"�;1�-2��s��>�����P��[c@����s���J���BS��U0RH���e�-���D�i���&^,�,����t�ǔ+��*X���#�ΑpC3}�T3e�9�g��%���ȇ�n4 _�f��D�/H�pdk׺����*��9�_��5l|�]4�.�H�̴ ��^42�tӌK�i��g�����֭�m�B�!N�؎6��s�bA�8{��L��z�{P��<��
+ɝ�aU� ����RX�)Z�N/���]9���W���9!��L�d,1�����ӂW�PVU��R�I���
$s'8+�`�=M�?���mN�*��8y�4�zB��3Y�	�}?�Ǐ�v��,�@-y?����Z
��0�`�v7�x�ɭ'��;��.3g6���,���n�h�٦ÒՖx�Q�y�2,�?k�țD?UECߛ��>x����$ĩsڶ�$��I�]�G��2��d"A�L�e�Є�Mu~��k{�F9�A��=wܽ&����#�N*�jf�~�935Ƌ�����K�l��3�vE�v"��L�x��������jt�)�wM5���g���~�<��#WQW���3�R��t�6�h���:G�-�–��| e<�0��+�v��'�`��a��>�uꑑ72&%�4��m���4%�M2|�LJ�*��ZW�0����jN�@�y����}Z��ˆ�*�#(}(6���ދ�����H���O���v����
�*�����^��"^qJ�˰"�}���J֎��*��pW�����وH4��V'�b��]�_|���UJ���P���U�
+J��;����\��Г�pIc����v�u8�`C����P��v֍��� ��EAJ�/��(}Xܡ�#��?��*��%��l~p�P���l{Zx�_�a8C����d�M��D�&���SC',��=JUIN�姅��i�*g�CB×r~L������N�ǿ�J>��X�����	(W4�t-jpidH�q�����|%M��L?�Б*1�,q��r��A#)B�',4۸�6����iͫ��H��hj��i���je8�#�����(��P8ؕ;w]��8GUfkg�2rS�,LV�/N�XU�
��kq��6�%��k
�O��[�o�� �X6i��3�"��R���2�ܸ��d%�:��u�2�H��;�Ol��{\�:��h�D��,�m[W	E� Nr�,���R[׷	��8�ʪA'���ߙ.�j��@q?���*v7�ώh����K!Ұb��z(����!�3�&�X^|�����}�
�P2�$��-KU��XJ߽��X*�6a��c�\��N�;���X�/�.�o��6�T�E[(0��~�N������[�,�5'W�&!-�����Њ���V,dG���N���I�/�D��'f
+�vw��~(����j���$RI⇦i�~
+���m2��fr>���B���sy�+q��lb��H�/�b
+ORs��x���?��|��{���A��/�-��N�����u�DŽ ����Xn_ �ڶ�=x��x^�!{+un@�P�%l�����|�{e݄�	��eQC����mK)��NPeV��6�M���d~�h檲��]|��_�Y3k�Ȉ��ؼ]�	ξ�ke k�A�p
}�k��8���w�OrJ��_�
+�l`��>ɷ䓶cA��4PQ6�O-Q4�?+��iY�������Zt�8�*���D��(z�)�!���'���a�C�>���,�1�j��'+�Ҽ�M��z���V
�I�HcdF��%x@L��؈�VR�ШDO�%�>�-?fv-V�+� �1o�2/CGo�O�/�eNm�@��3��vt� �n��N${�u�u��;�.E}*�(�g��d�*���3� �,_�ߕ	Z��v�b��P�/?{��%�wׅ/�9DA��:��G���$x6L& ���ۯwʲL8���򭤓������3[
r�u�-��e_����τό�@�º��ԶX���X��7d�zvN��v�!�g�H?-��#�lߝ �(<��zE�c�Gw��C/ݜx��"O�v�N��n����wh���/;ܹۆ�E�a>��#��?�g6�62��i­�b�G�Y[h��{l(j�|���i��(��ߤvZ�>^z������J�St��?�<�W�9R5M�R�yq.�ED�-�E�ݻf}��4U��If��?饢z��N�%��p��+ET��̔��9��<�p/�}|�h��{�%�oۓ�8[b�9NV e�ǽxRD���xU�4���Nr�����(�պ"{m�7��O���ǿWH���ui���B$
+�'
0�þ������	
+���$��5z��HZ�E#����No����_����:��H��^86������WK,��o�µ
+��k:�(��e���_Fx�M7��
&���Bֹ]|;'(�z\bM�~÷`����}F�c����)��]�S�^����Z
�ҡ����S��E˷ł�l�T�V�����~�b��4o��8���~Ϸv��{��1������^Z���~
+�������ߎ��w{���`��q�y�x�&��hP��KIX?�Cd�m��kp�=���Q�)V��zX��A�=?օ��#I��Z�"�
��7�it(�ay
+�P|�ݨ�]�!�la ��mp ���WL��X�:y׳��_�����J@�J7�\P�P]ad��{���W�/��cdQ7��0��/�!
+oۨ���y,��ޕ��@70D�6����<�#�	Gߖ1�h��y~`ެA���v�6���QD.�HV�b�)���S�`�ZH+�avձ��d4c)4������`�&-q��mGJ�W�PY��U`�@��1�Kp):�d��:N�^ l�9����q��;$���H�7^(&� HВ�>0j��(%�e˅��0�cC���l�L�ZP�te\o��\@�w�;B��+��U)��K�O�ʨB%2LƖX�蝱�h�\�:���e�Y�����V�BQC!P�u�%z���׽�^���pE�����i +�i^Vh�E�T(�y�������A�g����,����v�V �t{���ʥT��b�MF?�
+���ʙ���&����-�l��:+�F]&be�휤~h�LF^ Rf�@œnb����H4�
+xO+�U:�3�M7I/�c"ch; ���"�`
+�EdF�ey�U���^������e�Awz��kXԃ4�f
+T�-��g#E2���]%�*��ROk�}�`��F� ��H���H���2u�h��d4�(���}�}-_[Y�"ܪ��K���.����t�E`R�LE��5��^`����OE��
�˶&�϶�}�2ߘ��4��n+�O@���8R��ݘZ6��}B���| " "�ߜ\Jv���$Ɉ�勞9��ʔ��	"�5�-0gGF�A�d�j�ᅤ
+r�D��u2�:���:�@"3f�Np+
+v���'*$;5���2��@!ȓ�\��K�G���49
+�~JW�x�}�B9DR���Vq�P��佴L.�H`���h�:��G(�d�%��1�c6���6p�I��,l�c�i"�{��my��� 1��~S�e�lu�dwP�I����ʥ�I΅��c��t�T49�$M������Ӿh@�]D͜GB찦��lj�8���ͫ���������yC{��lE����� �x����^{�3S'��7$,��5&k��)d[�"z��F��JV���4l�=+��y�#�'�DTG�v��b��|K)�\?:zw�a]�8��?{U�PSM�6)}��C	|Nj���(e��dd�}ϬV�st�2ϱT:�o�
+J��J���|��
+*�Ӷ<P�c��*ܫz���$��و�4j��v�G�e�Xʾ�Q��8��r���S��8�Z9�oP�W���]�z�1���]�-]��y�B����q���#=�$Ij݄�L�����h�X��3�\�%�B$�}_~(���X��8o˷���>�"�&u�am�ʷ08�����V$X�G��` k�`�O,��h�v>7�o�$�)�[iڗ�o{R��M]'G_�����L>1�[~x��l�[������+/�t�p�S�d�����c�GJ�e=����w�ݑ5����
�?�E�@Yz�E�<���Ĵq&_�HT�A<�#��!҃_�lgG;���tT'&<m���5_��b{LZ����F��ʐ"��N�	
�י;F�E�!'���x��ז���&�ܷ֓u���}ͭl��JK�{2��_�-��3
+�JG��l&�eMF8��0��#i���4�o�mδ�z&��y,�j� K�v2ϔA�=%��1ɚ7�=�o󭳭bY
+y�����T�
+;�C"��A��o{^"򅠏$�����k�Zms���zz��D+)�yVi�dJ�W;������,*b'�!k��@^h;�պO��b���ѕ2b�J����,�8&]��CA������''�ly����.�Ҏ��%�ܓ�r((5
>kW�.Qvk�ӟ�	���X]�bQ1�'�HH������rU,Ϲ$I׈#8���ձ��
+��MX{����f�,�����üFe�y4CkT��h~r�8H�K���	B?!�-:�ٛ0w
+�K��	ӓ��.T
��k�E���Re�����CkmÐE�+ �S^�,���C�p�H���o��c���7�0v:�H�َKA��ZqT�:9�◈N��+�Y���,�T	~
��,J[�d�##�a�v+���YA�,
��`��OW�)�q�O;�A��M#V��r��E������i����#K��My����?��zL��{B��؈%y�
�?��g	�@�)f�=�Cn�u�fbD�{8G�B�x�1/?�/�_Ȭ�����u��y%�;�.���&��#�O�|�q�0�������*���H��������_�Ƌ��mW��Kf��ʿfV�[|�\��_N�r����J���G��WB����о7Ϩ)�#|&���=J��/�#;�C����~I}�W_m=Ǹ�6��ȇ���� 8�vr����'��v=G�@8��R���?�[�6�Ξ#�m�f�����![d.h���OF}��9��I�rS�|�^f=�=���>��q������e����������lNU�k;ް��>���4�#���W������J�G��-n�-�l��܁k/��7#>�BdYq��
	�q|�@��9j+������y�t�')��J�[?��a`fLҳ��b�w�)��R"�
f�?��X�(�@��U���[��U�`*V5t'�^?��OU&�.`�*��~(u�
���v�`��d�c�#�7)��'oZ,�(�5��Cd�3k�v��N�:Q�K�������j)�>�%���bk�
+�P94�u����>[�V��!��z:Ա�G}i�:���[��R��4~�4)1Kr��*^J���L(�nH�y����$���E�:�R
+��.���*{,=�7E���?�-����b�Hݨ�Dj�F.���`�˚@�b�~���r�DEu�	��Q"f���#ې�f��Nd7o�ۚ��`�o��u��Ss�����C�/������P:��M�B0Ʋ������=bq��D����1~��=ba�<ߐ�Ĵ��x�WJ�����Hk-/\JI�ㅥ2���_x�!V����T
+�Q�7;F�H���Ŋ�!V��	'�g$��-֤�DW�>��lB&���Ŝ)L-',l
W�~@�k��)�`��M<�o�o��#O���%~/�����G$XΒ@��Pa0�`vl	�A�$����!V�+��&�b-9�
'L�Dꆌz��`(P+��BR1��Ɩ�)���qC5a�0�W�Q�C�~������·��(P|��ث���y������s,g�8�`�u	��B���qx�̶�^���Ӄ��h`go��='�$o�d�*��ڤ��w�
Bh���M ��ob@�.��``�&?X-(��IJ�u/p�^Իm�� ��Dh�!��,P�Ig�l���P�����s��!�vu2*�u�&��׳ħݱ��`ڕ��/^�tLU?�T@���{iS"��p�?$v�;�X�C�D�Mu�](�����b;�,�9ز?�U�ta�I}���ƒW��:fۃ�f��!�_i) V����T���}��<?0�<qH���l�eI��ͮ�r`xI�?�j�1�
���tU��إ����V�6�kq]��zJ��x�jAv��s��D<�o%���۪����?=�b;�@�狒[�A����6챦ɲs�e�K
+�R��º����{x�=y9�/,m��!�f%����y���UߢsO7��-���x���-��O�x�ut
+�O���I:�(�����rC���BI���E����俞cC���������2��2��2�-����\
�~W�M��hd�E�5-�>���%�!1���H����=	R�2P�T~�HA����j*��Dx�b��_m�O����~�0����A��3�:����#�����yȻ�M.]�>�s��dx��$�9����Z�2�c\dc�~(�������Ƚ���u�4A��Y�B{��	��>��7�W���/�����+/��b|.TYz٢�;H�B��������0#ӹ���Z�}����q��H��Z�2�WrC����v��\�2��m��5T��6�$\⩃"�Úܯ2E`��G�*��|g��t��W9>�y���l3a��z0����r��ߥ��9��|�A^k���q�+Ak��<����j1���^RP]^����c�B���u��?o
5�z�Z�IAmG&�
+~O~�����d���~dܿ����{T~�Q>�ؿz^M:������������)�զ�������k�B����aPԊ-Yx_��_5��"��h�矹� G�q�y>y�[�(vC��"����ק�!���:����5Y�UA��8�nP%�.���:��EQ#
������X�J�/%�rTt�x�A������Z�W��#�c��	(>����幐˜�cVbw�7�<�=#��2ҽ��s�k��2������ʿ�<�̾��U�Gd�Ws�g]�9�v��k�X|��j?J�f���@N$X���^~{!?$^�`�50������D��H�Qte���h��?2_����`�/��p��(�BQ�"؆7/����X���r�zA��E��-���)QL���@��P�]W�=_m�+�#��&-DQ߹c=X�9[,_uյЇx�y�������:�R3�$�KJ��U5t
+�%L\Q?������������XL=�LY�j7%ұ�Dbj�$7�F�3P�z?��<������mF1�$�m���D�O�e�-�Wy��d{�9��`��_m!�-��8*�\y�i<�v���PZ
�B��K^���}�}�z�X8:P����X��I�r�E����.N�W,Y����=�\�r���AM�x
+%�	&P��J,�_�����q�>��5V�;FǶ�:��N�0�������+�q`)��–aM�0����Гh�X�#҈��v���}�y���'K�i��vq$vl��dV��e�z��H�%�[�����f�t<�q[�J�P?h�(�2ql�/T[:>:�j��$䅱-&��]��U��>��+�%j�EJ(zD
�eP�;k��D�e��Z��J(�>	�D��B� a���E��C�J�� ����m���M����)2��+�#�$��N�c)�7�ׁd���E���B�(��h�u�d��+����6
+=酲U�l�%S��%E����m
+|�#�����o�a�,u�D��(m��o�z+�ViW���&OO��]�Vid�V)hax�a���]�Y���vTt�'�c_O�M(�T-�@Oِ��hJC��v��m�ZuP�̨4�U�%Ԁ�\:9��L�CZ����w7��g��	�罉]���έ[�΢+"�cm7�:ZOG3a&?b���\�=�b�5m|��b���"����jG{%�U@2
���DE��S��� J'��K�R^x^@1
�o�[;~����Ȱ��l�~��II@V��O��h���0����M\e��������a.� ��E!O?���,���l�Bٶ��o���!Y�/��044��	r�~��RJ{g@�P/e����
^�{ݹ��r%dW���k9?ԇ�\U�X�;_CRPE���g�7IAy�c.����;�����_b��I͆��ֵ�r{'�D�:�i�Ѡf������͕��yBY�E�}W�D@xU������z�M[z���5׺��~�w�����(–�{�T���ʚ\�T-G�	�LkX�u��_����!lz8�!��dF�3�$��a�9�pG8sP��h2����Mn��H��P�����ҥ�4�T?�JK0�{[��%����*�V�4����Ԡ��w��/2Ă���_ZԀ�����"��򡩼@hY�7�&�B�^�\�YX;s��ϕ���C�R_Ʊ^�zIM5t	+�ōY�J�թ�/�A�um�c�޲�6Īt�r�=��-W��C��QVg�fKQ�:��k�M���<�A��y8�X������踡޿����X��a�Ď���Q���~��?$(_��"OP<�#QN�A��ӕz���Z
+�>:�G��-�3wA}ec�w��.����-����B��"�z��C�#�]��k���<��Z�!�;UZ�D����G�"k���r:c�B/�A�Dj�rc��i��#Fj�T}��P*��*[c��n��Tc�\,���s�;��)Q6�{HGY�R(~��%����/�.&M;z���+y	��*i��1���{�o��lˡ��Ɠ�?�Bߎ��k�U�e%����A�Z���	��t�j��8���Ok�H��o���Ο�|�
+�<�mP�����o��k�~Qn�����
X:_.i_W����O��3����}���C�W�$C��9}QYTC��(�D�}���}Xp�.�*5_�	ID(�W��3�66����H��g ��Xv��fN����CY��*�)=�5+��
K���V�l�z0T>M���
+��J�{���cѶ7Dk+���ב�'��ek�pE�����IDW�{|��(�7d�+��[�A��}ZU��s���WZ���W]�N��w!�ʛH��3��D�
+�>��}4�����w�kJ%�d��|�i���|JAH������=>��� =�^�C�]:%dǎ�q}���R�M������+Fe��	�)G��[B%��TQ-���ŧ���~�S������SB�Z�I�����ʷŧ�[ M2������xŧl�J�n�R�)�_�)���<�MJ�"S�՘��Oi	�5U�v���V������ZU9���
��[tJSD�:*��=D����S&j-٤�H�m)g_�)��b��2����M	
r����	BBD\wؔh#��NS�Fs�ؔ��2������)������Ȁ\�)=�
+\�gB��RV�Lnr�����/bm�)��؂۴ǧ���/�/
+P����G+���?���2ɼ�����D��X�.nu�XYd��3�ϿcV�2���5�R8քQp�Z)�svqM;�J�U�*�?���2[	��׸E�t��L��be��oY���RȂ���g�5�R4���<e��J��������o���Ԭ���bV*~{��ק�)��P�L@��g9��(PG���a�2�&un���P�cId���B�6-5&���"}h�WLUj�P�:+r�Z޲<�@�
+jҿ��piu��Mn_i[���<�~?�Wޟe��<EG��`��TDf��)�S��X��x��3m���e�B����	�W�#"�e�E*�TdqF�].��5>|�
/����#>;J����vM5IM����pC���6X-�[Ɔ�]�(�eJ�Hg,;Ʋ�aQ-��3$�N,�[8�Zj�?�F�<��/�����c�@�ƽz��l~|j�%���t�h�:9i3qB�$������0n��3�{���H8ٕ�:_��'מD�*c�(�y�
+�Y&��$�^4��⻘�!�'�J
+"�g���J#V�����D��%���g~ ��e���/��{�Dj�=l� �y��e9%�$+j@=d��ln���媈��-zb�˝0l�I�$�2��h�>`���@���dW�}Y�)^�jQ	PD���7[��nA��_Al� �|�$�y:)#V�XN���d
e
+
ly(�'�#��x��0߯j���$y��e(�u&Ɔ���., V�}���I�<�˯�I�%S�Ւ�4�-r3�P\�9)!�<
�iK�p6|)��)�Hd���'�j�ƒ�F�]�><[�hG�5��K�ɷ�p	t���"�J���z�b�B�&�-m?� /	���6lɈ呗�ؐ8��y���3���IgO(H[bE{ɸ@<�ۯpg8Pq�xJBp� �����}5W8�������5	(����%�>h�/iN-�Έe6�� �|�AP�@�i6lql���g�2C�G;*'�{ix��yˑ�>��h��e����P����	���K~`��!�gOc)��R�߾��փl�%
b��#{m���B��d�	,����R_�E�����k�"p�v�-��0��EC�,���a㒧�30[��FD8OW�̜��Ģ��CX���si�vE,��
Zj'����ڹ�vi�8��1��Y�Y��`��!<l�'��mυ1��}��eqදZ۹���eBŁ�G��mU�Aj�;���,������,к����A8�G5��	��	��<;��
+�R#2�u4���F���U�۝v׋D��^]y�/���\�΁C(k&�Jw�u��h�2T��6��zqO����Y����"ڋ!K]�J<ٜ��2�y��L1T�	���/�]d[�����䢴�-$�4�򐿴Hhd�H3�	���}�BT�oS��s�����5`���ٛh#ϲ#J&����wD�L�C��v�빨'��y��x���p}.s1/���̟J��h$�(�O���񹕞)O`!�?o�$y��K��s����O�ˣ�0!�υ)١��]���k��ڑ]I^��"��U(��R7�?��n�)�;]�I��Џ/�AS�%��&������d�uۦ����i���4�����O�@7�$z6@���g�!-����B��N~��`��)R_���}}2���?_��S��}�i`�[���$�9���pqr┨�Y&we���o�Lr�(�����$E�{�C�\,�/�*�9�O��G7P)Q�H�jʍ�'��s|��+�㪍\�
+��r��BN�3'}���8�'j�(�v8��8���l��?����o���t�܀�r�*��m�
���I�F3|r�C����?]�t�	��ܩ,����aǙt0l�l�>:B�/g�M���n̡��������53�t^%A
+�J�h�X����sM���I�T�޹n"Q�N����-��N }v��H�h0Ó^2HC<U"��+.M�8���<ܲ��}�v�4T.�d�n�'���
+�T~���$�W�
+�����x�کl����xH�mލ`����DtL�����?Kጡ��n� ��d��(S!���^��!:�c2�?T�'*h�����X,djN�V�)||0/��e�4�S���7�	,�0*n�w�TES'M^
�|������+z��dL�;�B�ў�|_a쐯�[�~�e&�$$n�$��L�T7��wO7�!1q~s��ߙ�V]�K��U�QA�#t�]��D���usڑ�����|J��ڨP�!��?�����r�Bn��bUl�����FAsM"%�����A�-R�b}�����k}oj)�X�D�s�,;�[�G2ZU���K�g�O��+����k��(<����b�׮�JZ�4PyxcĈ�2"VZ3��Ov���$MRe��fԊA|���k\8:N��eT(� �M���_`d%�+V�����SKh[�&UV��as���aOW�O��'���&�;Tf8����)9G��NیxVd�}���{��R��u��.90�~V���J�Ts~��_��#X��:k�0�W��F����
+�#���P����-mQ���nJ,č���0�yE���+B��M�o!XaceZb�7���l^��ؤ�\U�gi����h�nv^�t3g^tn�#�����}n��!��M�yMxޤ���K#`��T���E#�����4FD?^N,rˋ�ɗ�!��\��u�h�7�ᨻ?��D�Nd���ay�q��,�A/?��dR�h��8�-m�A�t������J����$D+��4o�w��Tn��B�č#���hx������8kyZ�_h�a �X��g��c�b�e�o�iq@���m+��+;`��E�A�`	���"Z�<��]�KK`Ē}�N;�,�!�X�!ڴ0�Ȃh5��#Z���n�N����m�)_k�#��j.)�G�%B�^���B3v/���� +e�	�����b�e�4��&�D����M�c.�@m*H��P�@����%܅�����_(�'O�Ζ���W7��N�`�cd��&%	)��x����82W��ca����N��$2TiJ�b�8���IXg<�u��2YΕ7u;
K��'��UmXs����%��&���L�������7�h�k�8��){Y�Ȍhmٙ�����Yl�
+�Q�H�Ǽ`;
��Z���v�i���u@���3�F�OX�M���Dꟃ�9��I^S~Sc��4~z�&��_9i{9A~�,_k�IX�P���'��	��_o��# C��DO�����Q�����?�(д��@4�98ݧtӝ�l�4"�f~�V:āF����0ㅅ<]�ǃ���(�����æg��0�ܓ)�P�����X�?����f��P�䗲��
�B���6�2b���\����+	�z��S��;���oTd�B�PZ�2ܽ�-�*�p�I<��j$o$�8�%���u���7�e%���И��W����6��,�^�Q־Khd*\O)f�I>q��ˡD��!
��l��H�E�4b�)���������!'�7!�(�.4upM�Z���:��!	�ݜC���dk�6$�N��RԆ�h��6"�^B��Ŧr]���q$�⯢J0-p��Y=?sçgQZ����6���&$Q	���\X��>x�]�
+��<=��4�I%h�)�Mw�{#�E�A�hp���A��~�D�����pN�-=�9���u=�Ҝ���W��.?�@�JCݙ�3�����l�+�Gk)Q2ܖ�O�=���VY�ɧ\�e���
+�Iw���6��N��A7jV�7���7�Ŗ��4V�-O�����[�K�Ľ�����9la���8A�
��5���!+�@&�%zf�'j�6��CP�-_Py'��z:�����0(�#�
��-όX��ό
+��ް�aحSu,��R�K�b����Z��]ஒ\r�)xz
+��A��T0�=3�P'�|E٪͙Q�#%�<K�	�y�&��Dm�@=��_q���lWz]�TyP�]KzX�I+���P��abC�*ÈT�J@���]� �p��
+/��:3=�x獡�R@�vE��h!|pY�P�	��㪝�,��}�`�^&�<Jİ~b�,�g+Ω��������_�im��,����ې�P�"ILɎ�Բ;����R�G����b������7-C�ձ��0��/&ᖦ)�M�?�qf�4j{��_������q_	}�1���� ����,H��#�\^�l ���5tl�'"=��_�Q�2V��������H��5FnU�!L�ہ��`��ȉ���_}�.lj�v����?]�n*׮R��}�����?��-�ѣ�P�$�Ym\�N�����D�!ܽ_��e�mE�W�����Ge�I~�8KU�>ǿ��cs��z�������m�_����ʖg�>�M��@y����}���s̫��)����M�c�s���|t���z]���{���u,G��l�;6���;
+t.<Ǹ�̊��!���v<�G��|{$�/���P������#s�C�ha�zE{n�������Cy���<��3����z
!������z��T�� ��ҎE�"��N<8��*i=EDJ�
+�ܨt�9�=��_xvv�!THZ��wЊ0�C\�$��GN�i���T����8b��*�k��,|���?�(��!n+��x�;��|�/��ĖʿhI'���������D��	Hෑd�
+�׊f4���Ѕ�m��q�%>���c�R�����|������U�����r�D���$k)ޣ�#R���x�V�鉖�	
p<�׿&§�ޏ6	�����/�>����h��s����6|2��^�mQ�m�)O���=����!�Am�e+|��.,��5������8j<�0�i��BS�߿�yӗ�*��Ѫ‰��[�?;Q�����_�#�fY����L�?���i�
��ׯ���-}}}�܋�
+endstream
+endobj
+383 0 obj
+<<
+/Author (Werner Messinger)
+/CreationDate (D:20100305103803+01'00')
+/Creator (Adobe Illustrator\(R\) X)
+/ModDate (D:20100305103850+01'00')
+/Producer (Acrobat Distiller 9.3.0 \(Windows\))
+/Title (Bosch_4C_M.eps)
+>>
+endobj
+384 0 obj
+[/ICCBased 390 0 R]
+endobj
+385 0 obj
+<<
+/BG2 /Default
+/HT /Default
+/OP false
+/OPM 1
+/SA false
+/SM 0.02
+/Type /ExtGState
+/UCR2 /Default
+/op false
+>>
+endobj
+386 0 obj
+<<
+/BG2 /Default
+/HT /Default
+/OP true
+/OPM 1
+/SA false
+/SM 0.02
+/Type /ExtGState
+/UCR2 /Default
+/op true
+>>
+endobj
+387 0 obj
+<<
+/BG2 /Default
+/HT /Default
+/OP true
+/OPM 1
+/SA true
+/SM 0.02
+/Type /ExtGState
+/UCR2 /Default
+/op true
+>>
+endobj
+388 0 obj
+<<
+/BG2 /Default
+/HT /Default
+/OP false
+/OPM 1
+/SA true
+/SM 0.02
+/Type /ExtGState
+/UCR2 /Default
+/op false
+>>
+endobj
+389 0 obj
+<<
+/ColorSpace 384 0 R
+/Coords [ 0 0 0 0 0 1]
+/Extend [ true false]
+/Function 391 0 R
+/ShadingType 3
+>>
+endobj
+390 0 obj
+<<
+/Alternate /DeviceRGB
+/Filter /FlateDecode
+/Length 2597
+/N 3
+>>
+stream
+hޜ�wTT��Ͻwz��0�z�.0��. Qf���Ml��@DE�����H��b!(�`HPb0���dF�J|yy����ǽ��g�s��{��.�$O./� �'�z8�W�Gб��x���0Y驾A��@$/7z��	���H��e��O���OҬT����_��lN:K��"N����3"��$�F��/JP�rb�[䥟}�Q��d[��S��l1��x{��#b�G�\N��o�X3I���[ql2����$�8�x����t�r�p��/8�p��C���f�q��.K�njm͠{r2�8��?�����.)ɩL^6��g�,qm�"[�Z[Z��~Q����7%��"�
+��3�������R��`̊j��[�~�:� w���!�$E}k���yh�y�Rm��333��������:�
}�=#�v����ʉe
+�tq�X)I)B>==����
�<��8��Xȉ��9<QD�hʸ�8Q�yl���£sy����0�OZ�k�(���5�Hݠ��>��yP�������:�8�����p���΍��Lg	��k�k	Ѐ�$��t�!0V�87���`��ɀ2A.�
+@���JP�A#h'@8
.���:�	�`���`��a!2D��!UH2�� d�A>P ECqB���*�*�Z��:]��B�=h��~���L���2�
��	����5p�����N��������:|��ó@�
QC��!H,�G6 �H9R�� ]H/rA��w(����Q�(OT��JCm@�*QGQ���-�(j�	MF+�
�6h/�*t:]�.G7��З�w���7����Xa<1��:L1���s3���b�Xy���eb��~�1�9� v�Gĩ��p���+�5���q�y�^o��ó���|=�?��'Htv�`Ba3���B�DxHxE$Չ���"���XA<N�B%�#ɐ�I.�H����t�t�t��L&k��dy'��|����V�"a$�%���(Q%�.1(�B/�%�$�V2G�\��
�i)�����Sj�T��)�a�Yi�����t�t�t��U�I�����[&_��E�1
+BѠ�PX�-�z�%�8CաzQ�E�o���Y�e���Y�U�gdGhM��EK���NІh�(/qZ�Y�cI˒�%sr�r�r�B�V�;r����n���;�)��2*\R�V�*�*�O(�W������)V�S�UVQ�PNUޯ|QyZ��⨒�R�rVeJ��j��U-S=���.Kw�'�+�=�5%5O5�Z�Z�ڼ��z�z�z��#
�C#V�L�[cFSU�W3W�Y�^����O�WkN[G;L{�v�������N�N��C]���n�n��m=�C/Q��M}X�B?^�J��l`i�58`0���z)oi��aC���a�a�����(Ϩ�腱�q��n�^�O&&I&�&LeLW��v��j�o�2�2�mN6w7�h�i�r��2β���ZP,|-�Yt[|����[�XNYiZE[U[
3�F1�5���z��i�w6�6�6���&�6�N.�Y�Y^�|�NݎiWk7bO���?d?���t�sx���vlp�p�sJp:����ę���<�b���+���Z���&��V���]�=ν�}���c��yO����n�a/e/�W���
+��W�x����+������}�|a��{|��Z�[�������=���O��>��P�4�407�7���&�9�$�A�n�0�;T242�1t.�5�4ld������+�s�;#��
���V�]=iY9�FgM֚�k�&�=%Ō:���n����c�1gc�b�cfX.�}��lGv{�c�)�L��Ŗ�N���퉛�w�/���p+�/<j���$.$�%�&㒣�O�dx��������T�Ԃԑ4���i3|o~C:��&�S@�L�	u�[���Uo3C3OfIg�����wdO��|�����;W-ws��z����
1�7jl��8��c��͉̈́��3�+�{�%lKW�r�����[�$
+���l��lGm�n��a�c��O���kE&E�E�Y�׾2��⫅��;�K,K���������h�tiN���=�e��²�{��^-_V^���O�o�§�s���]�?T�Wީr�j�V��Q=w�}`����嚢�������zԶ�iו��8��>���k�׍
+
E
����
<��h��ؤ�T�7���E����7�-�-���֢�����o��:�}��$�d�wZ�U�Q�
+ۡ����������΁S+Nuw�v�}o����j���Ȟ)9K8�v�\ι���/�]��~pq���==���/]��~�b�S�+vWN_��z��Z�u���}}m?X���o��~��F�M�]��:^��z��m���לּ302tw8rx�.��佤{/�gܟ��!�a�#�G叕����c��șQ�Ѿ'AO��ƞ���Ӈ��������f���ܧn>[�l�y���邟��~���_�Y53���r���W򯎼^��{����7�s�o��}�x��>���|�쇊�z�>yz�����������
+endstream
+endobj
+391 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 430
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h޴�i3Baǿ�5�e
+��m�Bn��N5-*Q�DRZ�M�;J�C8f/���^=�y�9�����V��_x���k/O�n���/��ZϽ<6�ht~xj�ך���-Q/Tk7"[~H�J<W�ݔ.���t�<�;�g�X&p��_$|��,�9��N"��=pn=
+�M^���]~�q����6������f��h��m"�U��	4f���Q���j��cKC����
+�l��.�d��"�e�f��)�`��_�V�Q*{��>�� �}3������O�v�‚2�2��V84.<����4sB�Y�xل)0k��M�0X+�5�Ð[�Cz���W�amfk�Djt�&D��s���9� ��sl��_��?-.�,yBQ0�$�h:x�	%��TĂ�D���y�(Vke��Q��!���5E*
+endstream
+endobj
+222 0 obj
+<<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (C:/branch/ku_algorithm_environment/20_Documents/20_Documentation/texmfbosch/tex/generic/images/bosch/CD2016Graphics/Bosch-Supergraphic.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 392 0 R
+/BBox [0 0 1190.553 504.566]
+/Resources <<
+/ColorSpace <<
+/Cs6 393 0 R
+>>/ExtGState <<
+/GS1 394 0 R
+>>/ProcSet [ /PDF ]
+/Properties <<
+/MC1 395 0 R
+>>/Shading <<
+/Sh1 396 0 R
+/Sh10 397 0 R
+/Sh11 398 0 R
+/Sh12 399 0 R
+/Sh13 400 0 R
+/Sh2 401 0 R
+/Sh3 402 0 R
+/Sh4 403 0 R
+/Sh5 404 0 R
+/Sh6 405 0 R
+/Sh7 406 0 R
+/Sh8 407 0 R
+/Sh9 408 0 R
+>>>>
+/Length 1596
+/Filter /FlateDecode
+>>
+stream
+h�ęK�7��}
+]�4���zd��E�p����I�.U�MzíR�?�䧏\��}���y��,����˟1���Hs6%��m7�arѦ��__/���~z]7����m�N��b�"e����/b~{U�V5v�X���䭯�\o��/�ļ~3�/�Wk����њ�
%3~��Z��u�fb[��8��ٖ66%�g+q��wV��lriwz���μ\b����Y�Dl�:Z�l�o���?|1C�Ƽ���IcR&�\Y�:g�m�;Mt�0�:E{�(�66�^7|�?�7[��������C���l��Н���]L��P&L92�}�.I}����=�fs}56�P�H�P�����3�Ȥ��&V|X��������??��2$��Yt*l
f����U!Ve?�EHH���`��������e�>y(�����q�G���T�q��6
+���
}>Rv�R�І��R�o�7�V��cz�ƀ퐱Eo�!��X��
=d�����Dlۛ��������8���i�v����S|�ʧ|w[��Uyͥn�Yz�;���]��3òv����ñU���
+U�������L:e[+dm�A��A�Ma1�7�h�{`U0]�+�"-��\\-@�{
�	-�P!���(ݠ�p}�h��tE��Y�c�l'd��k���@Ry�D�EG*�
�X��^tZRD[�w*Nl.&V���Qb]��zi-٘�-�"˦E]
�d-O�'�Ӫ�陕l����Vͱ��(GO��I}˘YJ�QKz
�����hF�ȡIѧ���nr��N8�l�=��{gS#�����8t�n����v�y0�<����=:��۳���t������}C�)e�Ii׽[��(|�5*��i��ZV 7��
�O^����,�G�O�2�Ϫb�+��$Hm�j�l@q�f��%�c���1ӣ�q�b �H�!�ԕ��˫J�b�&�x���_ޡ
+�f�PC?���F����J���A�5UA6L�I@� Z�ݤ|5�J�3�+֬MR�N;*�<�?�y/�@t��V	ښ6
+$��CW�o�4`���_I��O�,�4����$0��,Scr�x_��C�.� (
+@
+K�:
+@@���=G��)
Ն��|-����?���g����r
+��I��wg-�H"xd���K�ۥ#����G�0':P�~�q稪e8�aU�K�8U�� �TXLP��yi��Э(S�v��Ď2O��R�#k%�̔w�-~3�ZѠs�Z����P�g���:n|�Wmӥx{��:[��cA��
��oMV�r�.���o]��@m]��a�عG뻸�ɻ�G~9�ϑ�.h��s_w������`���B�����aHߴǮ�š����E���>�����A��\�Oƽ�.��'�U�Lt�@�jI-�2�ZЎE�,Z�$�eA��x��&iiB����������x���1=�ѡ�%mo���{s�o
+$�A��k`��i&��n�\�;��S��9�]P����>��@Ɓ�#�J�ѣ�v9ᩃ[���g�]��K�G���<!��>\�7r7����*(YM�����`��+
+endstream
+endobj
+392 0 obj
+<<
+/Author (Freelancer)
+/CreationDate (D:20160518202519+02'00')
+/Creator (Adobe Illustrator CC 2015 \(Macintosh\))
+/ModDate (D:20160518202528+02'00')
+/Producer (Acrobat Distiller 10.1.16 \(Windows\))
+/Title (Bosch-Supergraphic-CMYK)
+>>
+endobj
+393 0 obj
+[/ICCBased 409 0 R]
+endobj
+394 0 obj
+<<
+/BG2 /Default
+/HT /Default
+/OP false
+/OPM 1
+/SA false
+/SM 0.02
+/Type /ExtGState
+/UCR2 /Default
+/op false
+>>
+endobj
+395 0 obj
+<<
+>>
+endobj
+396 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 410 0 R
+/ShadingType 2
+>>
+endobj
+397 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 411 0 R
+/ShadingType 2
+>>
+endobj
+398 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 412 0 R
+/ShadingType 2
+>>
+endobj
+399 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 413 0 R
+/ShadingType 2
+>>
+endobj
+400 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 414 0 R
+/ShadingType 2
+>>
+endobj
+401 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 415 0 R
+/ShadingType 2
+>>
+endobj
+402 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 416 0 R
+/ShadingType 2
+>>
+endobj
+403 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 417 0 R
+/ShadingType 2
+>>
+endobj
+404 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 418 0 R
+/ShadingType 2
+>>
+endobj
+405 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 419 0 R
+/ShadingType 2
+>>
+endobj
+406 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 420 0 R
+/ShadingType 2
+>>
+endobj
+407 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 421 0 R
+/ShadingType 2
+>>
+endobj
+408 0 obj
+<<
+/ColorSpace 393 0 R
+/Coords [ 0 0 1 0]
+/Extend [ true true]
+/Function 422 0 R
+/ShadingType 2
+>>
+endobj
+409 0 obj
+<<
+/Alternate /DeviceRGB
+/Filter /FlateDecode
+/Length 2597
+/N 3
+>>
+stream
+hޜ�wTT��Ͻwz��0�z�.0��. Qf���Ml��@DE�����H��b!(�`HPb0���dF�J|yy����ǽ��g�s��{��.�$O./� �'�z8�W�Gб��x���0Y驾A��@$/7z��	���H��e��O���OҬT����_��lN:K��"N����3"��$�F��/JP�rb�[䥟}�Q��d[��S��l1��x{��#b�G�\N��o�X3I���[ql2����$�8�x����t�r�p��/8�p��C���f�q��.K�njm͠{r2�8��?�����.)ɩL^6��g�,qm�"[�Z[Z��~Q����7%��"�
+��3�������R��`̊j��[�~�:� w���!�$E}k���yh�y�Rm��333��������:�
}�=#�v����ʉe
+�tq�X)I)B>==����
�<��8��Xȉ��9<QD�hʸ�8Q�yl���£sy����0�OZ�k�(���5�Hݠ��>��yP�������:�8�����p���΍��Lg	��k�k	Ѐ�$��t�!0V�87���`��ɀ2A.�
+@���JP�A#h'@8
.���:�	�`���`��a!2D��!UH2�� d�A>P ECqB���*�*�Z��:]��B�=h��~���L���2�
��	����5p�����N��������:|��ó@�
QC��!H,�G6 �H9R�� ]H/rA��w(����Q�(OT��JCm@�*QGQ���-�(j�	MF+�
�6h/�*t:]�.G7��З�w���7����Xa<1��:L1���s3���b�Xy���eb��~�1�9� v�Gĩ��p���+�5���q�y�^o��ó���|=�?��'Htv�`Ba3���B�DxHxE$Չ���"���XA<N�B%�#ɐ�I.�H����t�t�t��L&k��dy'��|����V�"a$�%���(Q%�.1(�B/�%�$�V2G�\��
�i)�����Sj�T��)�a�Yi�����t�t�t��U�I�����[&_��E�1
+BѠ�PX�-�z�%�8CաzQ�E�o���Y�e���Y�U�gdGhM��EK���NІh�(/qZ�Y�cI˒�%sr�r�r�B�V�;r����n���;�)��2*\R�V�*�*�O(�W������)V�S�UVQ�PNUޯ|QyZ��⨒�R�rVeJ��j��U-S=���.Kw�'�+�=�5%5O5�Z�Z�ڼ��z�z�z��#
�C#V�L�[cFSU�W3W�Y�^����O�WkN[G;L{�v�������N�N��C]���n�n��m=�C/Q��M}X�B?^�J��l`i�58`0���z)oi��aC���a�a�����(Ϩ�腱�q��n�^�O&&I&�&LeLW��v��j�o�2�2�mN6w7�h�i�r��2β���ZP,|-�Yt[|����[�XNYiZE[U[
3�F1�5���z��i�w6�6�6���&�6�N.�Y�Y^�|�NݎiWk7bO���?d?���t�sx���vlp�p�sJp:����ę���<�b���+���Z���&��V���]�=ν�}���c��yO����n�a/e/�W���
+��W�x����+������}�|a��{|��Z�[�������=���O��>��P�4�407�7���&�9�$�A�n�0�;T242�1t.�5�4ld������+�s�;#��
���V�]=iY9�FgM֚�k�&�=%Ō:���n����c�1gc�b�cfX.�}��lGv{�c�)�L��Ŗ�N���퉛�w�/���p+�/<j���$.$�%�&㒣�O�dx��������T�Ԃԑ4���i3|o~C:��&�S@�L�	u�[���Uo3C3OfIg�����wdO��|�����;W-ws��z����
1�7jl��8��c��͉̈́��3�+�{�%lKW�r�����[�$
+���l��lGm�n��a�c��O���kE&E�E�Y�׾2��⫅��;�K,K���������h�tiN���=�e��²�{��^-_V^���O�o�§�s���]�?T�Wީr�j�V��Q=w�}`����嚢�������zԶ�iו��8��>���k�׍
+
E
����
<��h��ؤ�T�7���E����7�-�-���֢�����o��:�}��$�d�wZ�U�Q�
+ۡ����������΁S+Nuw�v�}o����j���Ȟ)9K8�v�\ι���/�]��~pq���==���/]��~�b�S�+vWN_��z��Z�u���}}m?X���o��~��F�M�]��:^��z��m���לּ302tw8rx�.��佤{/�gܟ��!�a�#�G叕����c��șQ�Ѿ'AO��ƞ���Ӈ��������f���ܧn>[�l�y���邟��~���_�Y53���r���W򯎼^��{����7�s�o��}�x��>���|�쇊�z�>yz�����������
+endstream
+endobj
+410 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 738
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h�L��OR���Z[[?��Z���| �"�!�GQZiV��*��]v�QD-�)(��S|dYb�������������C�}h���h��&4OFs%4GH�'��\z/dz�b�C�*O$��<*�J��)�:C��RC����ldeFV�g)
+�eEլP��e,)a	�K�p��Q� �I�gR�|#��$���~�?���'��²V�^�=�U_�i�3�{����v����������A�Ԁ�~`����72���s�'-L�����
([��uxV`�T����bg�Զ�ɭ�m���f���.��n�k�ѵ����\��W� �Gz�Po�F(�T3,���u6�z�Jm�VYkTVe��v�jH��)��5u���G��Y�uй�q�~BnxZix&3NIM/(-1ψ<�F��y�o��[�ɣ~���u�SA�3�=&�E��ܮXEw�ۓ�\Mrn��[)AoFt?K��*r�'KJ[Ae_�s�wQ7�b�ze�_7yW�}o,��#���H�x�Ԗ\?�~ב�8��ѹ\>S���X>͖;���򱥍���ù���1��M���%yb�{�w�͖�*B����|+�[��o�%��0��\
+�$�c�G�D�� 8��B^�g�y����N"�F̅��$mHb�1R��C�2w����5�z��F���_D��K�]F��+�\C��7����^,�E�>�}H�#���!�Q+��`Cda;£9r!8�[���[ �
+endstream
+endobj
+411 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 117
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+hބ�	
+�@��ѓJa���K�v+gƼ\�c���獃��{x�=�q���j�C�l�`l��梉ũ�`��q��[_������67n�&��=i�c�ˑ�������}�~�����
+endstream
+endobj
+412 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 174
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+hެ�Ia��9�p���H)%eIY�D����,�of��}��G�}ߩ�������?|そ/<��GVxl��N�H�n�;�B�E�����Ϧ#dT<��d>.aB�I��SS�4�%3��Ȃ���.�%�<��
+Ye��6��ְ��&�RW����hK��qO_�~�`q�^
+endstream
+endobj
+413 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 323
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h�L��Va���1)![�=��G)JI�DD$��J*�"d�]3�e���{^��wa����,��`�]��۫c����<*/����C+�o�
+?�߁�C50"5ġ��q��n�����!E$��<Ғ"�($���()=��,F*b�F�P�1T�����@�qHo��m���m��AtIH���h.!-���S]bHC�tϘ��&Ę�3}S�d������h�������`�fX���VnF����b/�[q��Gi��Jg��(��*��2�S��a��3Ou�jsom�A�������(�
+endstream
+endobj
+414 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 313
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h�d��Va�����ef������H)�-�Vm���B$I�����f��y~<���ob��\�|c���R���󖀧4�C����ȸOE����9���\G�Y��b�q���������1.�������&��vٱb�\���:��;�d�m[���f$�La�-K�e���jZ�l�曈���F'�9�0�7h�J�S�E@�JƸ��PH�u�R7�藟Cl�{D�K�Ek�h��t�6R#��6��F��Ԙ&T%BU�J�`Q*�@���w�r�����(��S2��[�O��l�a�
+endstream
+endobj
+415 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 200
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h��ċZ�p���1�)c��
+Q�Jr)��І6�s��w��C����ӣ[�L�#�h������oC�}m��l�f���dc6B�c�I�c����GA����]xc�_�f-t�d�$�^�I�R7��	)�K��*TX���JH���\<�A�%�.r.Y�˸<�{�G�:zmw,I$�p��8�["���k�؟��Д,
+endstream
+endobj
+416 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 222
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h���{OAa��3[��f5iEE�tq;E���B�6
+�/��Z�U�^������ߞ=,�e��<率�g|�-�&KN�J�y�b���
|�#�Ov<	�:�i'}�z<v��<o�u���������O����}�����n��	���2V��� ��­��PM�U��p�llD��H*��Z��c-�k�ܶ����H�](Itʼn^J��(�g�~��L
+��i<`2pG�h�
+endstream
+endobj
+417 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 137
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h�t�W
+1@�U)*�iNS��ޝ�$�V�#�y�Sx����_�r~��v��ʼ���S`�{�.���)_W��E�͹p)s���6�‘p��}�%v�f��
+�1��������}ͦ��u��v+�?�1m0	
+endstream
+endobj
+418 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 203
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+hތ�kK�`�`�"�ZH(�������QK��4�?��w�?��������S���{��FF���1t500ɦ�4�p��ͰO`�Y�����[�%4J`�i��3���*�k�+[G�m8�ܤ-j���]=}:@���ܦF��h��N�7���w��sN?��.�O�E�n�[�q[�t�����n��}�ˇ���Q�`���B
+endstream
+endobj
+419 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 117
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h޴�Y�@�ú�+ *��"W�l&|�t'3qb�FZ����
������ݓ���#�����^����֢��
+�C�������\E���31�NUb3Q���b�/Z��W��;ٳI
+endstream
+endobj
+420 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 140
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+hތ�1��wX�mq8��i”�ɶ�&/O|¿�MЇ���͞(b�1���=�)��2�,�q���R`�EP���*JU�SӎR4�&9��@[�QG�2��'[����ؠ����`�d%�<�`!��+����
+endstream
+endobj
+421 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 222
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+h���ko�P������L&�Y�[]K�����_c�����O�紎�>I�<��c�K�_��o3�1'f�L�9�����������;W8�����P��LHHHQ��
+���Q:!���m��H���w���"g�B�jv�rV�R��k����V��3rV���Z���I}0�7
*�Ho����Rk�J2^/^��Q����c���Fzz������Q
+endstream
+endobj
+422 0 obj
+<<
+/BitsPerSample 8
+/Decode [ 0 1 0 1 0 1]
+/Domain [ 0 1]
+/Encode [ 0 255]
+/Filter /FlateDecode
+/FunctionType 0
+/Length 163
+/Range [ 0 1 0 1 0 1]
+/Size [ 256]
+>>
+stream
+hތ�U�@����'��Zo)��]C8%lyo��0b<����~���TP��^�Kg(����ɣ������ZݠkXY�2���,Ι�����M`v���y�������3х���a��t�nnm�5�ժ?�Q�x�����]f��%��ߎt
+endstream
+endobj
+218 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 1600
+/Height 1600
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/SMask 423 0 R
+/Length 425911    
+/Filter /FlateDecode
+>>
+stream
+x����r[i�&��}:gs!;f2E�{cw�7)eVڪ,����_�ʞ=S�]U�<�� E��������/���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`��t>��?$w��_�՛�����������������?���������_~�������ӳ|�\�T_^__?~sr~�)K�������e�Z+�*�b)�-�+�r5���������E�v|z~���7?�����^����>y����������;���q������4_,G��3�B)W*�˕p���\(W��Ë+��\���ǥJ�\m\�J�z|R?;?=��x�{x���n
k}��[�?��������}׺������y��~|rv}w�/UJ��Q��-���r�P��W&_��
+���a&��ķ�ãp�r�裙B1[(G�&�*�J�^��ķ�R5��g�W7��g�ӟ�����������_���׏]K|W׹R����T9���|�0W����*f�{G�݃�����ݽ͝���ݍ������ֵͭ�����}(�v�v�3��s��b���r��z|]��z�V����=<���|�&�N^^_�����������_;~���l�T?=/U��J�P:�C`�+�
+���af{�`sgoc{guckem}qem~yynaq~a)��]X�������6zr~qiaqyqyuie5z�������������A&��7��J�^��FW�ƽ�/��.�Z�?���_������;~��w�r�R;��O��r�PNb��|��������[;�k[�+k����K˳�S�sS33���S�5619699_���䚜������������ٹ��Ņ�奕��������ݽ�ã�\>_,�븑bEw�g��חW��7yy}���������|��O?TœU�Z?������ţ��j�(��������������:��8=7?1==619:>12>>266<]�C#�5�GWxfl$��ƣ׌�kblbb|brbrjrzvjfnvn~~aqqy%������;8:���r�o��R;99;���I��&������?��Z�{x~_��ʕr�8_�d�V!�:���3;���;{k��Kk��+s�S�sSӣ#c�C#��##���C��C���pg(�38и?}tphxh8�ZI�5:>]���ɩ�0�5f�旖�W�V�7׷wv���2�wR,W˵z-�J������
]^?���������3���V?͗��R%�
�V��Q.����!�����]��ZZ[[XZ�7g��jrdllh4�VC��8�J���L'w���vh��e


�k4�b���ML�#X�ӳs3s�sK��+!�Z�\�������݋��0�U,�� V�Kݞ�O�nn墹T����?�������?�X��+��|1_�dBl��<��v�v���i���յ�����ə��0m5:64:2��VCCqT5b��@*��Ə��f�5�DX!�
+#X#��qx5>199=Z��C����������������������^t�]�\�\
+�X'��Y�Š�)<=�H~��uX�����`~���Z�?�\��Kql�+��V�8�:��m�i�Pl��:��437?9=3>95:>1<6��[�ѕ���R�������@H�sY��.��P��&&&'��g�������ͭ�흭���ã�L�(���
+����ã��a�(�����h“��Y҈U��]^%?��ݽ_:����߹����w����?cK��\1[(e�0m�/$}���������ŕ[M���}�S#c��ccaCp8�J��ff������U��2�J')���P�_�ɫ�ٹ�p��������������Q6�/K�R�Z�W���N1�r3��Q6��ч¹�gѕDX���F!����W���
+���ϟ?���b��UŰ$������av� �cO�\Y
}�3��I����h3�llƱ���sVɕ�W��Tt�/�M�ÕN�Ov�W�����P�>>>9���?��������«L6_�{���'�秧��W�g��j��/�3�B��*��j�Š#���i�v|}s���������~������\?;+���\�(_ʄi��a�p�ͅi���͝ݵ�������[MM��OıUG�@{��������*�������J��+�M7��T��H}́�����j|rr&�^-���on����f��b)�W'gg�W׷׷�w���w�7w�W����Gˆ .̒�ʵP�ur]��I�I�e�����?��?�����ӧ��Y�\������=_8����2;{��!�ZZ]�_Z��[�Vq������h��=^�K�~sΪsU0	��Q�o\=����$�j�`��j(��G�F��'B����������N8d0[�~��q���_��������������O��o�N�/˕�\���[�J��D�FV�R�����X�����Y~�����׏�'a��(�o�V��Q�pp��=<��
}��K+ql������������g��+��kU�X�9�ƒ`���[Wt���Tr��/�m���҃���#ãc��!��_\
+�W�{��\�T�7��//�nn�������??����������ы��R>�d����vR,ג
+���K-������}���������z�R}���Z��k���a�Ў�2�݃íݽ��Ս��յ����1��cC##���}(=0���LB�f�U:Y	l�W5Ҫx�*�
+iUtۗdV�+�h���+�������d8y0��5��2��`�N�'���W7ww��I~����9La=��=D���K�L��͗��J�VoFX'�j�T=>�h�H�cG������D8@�������b�r�-����k�!���W!��?��m��on/�o,���-�c'�g�&�F�'�GB����H<m�l���2�7�V�=�t_{10$W�9U���K��W}��e}������{��������ŕ����������l�X,W��'�g��a���1_��o�O�/+�z�"�r�r�R�����q��裟���������П��煍���ϟ?��_����R�z2�\(c?���jg�pswo}k{9�c�[\�����������p��=������Ju�V��e�͕�Μ*Φw���񕼸���a��==0}K�CC�I������������v\�+�ʕ�Ex~quu}{w����������Kt=�"��Exrz^�Բq�W��,�:I���j��~�}�^���������7tus�/�/��˵�|�|�����Ut��V�{�1�[[+k�+��Sq��������P#�hdV������
+lMXu�U�̪1j��vT�����L�]o_g��nĊ˲���n�oV`E�����DH��V��V|a��������y�.��߇�x�}�z||{�xqys\?-+�|!�/J�r�^�U<�oVj�ϟ?Go��Ó�+��������·�Wס��]�b(w:{���\� ��;�l��}�[�c�ff�
���*�V��֨U�R�!�T���X5�l�Y���V�!�p�iU������޸�7ձ��9���S��D8<}�c!���[X\ZY]�����;8���V��~vz�+��wq~�������O��o���/��-�r�Q�U�޺��aUj�"���Ol������Q���!V�b�R�Kql��V�F����A����������ٱ�������PlZ���*=���ت��g�[CV�V��
�Tk�5p���s"�ш����K�㲾�������>8�F����Hhr�����������Q|a�Z����_^_]��?<==��W_��󇻇�뛻�Ӌr�8"��,�j�Z?il��X�^^��������?t>������r�R�R͗+��\��~���e:��\Z]�_\�c����ɑ��Fl5�V��=j՞}j/�%V���y�wOX5�덣���woۮ:{���Î�
+;J���]1Zc�0��󫱉��陙�����յ�ͭ��$�*�j�ӓ�p����C(r��������V����q��X�f��L�T(Wʵ�8�ja�-��ǰ?xqu�������o�������U�~�/�s�R�T=����0p���fv�w�7�Bl�������H���l�����V���#;J��ZG62����_�eV��*���m��ǯL���V�d���1�������ﭿ��>808<42:2>>>99=�ܗ�W��FV���������������9�`}���;�O����Z;)�*�|!zW�-“8�J��˕Z�Y���?������|���·�/��R�P
+MM�R9#'W�����������r��>��8=;71==:19�[

��j`0�&�j�V���z�;}��/V���ہջ֓��O�ܓ	�d+0�d�kDR鮪�v�V�q+ye�)�I~���"������x��(z�J�����������]{��K#�zx|}swzvQ��
+a�2z{K��j����",Uk�j���ʟ%������������J�J5./f��*>Cp�0���[������\|����T\l56�Va�j0����PS���7}V}�C�C���oPuMX���c���ޞV��������Z9L�{S���F�U:�Ә���[쬋�Ot��%g�BV\�>2<2:>9553�	�+��Q�{!��Tk�'gg���������}a�|x�]��_����o�����\��`[�V��[��x��z|zys�/a�P�������?�������|��/U2�B&_HN<h���cCl#8;�093;>15:>���C�U<m�1j�D���*ݹخ�j��u�Իv�U��ʩ�5��+���^���[�7R�Ɔ`2d�j�J'�X�N���j�Yo��3Z���xr(4a��%3X��˫k�a�0,��j�~r~~yus{���x����19����!l�[��B�P.VB���a���_?�D���E��������?w>|���T��K�8�
+�A6�L[�ƱU�Ǿ�>��<3b�p�����H��8��*�j�D�����/�w��)��!������w�8�����I{_{70��Ol���ڛ�}�s3ZI0�|囃�/��h|Z��@�E8<:6:��΅-µ����E�Ɇ"�J�~v~'X��q~�����맗�a=<>��=D/��[�G�B�"�ԚEX��=zX��N�/�������~��?t>||z_�����\3�ʄ%���1��q���������|�c����G�i���@��Jw �,�J'M��(T�j��W�������kM[������P{I�?��0g�nP؟�J��ds�^�6�Z�:�$p���������j>�(r�ފ�
If�f��W���7�w���b��'�������Ղ�����Sk����~z^*W��R6_ʗ*�'U�q�uR�#������e�[;��E��������:>�?��e��L�(W��d�*��n��om�ll��ji9��OM��O��b����j`�7F��qP��C�;«���$Uo{��'N��̪u�Qo��a��{������;��:o��V�����VwN��C}y"aR���ੁ���=�E866>95=7�����������p��K�Z\�~�����+�!�
+]����/.����C�U(�a�Y��P�U?�����/�����������T��K����Q6]�������~���6�V�6WVg��fg�Cl51<:�,�L77�ڣV����1�ɄU#�
+�R=���w��qB�uOO�aO���N��*9L0��Ӎz�/N�Kun,6J���6WS��Y��s�ۇ�Zۅ���R͟=)�J��$g�+.r3X���|�T���"�뛻��`%~|}��������ǧ�7�a��\���U1WEX���q=�P�V�������?f������:�s����r��/�����|������ތ��VVfBl��&&��Ɔ��V遁���lRg{���W��ۨz:
+���
+�눭��U5«���
��۪F�!���n�8���lOw�Z��k�]���٭T_��U��=�>��d��:��������p����dX"\Z]�X�=XG�\!��N�/.�oo�#X��������������E�\���|�PN��Ok'a��R;�{��gN�_�����s����¯��Z��[����r���o����?�動��a� �k�V;����ql������23�0�اF�LJG�´U8C0�V��<����:40I��̪���=����2��m�U��*\�᫞��{���	���8.k}�u�����T��0U{y�=�>+�n�S���8y�^
�w�6Ңw,z�FF�F�'��������z`��"�J�������*,>==�����1��*º����O�_E��<��49�0��:=�������������/�t=��*�Z�R{~�!W*�僣�a��!�w���?������]]�\Z]�_Z��[����b��с�ḏ��Yu5�7��PţV�q
{oRo���װ���B6��S����V���}_GWOO�c؟Dd9U;t�M�-�J��t�+�'���ɝ���=H֪�jJ�qa��������ۓ
+���8�����[XXZ^[��ڊ�"5Xq{(r��{E����a
+����SR�uqU����J(r������Y��4z�\=.Vj׷w�����O?��s��ϟ?W�O������r����3كL.�v�v��v�׷vV�7Bl��<�8Fprxtlhd4��c�7��nbo�Y�ZsV�`����*�j�������!�׭��’�׽��U�qYVo2m�:�����1p�<а��Au�u�1���9g��h�JwD[�f}V�m={gx��x���g�o�?Y!�����&&�ff��VB���ܣ�M�Z���F����ۻ�����׏�$[��O�o�ON�K�Z6_���r�\=���"[��O��"�x���
+������?�غ������i��
+�j&W88���
�d�� �V��ˡ�}mnqyjn>����V�3�Q����ͭ�����8�$�j^��d=����׺��V�������t_��
+�z��ǮZ�V�T]���i��FRԗ~s�`xY�O����x>��}Nbkj�+�J�ͯ��^��+z7ڻ��V���k�`
�khxdl<�"�{��W�ַ�"�l�P*׎�g�W����))ry����7��I�#�|������˕d����"����r�^(U�/��I���_�������}����O�*�z�R)V��Bi�0��m��m�l��mn��m.,��-.M�ΏOM��c�C�p[��J�v�y2a�4����V�U�}=n���L���Ts��9[�UgB���{�*���b�f�Uo*��ol�5�쌳ڋ~��T_{O0�׵�ب��m�`����`�e����T��_���w�Z�_�J���3]���t�_

��EX�kaiy5�`m���M��Z�����������1�����$Vr������U���P,gr�\�R
+#X'I�U����"�����O"z��&������#�J�V?ɗ*�b9�݋3��������z�Ǿ853��V�`<m50��OR���=�Y��7Ӫ��IĔ4��&9Ug{O�q�k��sC�;�
+���7N�qYsȪ[u�`u�W��:����g����z3����=����պB��]˾���}b�Cãc��ӳs��K+k�[�q
V�T���g�W�������Ç��׏�>~�6�������������r�E�",%[�'a��8��*�b�z���yD��������o:㌢��R�5jՈ���7�wV7��W���g'gf�1�c�Cq{Ȭ�1���U���DUo�����0a���J���uVZ5K�i�W�J�w_N[%O6���x�V`#���K���jdY�f�U���qN��&�Ju�
v'W�1�TG�Usެ�>��⩾t��ݽ{��c��u
t�N8��`
�)����ѱ��陹�xksk{��0��~�����������}2��!����ۏ�և��ǧ����-�b9�"<#X�'���o�V?M�����?������_�׿��V�Z����ā�Q6�͗��9���:��n��ű��R(�Z�����������GBx28�N��E���с��*.K��
l��*�FN�ȬތW�]��>�l�%e����q�֖b{��'��j�b5㬞�fV�=���&��nk�O쬱jEX]����_Ld�u�
+��#X���V�����T�T8�����,���ɩ�����啵ͭ��d�E��o���/_>~�1���E�������u��$_,g��\�\��*���q�"��H����������������?v>������R�<:��Q���L��b���������[MLM���>�$�
+�VI{�^��Pk1�����yh`#��'�z�+~�T%�]�_Ł�W_��#�V�{F����T����;|���y�(�
+��ԛ�����ts4+	��o������������7�U{�je�I�:��V���n���J���'��kxt��E�(r���;<���J�����������%D���7�����O�~x�����������\=�JI�Y�6��맕j�T=�����c�������)����o��������|�r���
+���A&�w��<���[�
+���J��>7>9��F���;��[uL�2��7Gv�Yu��l�5�տ8"�k0n��Ӫ��Y�[��'	���ƿ�Yf�Nf�zZ
�Ͷ��ӽ]'��u,6«��W���ds0�]��.�JE?�W������S��G�K�}9�oMv��_3Y�l�J5��w	���_�)����ᑱ��ɰD������������Ɇ�z|F�no�"�p��ǐ_5��>��>�[����R�C�+�
+�j9�"<9��@9�",U���/����/�����?�������T�e�G��~6��Z��>��p�������l#���
�VI{�O�:�����U{C��ɪ�������޽��]��U�L����f�U�0��$�+��)�F{o<y��:�0��zR��
��ō�/?Ա*����+�jV��;C��b���{����_G���]��ʗ�W7���K
v���z��4ku6\��ꌳ��"L�B�50<<�E8>1j��VV�I���G�\1)r#Xwq���/_?~����O�|�ta���z��tyuS;>-�-�R�X.U�����K��ԯSC������^���C��Ӌ�j�~��f�a�*.cOb����͝��ͭ嵍���مp�`�co#8�Z%c?��O2���9aVI������=��i��|;}��O @$@�J�V�B A�4�ݷͭ[�I��{A�I�wUu������7�ug������� ��A2�$��9�d�
tq`��"x�
+:�"+l�	�p��U�˼��bhA*<��o��VBHPYi�2��X]e�R��iYbRpXc+Y�&z�6�L�O�O&�y��BK*�+�%��J�[Q&�>��L/_�KQp�P�P~�‘h"Ij��F�y���E�'Ău}�[�����noﯯo��/��O���&�Eo0��1�E�ɺܧt��dvx�S���@ �@ ����x���d�X��8���I{����p{�dT���-S�\<����m��
+�T5ٌ�q����V�����p�W��&�Z7W�&v�V	B�����Z܌��XE�u�*��@mqŧ
+�1lH�Y��Jyì�uY��"�]�p�Ǎ�F�>�/OΎO�dzy�٪���J%_.
#����
t�dB���̸��b���7-X��<F���*����a�ѳ��P���h����_R�
�`=P��������m6�r8�'d�挦q�Sy|t�78���A �@ ���ī�g�����[��z�q[5Zz�^��V:�Vd�`,!}�~?.���C�����V�`�l2+���H �r��4��t�u��.l���ȭN6���$����7�.�jh�V<HW\��+��.B-qn�ů̠�[��BOo����T�њ.�Gg���ٜ2�r�Z�����K�D*��T��^I�|C�ĎwY$Z�E1���'�^'-X豼~��‘h���a�����#�,q
�>-r?;������,¯h�����).š/6�Io0��,B��5�Q�5�Η�?�@ �@ �tvq��o�n[�^�?$تG�Vu\l�2���Q���B1�!cc�@8�
l��>v3
+'`+��YQÕ`��n+7/���9�3+f��B�w[�� v[9M?���2ۮ��"�b��B�Lʒ��-�%�-�J���&��%
+��Nt�D*Uk����x���d>���\.U*]/�J�b1�J��!tby6PV����Ã��ge6\�+��b+��dk7̲T��8�0�
+�a,�k���r�R���p<��羳�wpxtrrv~qq���`�?��=�"��㳭�=s�?�)BR�5[�&��l����>��mH�@ �@ ���m����u������f+��b+��^'}�z��$�*�����c3)�`�"EvSl%&+�$>+n�ڠ�I�Pvl%.a9���͚�-X��J�y���bWY=��2�	�8�b�W�'��J�,�m� ��Ɏ�w6a�J����=a��������������l���b�h�r���B!��U�[��.[�"\
+y@��d�KQWw��PKa,�K#F/t�����P0�f�I���hu���x�=Xۻ�G�'g�,Ex����#ZAWq���k����)AXKl�Z,'d!Z�ѧ����CA �@ �kӫ�]\V�������x���	��V�N�ٮ��A#W,�s�D:cc�[�[1�=�J�����Ҋu[	V+�4�պ�Y�Y�r��.¬��u�}�w[��"�r�J+k;���P�CI�@��fZ�&-�%��,�Y��utЭ�T���,�wN�/�/����"AUŲ^4�|�����T §T��I�2�W���>��i�t��Y�jxP�*or����Y�$H�����P8JF����Q�؃5�-7��i��)+r��� ��ۻ˫�ӳ��|�9O{}��&S<�p�f�'��t>[nя�&��@ �@ ������˫��x�����0�̚�n���ت�{��mE�#�Eb�`�[y��mŘ	��@�)�Mr�J�\Ѻ*�5(еj����[u[1���eZ�L'�e�bPKQ��c%
+Ze�`�5��]J��)�r�
�4c(�Br�LgZ��bs������r��S2*�|!_.qH�1�T0F�V��B��$��4��%��],���W�/�#�&���
q��ǃ�z:���38E�������}k�����]�_\�,�"�&)���흽�l��-X��h2��'�%�E�-X�39��g��o~zA �@ ��I����N����t�SZ[���]m6+�F�R+��l������L$�E��P���^/�cg؊Z�x
�[b���6��d%��*u[�7�U��73��=].����m�X�W�W�Jّ��K�u�[E�bG�G.��#��P���$�"�V����>9�<9;_nm�Z*�ɕ��r9_*e��D*�����V���
���A�b�RޮXv,+<�v�${�����6W�]X<��ÑX"I���
+�`����x���/.���� »��{�º�{@[�/��N6�w��]b���X���k�����lgo��A �@ �K�8C��ׯ��Z�J�?�6[�+��}�	��L����b�t$'cC^��ι�(���0��d��_����@���q���J+�d%�B�쌋����V�+ڲ�A�e��Õ�s�2���:%�.^�Ώ����7���D���+��a}���bkkg�X�Z2�)�J%�(�ʙ\>�Lbl��褹�ȡe��o��ؔ��YB�7���J�u^io�ݿ5�мIQ!�,������P$O$әl�"�Zk����h:[.�vwwq�;z���׷www��O�O���W׷覽���rk8��dw8MfĂŊ���9������3�� �@ �@�������F[�VMܬ=���^�;��
+�[�Z�a��Q�n+��O����/��|v[iܴ#[���^iűՆ�Pݚ(x�D`E.���\9y��bh&{=�l�R��Jʯ��U���D��6��$�۝��F���p1�kIr$���^�d�EtY6*F�Vk4����c+X�{��*B-e%��\ɫW5y�����vme_*hw��<^�����p#�T:���*�z����x~���-r?;������������
+��n�/�nЭ�;{�ٲ?w�C�"�Z�G��l��ɂ@ �@ ��ҟ��'�K_�V����O�F���Slզ؊���KF%_*g��m�
+��A��/#���Vtz ��2v[�&+��
��/e]�n�r�-0��X�[�Lo��d^lżX.^?e	9�"�*�װ����wK;��E��b�P<Z�Z�+�젮ml�Ɠ���L>_ҍ�WF��ĸwK2G�+[`P1��@�,EU�jNP^���|��j�9jP[�����4r|̯4�����A��R���Ч��ONN�//�i�WOw��hKn���{�Q�?�)�ق�+�"�-�cܩ�x�� �@ �9�ӧO�կ_�N�n8��Z�Zh��Z5[U2F�P6r�r&WH��Q:F0��[��v�E�����@���F����Y��@	$��p�)ٲ�v��1�V.�r3��+%Y��f	h�J���A+!���Օ�+�,��x��&tBp��,�{������yM������t6[�T˕JQ7����Q�%[��U�.v���A��]k�Ūv�-�,~�Y��U�&.n�z-�\�Z����,�D*�+�t�Rk���3H���>:,X�̂��D���M�Gt!�[o0�)B��X�p4��Z�G'�C�
uX �@ ���ׯ���ޠ��z�V�ǭV�F�Ro�1��s�r:����x�`4���V��PR����ۊ�*Z9��g��J������L���{���ؠI��vt')�"=�;1x%Ӣu�" )X1��+�L��LV�.+�Un[���V,�嶛���!zz�	��E�.�LV��b�hI�8Pjq���g*�yy���v3�B٨��j�X
+�#�-�u^		A�a�؍X�U�.+�!�&��E��ؠ�+T��w���-X�����b~V�`�%ݨ��_�?M���}�"�,X�ϴ���������|w�`:�)��`����kkJ,X��l8�.�v�/o������A �@ ��>�W���w}������N�^lU/W����+�R�\"�	��H�y�~;�”Ɖa��6�SV��S�W�\���i�����Y�KƯ�o��hB7�x��@;���GR\bb\K6reY�Њj��b�]f�;��dA(+��K���P"�n���ۻG'g;��˭-_ �y}B[��~ò�
+z������!_*u�d�j5����Y��f<����d��}����[���En�y����,�)���+��ڷТz<�Nj^�7�g�‘(N���2��j�;��x:_���wpt�-X�W7�7w���/w��7w����'g�[��ɬ;uz�k<�3�E8dzg�+���@ �@ �_���ī���h:��:$$دfU#	A��(�m�-S9\l��>�`��c5Y�$^%�Yao���G��XY�V��X�۫(������s�EZI*��N6��f]�h��X
+�j��d73�Y	�o[1��cV_w^�a@���F�����u
+��#܄�h拥\���d��fr�*���F��W����L�\��*�r���5��-���+�M�ī�h-<:�h�h<���h<A����!Tқ��m��;�x��,��BX�E���/�)�D*�͕�F��h5�������:u�W4Ex�����3)�z�EXh��rk0���u��d:���x�O��d�\·�@ �@���~����_�.��Ƴy��n���ۊb�F�Ro�5�ǎ�U2��}�Q�������5M��؊v[q`%Z���+eV�Mm8l�j�]n��+\�̊`+Ω��@��J�T�
+K�=�2�N�.ee�lu��`J���%��H�K���{�R��?Xn�t��V�Si4�r�T�5��
+6P)/��m,!Q���|������)�|���
+�
+�{�P,�R��L��zu�d�X6F����������q2����,�m%N3\�r�1+�F^���BUz�ъ��z|>_��`}���X�+�:E8��ѹ�����
+���H�;
��?\]ݜZ)�Ig0�q֔���)CX�Ţ���[�~��@ �@ �?�����Ǔ�p<i�q<����y�U�eT�%c�L��`�*�	��	AӨ���;�l Vn�d�:�\����L�Fi�ƆI�6(�a����>v��N�P�N�����|%���uI��i5V�Sy畭�rg�����VIU���f�}s{W�V��b�T.[
�l��R�Z(��HT�E���eY
+�O��L��W�r�R�����ϜW���8�Bw\sl�H��x6�?:9;����m�;�V�R��
+8�GA�U�ō[�p��� Vt�ʃ�d�Jfz�>��O��C�h<���
+����Vg0�L��ͭ1Ex�-X�O�O��Ϥ���w��d!ZX�pNR���x�Nf����G�����|W�@ �@ �ϩϟ?�l��;hwi�U���Xت�0j�"v[�ӹB"�a}졐74�j�{0@�P���C�r���|>�S�Wf��Q�Uk�nwa�!$�v3Z%�n�u���hdOb
Wf	�l�Z�M9m�,y�V�0g�%v��TZ	t�b%�ݬ%ٝZ��h~���.�����\�P(���2:��eT�e._���贻��0~�#����p$z}}���J�r�
+>�Q�#Q��7�Z�4�_#:�.I�'S�zs2_���]\m��6��V7��"~2�L.O&C�Ad����z+�s��&*��bar����͗E��0��0�Ҽ^�?�i�{"�>���n�'�C��	)r��?<>==��)�[ڂ�����������z]�����a��x:��Y�Ԃ5E���)k��@ �@ �??�������q��kv{�f�a�VM�R+�������Hc+_@#�V
+���H����^�h��ɕ5�)ԭ�b+'�T�p�6n8YH�n7��}7�be��
+���UEy�Ã���2s��(�E�Te��ի֬@��)����������s��X"����f8͗J�� �ϕ0�Ž�D:�z�b~P�Wb�;�D�Q�>>>�:�l�X&��P*�A��"DO	�绥x2�>�����������^��*W�z
��QlK$}����VbQl�"]��o[��4�U6�ų����5U�h���GO>���X2���Ы�+U��{�k� )�ã�ӳ:�[��)�z||�����E���N��ф��F��W4E8���M{8Ex}s_  �@ ����$����n�huk�6fV-Ƭ�Z'�t#[(���xc+:FP��b+��T�S �r�l�E���.c����@�R�FC�4H�M��/��Gv8qH����j��M��q]2�V�t�v�ڝ�RٽU�n.��E���4>QE��z(�`E�X�/	~-��r�����l��������'^^^��zQ�ˆQ�T��R ��I�pw�p�[8��x�[;��''%]�UZ�z#�z�~E��f�3�o��_^\����7Z�B�\���b._Hg��d��6~I�vU��Zծ��AU��)��ԩEh�*$'M!,$�¡p��X"����������l�����||rvN-XwĂ��]XOO/�����ꆤ�ƳEo0��i�p!�"�k��������@ �@�Z=??���_�.�v��i�Ѭ6���6Z�1��Jz6_Les[���p�j>���a��'�aleO��)�
����@������5�P���}�
+:6lQA6IPr)f�O�V�٩�a�bk�ZaPB�9�dۄA���a1��� sd1j��Wd���.W��A�,K��"T�?�����|0u�������Ggu�X�?>Ɠ��z����=���j.�J����
+��‡EoA<���N&�B�dT
+e��흞_|�����������a������r�PJ�r�x��p�ƣ��t�`Q�"��JlW�ӥj�-����jOz|~��I�0��3�\��W��Z���ƳI�"w������B���������k��&NN�,��t2�R�#�"Mf�}�@ �@ ��l�j��
G��e:['S2=�%&�>�2#��%�a��"����R`�Eb��iV�MV��M��VB�>4P0V~��+����&	�t[��R�v�Ĭ�*�b��eᬕ��$��ś�x��da+�s��d
W��Rr%	�KR��CB���_��z:�ʉL>M$n��鴛����ǭ��T.W2Zc�'U�W�0M�,ӎEᒕ�C:��n����Ff��R�R�Mf�F���f�e��2�B2����>@&�׳�S��|"EL�݋%����v%��)��[�+���
+
`Y�h���i���E�2�"�.r/�t��lw{��d�\nn�E�W�ȝ"||~z�������.�����ᘤ�Y�s:��w���?�O?��6 �@ �{�O��x�����非�����p�~�W�Z�+VlU�cvQ��*����p4�����F��)|0]C,!�2Z�r��Vtb��I�,f�a��L��]�l��9Op͖t�I���J��~n���y����7�A�M�2��Y�b\nE�Nh>��e'ss��4p10e%�=U���⼡�y����_l.�m#�Mg����B��!��d����W�Z#��Ы�\��dM���ч�1�!�Lf����	:&I�M'�e=��'R�h<�%E��`�PI&��*�*Β�-+=�oc�<9(�)�;H��Y���Z�1���|�CK��‘h"��拥�Q�7[�ٟ�H�p����?\^]�I�l!FX�/�Ϸw������d��
�]2�p4���d�S���?��1��_; �@ �����_���F�3���;�����U�Mj��c��ZQ�䊥L>��dc�T(l�z����)�m	c+�me�!��Rf%�
�}V��V��2S����p�"q��]p@іx.9٬C{u����J�-Ӕl�	�†�AKu)��W�̓���)�%TBە��݊�:d�1�ZVk�o���n�ss�����R��G.�KQ7ܮ�����d&CF��H��;(���*�����(�e�__��r�ϯ�6��"�
+��B!�Ϙ�F�N�V���1(�(d�-p-���4���i
+�G�Uʛ:wji������x4���E��D��dd�EH�|�����xtrvvyyEB��W`Q-º��:<<Yn�&��E��KNf�	�E���W��vpx�? �@ ������w�]�Wѯ�v��7�v�n�ۯ�,le��J
Wp���L$��#�P؃��Y��d2��$�
���ro��V����<�a+`�mq0`EmZ$u�dV+�
+�l�@IvJ�ؠS�����da)��J�"��V|#��>�կE��x)2�Uz��T���=8���J��y�,Z(sZez؄����W+�����5��ë/����N�����w�$EC{z��ۻ��r��0}�TK�J8W�^��N����f��R&����x2����+��n����`84�u��-�X��U{�	t+�#ke7�֎e/(V��ow��W4T(k�Mh���"w��|~ D,X�h<�g��(B�"����������`]\^]�ޒ!�Wh�x���;=��;�)��h�����t��)B�e��E��>|�_G �@ ����x��ׯ����Η�M��zvlU/W����~��>v��2F�����$M1�����a�!(N4��xT���6Įuj��U�[�c�6X�U���"�U�@1f咄��"��̺uI�I73(�]X�s%K�Z�%��6�p�\]�xЩK�3��xw�������|{g�?�������:��q�q�҂,�g��S��'Z��i�׿�?�o�]�z&�+W*�/����7��Q2fT��f��b�j�\!��Y��)���bK�ћ�$Exu}��ܤ���)V8���d� w^�€B�P[>Ȼ��9��9�{���h	9AMS4�hB�V|X��y������P ��b��J�z��x:�on�������
+rg������绻���ۓ��m�"��2���ń ,2�p>ij������@ �@ ���x���+n�nwѯ�v��B��6����V+U�]���X2�'�[��W1����)���"���m!A�*�Z���h6�����:sX٣��\m8pG#��sZ�+�4%���v�U+�X������r�va�[L�IQB�H���=8<>;?:=�������l.��e
+�f�3�L�q:�U�^~4�Tlj����t�Jn��.���%��H<��?��w@9%	���ퟜ�f�a��
+�ē)�"�l)BŖ"������z�P���S��,�u�"�Tk�PH���qKzC�V���
����ɲ���!���d�i6��/-[��f�b�wj���
+�`Eb�d:S(��U�k2�/6wv��O��H
���-XO�_Y)«���M�"�S�5���Y�aMG����=�\nm�w�@ ��j���"^���+�	��
Z����:�z�Y��
s����R�l4���l��=$hb"<@�U��5\��2��
t���V+>�5¬ޯ���j�Zg�����	ø�v[�Z*��Jv�l�)ٓ��*���7Y��VA��-���DZ�߭����B����j���r��l���$���2������p<�
Gz����Xs	-�Ŧ�q��eвX����w����nw�E����?~���D�$:%)�H\]ߌ&�L���C�RE�G4��^]e[�LY�����|�����K��+�\�L>0^���o$W�o�Vx!~;$�${��X<���z�A�?����*��+
+WyS�j���鄚�K��GKE�ǣ2�1Š'�,BB�п�����[�@���_^_]���=�A��/�/������/������^�>�EH,X[ĂE���x-�z����@ �@ �צ��[
���h�lu��~��%تY!}�:�c/�3�B2��&R�X<�j�YQle�]�r�q[ar�R�N���J�ub���ޯ[[� �E�
+�=Z4�ȉ���(Ia�JR�&n�����A�f�Rx���lW�tJ&Œ�e�2#�V�:���\��'���f*�-���L�r�L&W*���B	/���?�{�P4�N��-��x�L�uC�� o�B+������v�`O��s�R4��|�Ģ,c��6�N�{}s�S�@��1��Y��zK��n\�0
+�sţ�?<n�줳8�X$�%S��KS�o#�6���1hl�rK^�'[(������Ó�����t�VV��畅�����(��Kōd4EHgF�	L�0��E��x�XnaN^^���#D���S�O��\_ߝ�]��L���pBf�G�9�`���+�)��@ �@ �צۻ;[
F��p�hu��.
	V�-��\l��"�V�t&��c�x�����b���I�A:@�c+b�b
W,��tذ��9V����n�
Ȳ�	:k�B���$ٖ
+4'	2f�.��L�����,�ŏc�/Y��Y�B�U�
+,7�#�oW�-XfZ�v��Xc�j"5��h���܄_0�l�����Z-
+%ә���*�|�Tk��Io0Je��χ\h�aY�A1�GA����/���������B-;{{�\�=��Y.������v����J7�Z=�Hz�~I�<�RJ��8�dU]sl���Rk4��r��*%�ET��
+	*��@�Y�c+�Fk^:E���ǧ�'g[;�C��4��l���b��$+B=��b+�d{��ʤBB���x!�(�A�"�%��-��'����|s{wo��������?>=�-X�a]ݠ}����7�E���DL�H�p2[���
N��7�@ ����~I�ت��u�F�SouЏn������
+#H�U:����1����k��ȳ #�&�ʴZ���eV��Vk+���zo��i*���P���ӑ���ʹҾ.��$��$�c��9��J`S�݅�r���,���GJ�TA{ǻ[�K�2S~.�;����|[�;��2[,
#_*��j����%O"�*W�%�]�V{��p:+0�ĐM&��[�Jx�DX����7�Ln��S�L�\��^��2�Z��-nn��>AXU$��GX�$x��:w��,������s*�EO[�T�J5W,������b+�ĥ�%	}�О�L�R�'�Ó���M\k?�
��s�-���\"���b�X��5E�\��nvY�<��nչ3l�zH�3[�4<^�����p$�	�`�t"D�W��|���Mk�.//���#��gӂ�S��Ϸ�4E��)���;'��l1]nM�hl0��f�������f �@ �K��ϟ����Dl5�N[8ة5Z��
+]�F��c��R*�O��Q��ݧy�A>��-�N�D{�i��i�`
+�m؊��D?�����X�`��_�l��t�d��*`g�A��lS��%ّ׷z��Y�o����D���n�=T��i�ϥ�J�ם�L.rz^o���b�0ʕJ:���
��12ί�/�����t��9zOcɤ۬��s�)���o-X�4�o����-;��R��=<>�����X��r�z�Ǔ���5�!X�*��mN��z�u�-�}VO�/{��dJ�T˸��>i4E(3��&���C-U���\��MgG�gW[;���=�J���ҙ,�Vј?<��wbf�>RP�l��*�+Y]-��\��j������P8�'�L�W�z���
F��l���3��/�nno��p���+CXO/8Exs�v��ݟ����S�J��Y�St���]�N�@ �@ �_�~��Y������r���6��j�]k�)�2j
�VG?�e�`�\<����p��1�n�T���۽!԰��@�m���Vi�WHݺU�n�u���Z_[_�$��n� �{I�4euXq�%YW	��^�7�+ˠE\Nf���C�m"&;��ݫ��Yɮ� !c�y�c�(�A+B(r0��]��+�ƻ{%�@�N�D������}��@0����j��K�^�5Ƴy������q����B�5���P�.������w�������|��>����_S�����+����/f�yQ�K���Ro�cq�9Y�e�>)�Rw���;���>��h�
+$Eh��_��(m���W� �$k�L.�hw�����������n�߯5[�Z=W���d(�V+6����ۚ�u%E�0B�v;�b�E'�$<�j,](k<E��|��Z���D&�/�Q��noHR�[;�G�'g�؃�N��������J�������n�ONY�p0F�b�5G�.6�Ă��L��6.���݇o9�@ ���Ç�o�U�ޯ5ڵf�X�0�ҫ[�B1��Ɠ�p,�D����V�#{i0���N�m%�+����;����c��*�[[m__���
>O��\��+�����b��,�\��YQA�M���PRĴ��,R���yY$K�w]��l�������~��o�N:��P-�@����������R�h��+N�3�� �@����7䊸�	ut@E��n�J$S�}ģ	�z�0��p<�4��@=�[�u)�b�+YB�,}��)��t=�}���w������zg�J���R��+�Z�|~V���ob�B��[�
]ln��~H��F���ZK�
+@�x�s���V��r������~kg����z�V��'6c��g5�3f�	�+M��es� ERt�d�\��k
+P���X���S5���j,E
+��$E��5X:z��߮?ij7wvp�;�`�p��+wa=>>����'��m<\r0�i��Z�(š�Gt������@ �@^z~�M����Ш7*�V��&e�
��u�A�d� ����I{�#�Tx�
	����:�6�VfB�!�Eo���0�Z���YB��PN'#�VȒ�-�UQ���g⫒�<y���7����-&�����%	�˴Hq~�N��?���I�R�^��������Ǐ?~���ϟ?�����a6���a����bV(�
+���4JQ:9z�zv~����ej��'S�`�ŧ
+�j0)K%�(����7:��b���$2�Xl� �G
+�H&����7�����K��*W��H={���ȡ5�p}ñ��wqyY(���A��|A�zij�V�X��8��>v������(�L�a���p4���r�7Xn���_�����5ZJ���R2���h7��ŏe��$�x���vάޖ\ٺ�5M@U+�,f�RI��^��zp���`\�MX8E�ΐQ��*z���h<�mn������E�l!ua����'�"ij�M<Ra0�'��L�E�R�{�����@ �@ ��"����ſpG�ZG?���v�[alU+�\���[�"1(�~wk�<hfh���}�&�r��@涢��l!�T�u���7����n����=WfՕU�E�	n8�:C�۫�V����@������i�i;(ث~ŬP��-��u�#�--�}�,贠�j��Q�on�=<�|���?��_Lg��|�lwJ��+��h2���}~}�{xM���A�f�;b
+CX�˝ڥ6������fQ��Q2�J��'�.�%f�R5�/�ˑw�(��r����Wou�Z�b�!h?�P��x|������/���t�\N�S�ρP�YL�Ɋ�������?t�lTt\�UGc�T����(k����>��c����x�1������>~�����j��!�*�cs���I�\�Z�W��%s]�M��n���AY���A,�E��ݱ�taa���D�|\�I�0�J�sta�������|��^��������������#�`�!�zw�x}}{rz���;��z�Q�?DwG���,��x:�-&�Ϳ�!�@ ��e��M��F�Z�+u��ju��W��R&�O�1���ݏ���1�$����U��`�r:i��I2ǔ��B�&��~��N[��Vv|d��L$%1�$�� �"�MV�ɩqr�)���i-[~�%y0P����K�j��Atd��e�S6*������������t��
+�T*�/�K�|��+��x)t���j�P�f[���� �H�5��B�97�>���t�����j�^,�%��+�
�����a@DZ,����䊥�rs0ךm�ZS͢*��T�������tqyQmTЫ���{��l=
��n�|�~��j��)_*��S"�I��T�_�EȘ�J���[�O������:i�j
��R)�ˣG��E]G��9Dc�`8���(Qt+֌B�ί�I��jg��XA�U���h1S�TV~��*��b̊�+�CԈ������P4����t����k�V{�fKb�::>;?��E�w������|z~y|zF�/.��N����^辝�h0��Y���)�`�ao8^ln���
N>��!�@ �����ׯ;�{��W/����p
{�0��Z���j�X��c3�D"����]�k�c+7ZXY}��u�s��ڰ�l����"1@
+���X[��̛�bvj����ʁY�P��"�����NS�2E[�َ.�@!E()49h�b�J�5�K�9XP~��X�tU���z<z����{~u���|y}=�3�B*��K�|>��$S�X"���ch�'��t6�nŶ(���F����ӹ|0�=�0FE.�*���
+S�z�~��럝_�K�8�ȽZ���8Eh��v,0�/��%��J�v���mvz�l���W,K����������c4Cϳ?4�����j���}|zzzv�˨�Ũ�Щ`P���P�%����+�E�<�ϯ{����R�h.��Fb1�ռ>�%��;�Rx��2\if����A���q;me�l���lS�����k��]�,X�����,�X<���!.r�F��}r�,����"��/�q������
N^���X�p�MF�,��d:O��!E�@ �@��������Ӌ�k�^ln�۝Z�mb+����j�dd�d&Kf��x ���c�n+s���m�r�V+ėf��V�ru�\QBE���~X_���L��\9ޓ��耸��t[�ȕd���>��"�2�TN��
+'
+Y��D[.V�.�\1�%���+-�VU;-HGgF���j}kw����p<���T*[(c[:��YQ�Cl8]fm~-����r�FO��J��p
{���f����]&�r����h<�%��8z�J��%Z��+�e���s9J�
+e��[l�4I��d�%�_Q�����?�����@��
{{��=��7˯X��S��H�Ç��v;�H�;zJ�p�[�d��
+��&�"�����fc�L&�N#�z��QJ<?Q۫8��E�%���4{�P�G�2[P�ò.�Ҹ犳/2�Ѓ�Y�k�.wR��B�h}*��]/W�V�7��˭��}�"�������)Bn��)B��������7�-z�Q�?�'s!NNH�p�@�D�7��@ �@�}��Q�z}}����ر��F�[o��j�Ll�W�%=S(�1�8$�l�S0�R�χ���,!H��t�v��h��Q�}VFm��*L�����o��<Wf�p���X��MI:��+��QA��y)��s�����e�V�`I��j�Ue�V&)�[����Q�o��_^�^]�^�ލƓ\�K�r�"v[�ґX��g��A�?;Ւ5�z�"�hI׋e�aU��J��H��'dM�;�,��"�,Z��њÑLg�J�JF�RA���S��iճ���z��d�d���ЬX�mn�F�F���"��zv���w_�|���-㊭�������Wa��؂E�Z�A���]�?����t.G[�ʕj٨����q�/����1�M��Z��y<hq��}IfeY���G
+�J{!Tl���u����
Z�V�Y�e>�����bY��0/���}�`0E���e,\���t��l�=XGǧ��W׬������Z�������������Ս�"��#���	�`MKs�x��}O���O�oN�@ �3HlbG����F��h���ت�.W��je�8!hT0��1�J���e��0��u=�P(2�� sX�Ka�����8�Z��n�`�5Ʋ̛6ޛN�u'�b��J�-[�D�'�Y�̍R�b;��K&�Yl��(�e�R�bC�m���ق�-6H��[�uO�h��h��\��^\^_^ߌ��\�Mij�b6�K�B��S ��L���R�qZ���MV�z���P\��y]׫�f��
�����:���
+����拳��L�P6*$EX���O˪�"=�nI�#E]/���l������vo�>-n�=U��\x�����t���aĒ�痗�~�;��G����%z/.��ON���Wda*�S�^L�����Y�oGG�p��-��9��l�@��[������\�l���:LP�n+�B0�4Yq���2�ZBT�+��f!,�����0ΐ��L���*L����d:[nm��sv�>]�7w�O�O<E���症������"�����?��3�����}HR���ksk�BA �@ �[���W�G�i��~�N��~���ku\lU�}�5��^�c��h"���!��T���L0\4$H`cVB�+cw8��M��Vk��Z鳲�1\1�-�b���4$�p��x���s
+��g�L�%��k�FU,�gk�
+��՘���ݑ/��i���b������������d:͕�hc:�Kg��T:�l��s�u�M_��.7&h����G㉣�v����F%[(����*�H�me�(��x*�,x������b�LZ�����	�V��pGt6�#�/�Y*�z�ޘmn�{xt����"�?گ~��O?�X�U�F%�}����v[�J K&zR�������ncLC-X�J0�<>�.�!�b�����i��Ep[i6�����Jp^��_ip�B��,�"W�eѝ�;�m�7)v�?�3��H,����Œ^�5����ZlQ�����`��3N��~D�r�x���=9;���Gw�1�5�ᒦ�d�`<;>>E_h�:�@ �@ �?��ī����m�?lu��wn��$�
+���[�F���sy����ױ?��ʋ�e��Xn+t���\n���|VNX�**�b��L�@b�Zc�,!ȬV?l����T�l�v;l5Vfϕ[�QA�P{e�H���Xᗳj�k�lSr��iz�s� ]�ٴ~X�(K��8W,���l��+�j�f2���|���׵A���̅Y�dF�Du:�36�L�wwI
�Q(���`gwo�0�..�|Ű�*X����|�����P*IV�RMf��ϯ�Y�V˺y_�%L����k���2���)�t��a�p����W�������'�L�n�|��wI�5C�͇	j�HG�?fy:ѨV����fe�d�H��+YY�c	QA�}�	ķ���I��J~о'�Y�����*�v7�[�G�4�wQ#�0��
%�x�k����b�x2�Ίk2],�v��NN�//�on��������U@XO/4Ext|����gƽ�x8���,��|s<]����h<_l�"��~�	�ZA �@ �O�ۻ;���˗z����n�ݫ5�z�q�U�^�Te=W,���x:�'�/b0�����d��ܭ�N�9�pL�EW�m%.[���m�Z��Z۰��[a�wUYn��(���b����Y�ܼ�����$W�[�7VqH���.�Er����m�%�٢8��l;S�S��y�������t����w�r�†��W��b�)s�E�8���[[�CG���2VX��V�}xt���ڛ̠mD ieg-U�����99=K�r%�R�.�J0�h�e�Rxߔ�L��H�P*��
+z�B����Ų��œ)�И���7w���Z9[(�3�%�Lҙ�V~P�}�:��O������i:����j�����X�����x �*��7,kU�
$*�d�J�۴4���(˵�B�D��y��ѐ !T^�E�Wa���qa��`��q�{��j��B�}8�-61�:<>=��������x|z~y~y���FX�����������-2�p��Y���r�f�"��xs{}��:}���@ �@ ��v���ׯ_��fw0lv�h���!A�4���L�`+\�F"�`���_�d� �Gk���
+[qTEs�RaZ�t��t[	M�,�gB�w�l �"n+Ru�F�V���M��m�@�����X@���{�l�W�0�Prʲ�x�����b"���$�p�SZ��2+�ȭkN':�ۻ{�f3ON��^o����� �U,��V
+�m�����J����ngg�\���t2���?h4[�d%1?����qU����7d��׫�%o �>�_q�H�ЫHe�%�(��r��&�I�X������7��ͻ��P$�����Fs��e���Wt=�X"���O�A?�˧s�X"�Lg±�_�S		i��[x�M#�/]}��bݺm�П�7d�J�z��\5�e�HіBGj��"��� E��h<�He���hu{��d�X�E�WW׷ww���OϯV�������������������t�'4E8�.�V�5�̇�i4=?�D�-�gg�e�@ �@�/}��Y����S��i���Nc�Vc+��^�y{������#�q��d&�y�A�����K-c��V�2�5+H����^�Q�eSl�e\k�0��
���[�+�Zw��n�%��u7wL)oc�d��$}V|\��'+u��-�Nd�*��}u�݊u1P	��h�ڋ�VA��dV`	��+��!����#���R�l�✊��"X�H����h�s�\�4��=^%<.y[Y�+��
+-�g��?==犸�\�)�D*���e�C��V�b�ʲ����B�\��[�Zo��Y,k�V"�j�Z�?	DBe�����[��Y�f�W1�q���tv��n������UV5�>��C�ڨ�4�ʄ��Vv���78KY�����jb
;7Y��j�J,U��&��(l��z�\Y�������M0	���+[(��J�����	E�O,X؃u��ܟ�D�'V�u�xu}KS�8-8�)���'�k1����	Z�)��_��w/�@ ��Q}��A��~T�{�F�Sou*�&�dǓ1�*U�%�R�c�L6�J�c�@(�
=>?�V�о&Vl������K2Ip��[QT�&�����5^	�9��w1��p�� q[��]�ͣ�fR,<a��Z}�frP`SVH�)�zv��1Cy�{��Sh���[�T���"����[Bg{k{������n`@T�Œ)_0H�ObI���.��p-R�.��rss{wo��
+�l����d"&����օE�l�\;;{G�'�LF�THd�F��#�%�K��,z�r��Q��������;x}�p}{7_n��%t�Z�yz~��~#k�l�^��/fW���"V�Lr\qLI�}�u�	�mYBE�{)߲Z}s��Ɲ%�U�O%�,�(|�d����_�S�X��)��&�X�пp �‘X<�Hf���^�՛����`���"��[l�zS�>`�����n����?8^,���iw0�)BR��g�����n��K�@ �@��g�$��_�.[�v��lW�j�I�V8!X�TI<����1��d�`+<FP���qsw%W��D�-�r8�y��Y�x neNj5I���		�{��W�t�&�����4!�ęD�,He�J����Y����3+s��Zi�9��R%I�O�:�d�a%ɶ����+�RWZ�݊PK��Q�,X�\~��X��^0�������!_ H+��0��값�@Y�p��;[(����tݨ�̼ܲp���6U$WV��$8�О�@���7d��Qѫ�t6���bgb����.�����R%�XF��n�;�N��;��d�t6{{w���~/��*�z3=�n�eY|~��s%	�+1B(웱��Rw�~��e�e���v���&-hM'��j�,f�Ry��dY�|��w���E�p8���L.W�d�&�/:��uptLk�H���3�Wa}z�����nn�q�p�`:_����"$�G$E8O��ї���!|!�@ �@ ��ׯ_'�Y�ӭ��f�a+2I[�F�X��*��&��h�{�~��UHH�Q:FP��L��	b�-�Z'QA!!��F0�i�Z{�!�zgr*�B�Vx�u��}�$�"��8A�lW��J�j���A�r��˒L$e�*^9�.�%4��Gw��W��[H��6ӔlD(`���
�x:O��`��ad�Eo ��#[�;�i(�,���޸u�C��JF��Lf�v�_(���p2G�N]���z����"�(z���
I0\�*�ej�R�Y�T����B�DlT�J}�T<*Q���(��+n��GS4O$/�u<������bQ���#�L<>�l���7����I�3��`���nn�N�ջ+�ģ�_2_�qU��Klw��*
+�x��[�*T]�3=�J�c�#�0��X^�?��܃!Z��'��\��Np���O�rk{w��������c�D���+�����o�OΖd!M�"��b���1��-X���ˏ����O����@ �@H��"��&��Ш֫�V��4p%;.��	���-�R�|<����X�ф �-,���
+	�yH�ګ�.����9l� kh�X�ꭸ�j��(�z��7_�Oj���wa�q�	A�AY�+ʣ���2\�$�f��f*|�T���Vv��m�1�k��}�v~y��$��W*�e��ev�[)B���U�[B����yѨI����e��%лƧ
Z�+~4�a����d��x��wpvq��Pk�ء���ݽ�?��ǿ��?�����3���矿|�������O$ם.��U�eU`��g�����t�Rի��=�Q��
+B�'t���h���|A�TK:e�]V*�|���V�y%�
�>yP�wU)��+���
+�.,�
�z[�%�2����v�M��tO�Ж��-�P�Q)>��M-�����dsF!�H�1�Wd��.2��C�P8�F`��;:�Η[;�������掤���"�?���ǧ�����k�/�[��ݻ7'��lI������)Z��|9�@ �@ ���^�V�V��뗫�J�Qa!�zc�j���Vx�`2�'���/6��<�B��1�d1�h�%:Upm}�f)�Zw8�]ʬ�z�{���)��ʂW���5q� ��Gsll8����X;O�`�ʲ��>v>=���o^�C-ϕ�S��uU�M�\�M����Y1�\)+�-F�D/]Agƨ���q�K7�8E��K?�x�EF<Q*}�w3W,N�ã������׭�]F�#_ֳ�B*�I�r�t:�J���l��-��l�T���}x|>:9��:�@��Fɴ�qk�X�Db��v��+`[���Si_ �h��-�
+�X˒��K�,a
#�JE�VK��L���c���f��7��o��%uuO�[c9>A�?�|C�4��](�y���!T���
��)��ݪɢ�Ak�U~E,X²�A����Y�a<�0�H���1W�k2�/�v�H��%I�?<=>=?�A�>~����`��ޟ�_����Kl��Y��k�4��p5����v��ށ�k�@ �k��ͭ���N�?ЉɊa�jC����L����⸏�b����S�F��L[�Z9]l� �YY�.�:)N�9�
����V��{�ZG�W�*Z~��ݷ�	n��� :��A��Mtfګ��JdY�de�[��OC��"�ȹҸ.�[	�W�v��"m��JqJo'	
+-Xo;�e	T�ɀڒ^ce�H0]A��\�����\�T0H��RMᎩ��in���)�k�K�P�-��O�o��_?���6��L�Pԍl��H�"�X0�nF�#���@(���I&[,
<�Xև��x�@�
+�#t.�
=����N�wuu��L߽\���1:��+Ӌ%�+;��},ñ�I
+�x=+���p9��P�wXI���I�����W�#Y���o���]��Ok�4�r��LUW�\����ZkZk�#Eefu��~�Q�\�3ݳ���0���@" �O��;��}��n�U-d�[�\$�ׯժ�����xaJ7�Z����Fep�,�jw�����2��������P��3�|�R�7;������wpp|vF@�������㧗׏�ϯ`;��Ƕ��Fc�E���CLf���p������	��z}}�_�r�ȑ#G�9r�ȑ�o~�~��������ƍV�T�$v�c�n�r%[,g��T6Kf�1T#�5����0(؊��,[)ɮ�r^�rX�� Y���%$dan�r�9W!k	�
WK��Ί�9AJYg�+vՔ�4��2QW\�PgB���U^²��迢�u�'h�_i\۠�C��n�e�^,�P͵��<�C”�����T&�+�����K�@���;�K)����뛧W׷wϯo;{{�zWͥrP�������Ľ�|_D�Su��r�c�l.�+QڴXo�����uz�
+���"ǻ��1]������&xPp�r��He�� xDƁ0���������OUs`q��T�jeQ��E%��UC�x���^�y�K	un��~!/R����E.
�$�+�>s7����4nYMYD�b��N�8]:�`9=������`8�F�D:�+�/�f��Qp�����9x#q ���7!D��׏�O/�˫�ã�����d��A
+J��.B�"M���uʑ#G�9r�ȑ#G����M��۷�l����g��f�\k+�R
z�J�����%S�h�
+È��\�|�A��m�e+x�x�Ͼ�PWˈǾ�x�o�aKU�r��n�%���j$ث%\&H��%j��~2
+�-Z�m��b�U����!Rqf*�Ǝ��A�F��,�*�m���8�L�Ka��lm�NET,]�TT�"�I�|��?�/c0�?8���D�*����iw;�����������e��R��R�t>��f�l��:Î��H�r�s��X����^2����\5��K�z ՝.���p�A�#Y��g�9�<*�z&����C!��Ǫ
+^��W
+�s�D�t����E�ArGMϋ���]�
+V�l�h톾H���#�����
+U�����t&�L�?I,�X��~��g�)�P�B砹���)ï �����
+i'�[�D��W
��ܽ�������U��z���Ǔ��������3r�)Bh�z1-X�n<;���?�����G��xAX(E�%��x:]��_e/b5�9r�ȑ#G�9r���+�����nw0���M��V�T��lU� �[�������"���L��JB��Y� ��3\a�����!��hN����'�C�		�����#\�����
=�-��d
�,?�S���ʬ d2���6>H��̮�[U�E{�v��L�ҹ̠��t�p�	5�LSX' CZ�(�G��A;���,�Dw�}�f������BQ�J�N����ׯ��_����*��dR�\$��a�$�0a�� ��5��O������N����I�|�M$
���be���]���yxx�)Xcw���"�f5��jb����Wl�QJ]d�Z�th<#��OI��ҹl�b��NiW���
W,���;{�׷o�>�����_�|����o_�}���_�ON+�СԤF��i%��:��NE�Vd#^�r��,'�h8݆����\^�/���H4����J�������t}sgb��ϯ�������u~|����O�����������|{go<������?B]������h:N`�p8�ɯw9r�ȑ#G�9r���k��gA�O���x<]M��N�T��L�2y�P�B5��m�8�^��N�U�
+�L6E[E>+,�u*Ķ��Y��5l�Z�Hv(X!;�V�9�8$ȳ���2�D�-D��
+'(�&�]�!A�CǛ"��h�nj��e3��6�Ţw�:�8����R7�e+���<\7�(��Es�:�T)s�v��/�IP�rؾb�œ��ۻx*�C�L�����h(����L�``���,<
��E��Kх�xVL#�=�C�m��b�7��̻œ����ܡp����?���MZ����-�����R�]�VE�"Ii"�j~��+��J?觊j��N*P�A�a��`���6�O.�o��/ƓIo0,�+��/M,^��[��x2~x|����o�;=;�
+:B�kXU3�W<��A�*�2�D,*�ؠ���8��r�����V8
+���l�PO����!ksgo��z��������Z�>~���3X�����	�S��������p4��`��������Ǐ���w��9r�ȑ#G�9r��u���u4�����l�����A�R-Vj��x�\>��D�P��C��pC��H���l�BDt��An+j�����qTp���>��u�SA���
+��VV~��֗�I��	��!8 �wQb�ʂ�vN���M���,U�`eV
��M����������[3�~�Yt����.��4�OP�I�W�H��*���q�S��ߤ:�,/onmolm'!��N��/���!��#��dI=Nb��*������X�����ѡ?.T*�|a2�h�����S�Ɗ����7[����r��+B�V���j��^e�_q:��Ď�(ݚ�S��*G�g&.���	��t�Vx�a�#ד?*���tkwokg��j'S�t&[(��˕r�Z���e�R)��E�/+Fc�L6����������R���0�	�QT�2�]�jEK		םnG�*��E�.3H�.7��|�` 	���d:��CV��@����pt
+A��O�ψ��?�HX�(E�p~q��S�����0E8��o �����X���r�9r�ȑ#G�9r���˜������V���'�v�����@�T�H�ʕ��|	����x�V�rz<��T��-�R(�B+q��}͆����5Ԭ�֘Q�t[Q�6Y��e��$vF�Z�5�ˈ��Vv;x\�+�=%��e"��$E�+*Ra��Y��Ү�̓�P�H���+�e�@��(8���u��n�99�tXi�J8�N��P��	9L�yL�����R�e�(EX*��N��'�p�����C^��X��M��geS��X���1���@�Vkcs���+��%�*d��>xg�llner�L>�L���d8��+}A����չJAf	�$9���.�j�#K�X�s��\�P��L��ÉN�'��֛��d6�N!�>�/��X���|1[(�l�
+�b�X*�`�J��B��Ǜ����������C�P�x���s%����,+4x�;��Lf;�;ҬH��p�e��n�����`8�"��x�+h�����c���������Oxy{��S�7��''�ۻ���:�"�)��l��,X���;������9r�ȑ#G�9r����o߿�W�Ia���
��V!��D��`�j���l,����F���;�n��2�)1
����0���M��f�+D�+�;�Z@�V�e	B�M��ܾ�x���x�/l߂�."7q�>J��Sf�дT{����T33���U��2�|ž�N�X��ٮ���}8�ƉWL�R-
+؜إjf*Pd+�E��\X�`Eb}��c���Z�\9�����P�,��{���ē)͌
+�*�d[�&>�R�-w!��������?|��9��K�b��p��z����ׯ��]�\ncs+�L9���.'{>�{�v݊��g�[†���v��3VY�+�}̻�a����ҙ\���G�Z=W(��U�J�L.K�"�x0�^�������L&_,�=�ȎU�T��T��;=��{|���Ec�1�d,��	R��NW;ȑޅ� V�t��Br7�:Qɣ��!�\��t6�|��z��d�����,r��{xxB�7S���v>���?^]�����p<�
F`�`�JXӍ!LN`4qs���|�m���_9r�ȑ#G�9r������_��W�^j�V��iu{�F�RGM�lU(W��R:_Hd��mE��?��5�P���f:g��2�Z�hv[�� ��3��������@�P���_�T%�%�d_&q�%,��a�;x,��P3�涢
�T�����fR�y�Ѹ,)B�Ty��
+]�f���W
�:/pqy@��Z۱�,��n瓆{E3���QL@��-�B��5E��ݟ�f�T+K�B!��<^��05"�L�IX��q���������d&S(Wҹ\�՚�o8=��2�:'Cq�@�gT4
��}����3�aJ'�uu��צtN���R��;A…�-Qg��P�
+2�|��jv�d�©�4���|��Q�`�"��k�������"�D:�+�y��ЋU���������h������W.0�8�̗��W,E((Z��r��B�<�������`<�X<�Lg�EXE������������	�`���#�`��R
+֧ϐ������������#�†+L��(��h�M�Q?|߄���A�9r�ȑ#G�9r����O�����V�So���n��(��D��J��3�h2��!��p{|��Xd��e�T5�n+͆�{6�
+�Vp���lpAlvl��b�B3�Z���)aYXl��By���(6�%��{D�"�֬�Ue���8	��W�e���M�	]��1Y�D��W\�4R��ƥ�Ԝ;KT�ؑ9��&D�8��қ�&$
bZВ74U,�L�4--_^�ʕL>)X�j&_��B��Be.�⒃*��]ez�h���C��G�DZD�X�ē��l�\��"Q�8�9U����ܑY�H��(`���5j��YDk��SV����=l;�],����W,W��n����0-���T�����!���בĄ^]�M��`$�Se�Ȃ��J,�B��ln���כm������a�����lWN�/d)Bf�"�]�V�pN���qy|�9�a,a���`�\4��ol���^@�=���O�@Xo���7���g[;{8E��
�	/a�.��^\^�9r�ȑ#G�9r���ם��G����Q0,��v�RoTj
DeK���P���2�D*�!{��5��m����H�,y����8�s�D���+EW��K�a�Y��M��~1�W�p��VkP#
+����Vv�:����Bo���
+��إ�.,�a��d"�Zi\�o�N�6^�bB�>�_�+͔��X��j�E'Uc&+�q�'1(<��p���\5�.Z��:���ڝã�D*
�r�R�5��f����A����V����'L���4��ިG'
�ϔr�b:�+W���2�j����<�򃚘���s�ð[���v�H²0��&A�}ÕΤ��K�W
�}��d�^o��
+��
+P�.zUs@paRA���IG�h₾*'xIәl�Z���R�\���b	�UF����v��E"Hsp��Ԉ�4=W�m��B
+da��.\���B�X,�D�Z��0E�����������
�`�!o��]�`�������������`4�􆨋p�u�F��p<]ߔ�r�ȑ#G�9r�ȑ�2//B�����p<���Z��h"�[U����A�?�D5�:j����-
+�	"A����
+���WVW�P� ���H�����?,֬p����GQ���ʜQp;՝����T�:E�V� �]!G�*U�Z�����tzG��	�7Gq�*U���b���S�\k�|�o.3hI�	.1h��(A���Jw�9��md�*pX��}px���t�\.�*�R9��<^&�a�?�DY,O
+>(z�#�x�V�ǝ� �W�x2�F��a��W�ê�J�ʥ������`�u�:ǶBW
}�����;���*C�j�D�X2qsw�����
+1�K�vo��d�Q�����@�\������3�F��l�s�"�)���2�F��Z�G�nA�T���Z�tr���=�l�"DwL�r�����#)�p$�%R�\<
Hro��T��N��/��o�1�����Y������rw�pyy}px����!j� ��d:Mz�����������r�ȑ#G�9r�ȑ�/0������e07��R�Vm4KU,[U1�=[(���x:�'X��<vT#h*f[A?����Q������m��W6B��A���q�oy�$�c6;y�o�B��	Wg��Uiez�I~N��q�,�4�BW�3��MS�?\�r�5N�b�v��a�'Cq���%d�)"=����+�ag�RŋW�leר��*W�Ne��.l��.�_1ǔ�_�3Og�g�R	�� _�RMe�^@w:�=��t3<HU �4��Z����N�7o�춺�Rf�b��09࿝W���K�]ULe�ϯ`�H�hS���l��VA�ⰴ9�:w�y�K��n� Y�Gl�����*%�3������d���0��IU��y�LֺC�iNW:��`IX�Tk��U-�+�N���?n v���E�v�k� ,"R9I���ɉ`.�_n������@0����x��q��1�w��!���斤__9�
+��^^���oo�O�/w�&�
�^����l��1A���W�{�߾�_9r�ȑ#G�9r����{n��������z�
Nc�i&�\��`��`�`1��A{,�D�� 汃�G
�V�o�Bd�k��y�Ȟ���?N���5�p�D��K��
+��`��F]1E�
+��j��� ����l����v�ۢZ��	M<�]c��K��(,�)�����4�7d�>�N�(���4h���?��N�8g��)ѝ�Qqm��>�0��!H�S\PT�4����a�6����lE�3�Uٷ4M3���tkg7�N#__�T�#�/�RJ�J�3�l��|T�i����h2�?>�����ܮ4`�@2�CN�K�4E��b��O�sR�**s�w��� r��F��W�5��E�,CGβ,,<�e�ϟ�F��^�%��o���;le$;3����c�ʒ���z\q:������`4Ne��Z�\��hu:�f3[(��!�r��������Ɋ��t3��p�xJz�+���=�/���F����������������܉��Ody��	l|x|���=>�)B(U
 Ƚ?�]���)J����x��<wv�寉9r�ȑ#G�9r��>��Ϗ?*����
+�8$X(C;��哰F0���@Ѕe+䂠b�ML
+�bxv"[a�jumy	V��S�+�,�<��$'�DmWPԂ&+����#�jm�����"e�c-K3	W|u���i�Umng�ҭP,��1���Gx;�T9
+��,e��V�2g��My
+�\Q�ŗe��[\� �Z�\r�iSv*j����Պ�j����%�����:�T6��㇦>Fb7[u����7h�ڳ��Ӌ˛��������R��T�
+�a`j��Ieǚ�!��h8Q���UΩ���EJ�nO4��X����������9��>�c(��+
+~��-���@(.U�ս��R���f#�fx��	:�P�N��T�"�,G._<=�N�Pª��C��T[�^�TJ��^ć�̓N����S�^9��
+Y����; ����0���XVBV��A��������cTExs���_^�ސ�W_����'��zqy
�7��I�?���g�)�"��G��`�_�׷��E�9r�ȑ#G�9r��ϧϟ��?~��7Z�f�P���r�^�B�
+��ea�`!�F5�1X#�
��!<gD�v��7OO`M:�B��meWUL��QA�;��`���a�³�K�N$��_Q$����*�k�Đ�0�J�WvL��`��n��'�XenD�w|�M��+l����+f�B��P		AU�VL�������?Ţ_i�Í�`r�iàIV��⁚�n�&ÊX���̑��Q��Ѻ@N
SYdm'^&���f���(S( V찣 w�f#�'�����jol�]\�?<���o��+��.W,Fbq_ �t��]��
+��L��|i�"�J�s&+�p�k����.�j�XRu�?Ƕ�86�ȧD-�}���f���ߜ^
+����Z�>�b���j�
��
WNs�AES��u���j�����gr9�^*W����
�_6��x�^�r8���N����D��V+�<��(��vZ�\^�Y��0��Ɠ�L����h2�����?<>9���� wh�B w�_}���3�"|z��{8C)��t�?�#�c�E8% ��d�%,�u
+�T�}�&h�ȑ#G�9r�ȑ#�Q��$�V_�~ǵfe!��X�J�m�)@;8�'��h�V�F�؝��`�#sS9�M�Am��X�������*&\�2��_�V�*E�*�,���eJ�²���*D���T�y	�B���n$�'x��G��
+2:��ܨ��*�³���U]�d.�D��H+��ŘWfϠX)�3�8�+Ԭ=��{�AA��P�M���
+��]g@-a��\X‘���^���p4�$3Ђ�+�*�������
+S�TX)�h�w��/���n����J�j&��
+�}����KAb��z�ҭ>�y�e��]W9��HYR����+�F�
+���bA��"���6h`�ɺ�@��އ��2�_J�F���C��י&+$+$E����E�TN��������6BB|��(��J�����H,�LD�bl+b�2x�;tv91�i�L�����R���0����_K$��,�C��`4��6�����������GN�� ,�"��=99��������<yp�"����d6@ ,p����#G�9r�ȑ#G����yy}寞^^��J���V%,[���[er�T&�H�1_0���p� =7S����2�^a䔶�d+�\[[�H�U�[bM��IE�+���*��ٱP�p�4	�P� Q�(���*H,U�������!h���tw�q��E�+���5�:/v�9A��x��n��43�g�_i,�7<*̅ŤEݪ}��*j���d+}�܄���j��v^�R-������Ӵ�ƅ���f��G'��Z=֠)��-
�G�����������������~�VKf2�|>����A�fZ�6�w۽8�F��+��-D����J�[���@}�n�v6����	�=���?���������?�>G��a�I[�9��nU���e8���^ã��X2Q�@[T�Ti����$���|�a�S�-X��ObԷ4H�-X����/�oR�,
+*V�U��S����r5�J�A��r0�� tw'5b�&+N�rr*��Ÿ�P�r�q�����P$�'��T��܇���������	M�?� ��D��K�ol��n��`�p�1Y�]�0E��P����R��ȑ#G�9r�ȑ#G�����3[���k���;8<8<�F�V��!�U�� ��P�5�)X#B�䱣A�p�0�����N�I��d��
+W��� �
+!�mN��PVX� ]YZ�Yؾ��W�p����m����d+U��느�y@�R��a��9��:BS������L�Ka:���
+m�&	5�"U�D,�[!J ������.@�\Q�n!\q=�f��I�B�S�y�I�*�î����L�b�v���a�s�K�}csk}s3[(�ȂU�犥_�~{��	����w�*�z4GL��/�
�,Z|V�L�E��b������c�>�ԩp���T:���Gi�fs�<�L��hnnm_^]?���}�����_���������|���k6���DV���Rb�����_�b����b�\o67����<��"m4�,á�.��{�����ۇ���D2Y��ʕ*xDpYo�c�t"�v��Lz"B����Nj�2�]�>
+�\��A��C.�p$��l*X�^8�nln����]\^�`��h��*��O�_�>��
+�w�&�ur�z���X�և�io4�Fw���H�9r�ȑ#G�9r�

������G��N�����B��y�R\M�)䶊ē���\>"[��D��즂A�+�"J��jVve���W���	P8�V�6�D�%3!H��+�R���݆��.a��Lu.!HU,l�b,�����rŪ	�
+�+w�.�m�vE�U,QH���
+r�Q��hc.,M��f	�*E�y���b�Ť'�&���Z�b�U�e.�d7�ꖸ-4c��Y,H�w����ν�:B��Υ���"����y�����R9W,���x<
��f8M���x��@�<��KTS:s���:/RY�(ǂ-�i�Ю-�.\r_��2�T:�b��`4><9�{|zE��_�~�����O���p��~tr���������O:ا��`l���g-�D�a��ǟ/���<^֯0_}����k6�P9�'�
+�C�:sg*+����d����?ery$^UʕZ�Ti�;�x2�;\.�p��x�t9��2���0�����lW�N7:]���>�.,�`�c�d�P�y�8Og�;���GĂuw�@���
+���Q�"<���M��!ԯ�8E���@X$E8N�W18��m�#G�9r�ȑ#G�0W7�lUo������89����R
+Vh���mC��h2�%��/��V.���
�5���5�K�SwV�0��	�� �	.��;�S��S}�������D��D��Ȼ�X��R1������($p��A���2•�c��+�s�LV{Pz/�L�LS�]'�i�R�Ԟ��6�T7�1NSR���/=��D��p��fW���i��*f��y_�x�‘�-�.U�By����[��$r�
+P�
��
v����^ʗJ�2�́�n$����"�2���Ӭ��*�R�p��l��T��[�!ML.�OiVݪ/�������������������x:����x,�%��L.�-��R�P�d��D��iu:7�w_~����c��s��:���;�̫+�k�^���?Uj5�p���M�(?ȫR�E�)ƿr��k�;^�a@��������P*�#Ukp)W+�j�Z���2�;�R�N,����X���`�Ax���nW�(E�G�P$�'�ih�����`4F ��Ó��r�$w�"D���_��������+�������dck{0�i��p4�LF�ur!�{o4����_�ooo�wJ�9r�ȑ#G�9�}�ׯ_#�,��:�k0�S�5��N�T-�+�C��l-�+��U*�5�AX#�d+|Z��Q/�6���`v�4��ժ��PBjP�aE�*Db_�ު_>,�-49Hj? w���ڪ͎B��"�h^τ��?�R�lW\� id�)f�R����W�~-��YA(ުY��8N��(�jW�̠�RW�J�H�Bc��� g���U�oe�:M���Lu�j�Zl�23�Պj��|!�gY�#P������t���uz�L.����
+��5��%���Y?e���"w�ө]@T����Wڜ_K�k�4�����t#�N�����t�{p����T
+��KE� OT����"�H!�!�Gb�R�z|vvry��G0�n{eѲ�+�������K?Wj�ԯ*�bq0���PX�wƳ"@u���^9�n�UStr��`�]Q�^����&S�r�Y��W�5���*�H���Ja�jep�v(I9YT�`;Na7��r9�n��q!
+�/�"!�"���+Wm4�(E��R�����R�(?�IX`�
���W{����Fo0���k4E)B$a
�S��;�7����#G�9r�ȑ#G�0�Ǖj}0�4��j�U,��%��l+h�B5�Ypb����4�X�L)��_�(,vd������0*h_��y*;�c=�l��ѩhT���0�
+���4��}���ZWT^hb�+zU�	w�y@��S	ڔݴZa�:K���T,�aE�Ud{�	�n>
+��&�:aa�|�ƥ)����C͡��D�3}vs�Θ��y��Z:���U��K$_��+.jF-�t��9�,����d�T�(o<¶���̄����n
	�w]�_t�پ(-�rѿ�B���-���d�@�X���x2���\._,���|��/��l2��%��D"���8��r�"��e�R��T�7M��۽~8ם�y�e�P����OJ���r��+��h����5A�r�w�U��S7�!�>�^��,­�)J6�|zjw��|�R�#V
���j�����}�"�E��Q(�
+y��m������>�Ñh<�H��k
�[�Mf�[;�G�f��������P�>#	��^����o�ONϷv�Ɠa�G��d<�0S�Ȃ������_��Vr�ȑ#G�9r����a���_��ݯ5[�N���k
ps�%����l>��`�P$��ݾ���u�ʰz`�#XQQ�p�5+H�Z#T�%
+]�ƪe�\B	A���0�%�n�� 䱃������u	T90;�`�},ྼ��p6-���KU�^���%��k̲E��ŋ�ϧ�AA��9K���AM[`��,����
+�RٹH��q�+M�W��*Ү	�,�&�{�A��~IՊ��E��.p���?*F�:�h�R4ǜ�j.ѽ�bO��r��^���#�E�R8a��xK���{ڔ������
&^.W8Cx��tV�V3�|��r�b*����~����x0�K3
)B�Fb�T6�/��%�ψu�|�X�7:�A<��#b݂pg��������[��H���Ѕ=]%��ʕ���!x+$��t!)?x��A
+��yV
+�{:����3�,x�(�Y�j�?���IN�2�Y��(��(�����)d��=���
}�@uF��t6A��f�7Of[��)X(E��0X0E�Y���������������tcsg8�v��>%���"Mf�K�U��ȑ#G�9r�ȑ�oz�NN����u�۫6Z�V�\�c�*_���|1���R�H"�B�����^L��t����e���X�B�&�+*�n��e�$�i��uT#���D΢��sn+�Ҹ�@S�Z��
+ϳ�_}΂�LST��xJ�I�k���0cQ���A
+c��+�[���y�J�yf�n*Q�h��M��|lP�y����#����K�S��%
+i�LT�U�B�,��;o��WsB���y
+��t��tO�f��Z)8o�ҭ�����]�������;�\O,�l�:�ޠ�n�
+�"J��D:�!��	�����n²�_����|��t�>�Eb����j��/�������&�|�?���������+Uj�*�k�
�D�bA"C1� aQ(S��#��p�VVW����s��Lgs�r�����V����_�p��LY|l�K.��+�)B�	=Ѕ�����@(����T:�/��PH�C������������-�`�@��I��lv��?���f���7�Ǩ�p�1���"����T���ȑ#G�9r�ȑ�ow�_^���?Z�^�Z�5[�z�ؑl�x�*[��H��s4趂���bV]$�XOl��@�DZE��
+A�C���`o�Z-/#��Q������Wp����A����#{���W�e��&�r�����S	2ê�L��T��-Bb�M�
+ìtB����?>*��T:؇�Z1�J	ڰ���+�E*����+����2��vA��V�$%���%���^?��Ns뼷��?
+�E��)Q��Z���?j���>�ꢮ@�LJ�u����S#8/U�︰�O<��!�R�Zͣ$`�X�ds�H���.EUE]�L;��ԐL���[�n���
+Hw"�J������r��4�������E�b�<B�R���L<%J�rR���q�L}�5r�Ba�ab��춭����\����
+�"�֊���مE�T��s�+���9����n�#������B�h4�L�2(E��)���-��O����ܟ��_Q�Z�H���p���������������>N�:Bd��.���p2�.��t��nlo˟69r�ȑ#G�9r�����{p�hw*�f�ZC�U)�;%p~��<vX#�D1���ᰌf�9���R���0�5j�ԤA�ɮ��� D��&A�@��
+2Y<;��&��%�$��*W8!��e+�ѣn+�	�yS,9��T���re�|����2�/��1;�z1���X� ����לfe5\͗�tM(��W��ӱ��㮋[xE�a�&HU��Ys��LE�.β/�P�
+��,��4t��XY+,�T)^�r,��V��"Тbi�XL+�u�a�c�t�V�ʪD�B�V}~�x1�T:[o�[�N�\) z�Pgr9K�YM{��~��5��iZ6_8;�(�L�l����L�@��,!җ�a��O�W����@�VR�Rkd�P4f8�&���D�5J9�݁��y�+Q��"�I??�T�l>_����j�\-�ʻ��bI�-�€Q�S�L���d�+�yw0o�]�����`0��c�d:�S�P�� �-r�����{x|O�ܑ~�%�7�"|x|�)��Ӎ���h
+AX��`�@X�M�"��G��p2�̾�x_�O���7N�9r�ȑ#G�9���C����yΕZ�R-V��R)[��Z��i�������V���t"��a�O�ߠ���dt�ރf�ZS�l�s�++($hJR�P���7�e	���� ؊Y�����ɶ�.,�B�ZLqR�@�Ph[`��X|O�e1ە&���0즴��BwG�*W*sI�R�;0+]���;*:uXq2OqW�Z|���`X�|Y����s)B�I�	�X�"��E9�ai!�*��&�%�X�J���4P�Y���T}q�ςq�}x�<��"m�#֢ؠ���Ӛ�w(�.J������J��++�T6?�('(6�迲�P�i�������E8-��X���6��G�H���
+Y��hZ<����Wp�Y���Z�&��Og�*S�"��c9�Պ���|���trF,��k�����?��
+(^A��{�����8��M���ltrBvɕ
+)B'�b!wԯ�>o ���!(aœЃUB)�����w�+wS�7w�,�"�bJX�����u^����7(E�P�:�a4��ڕ�qr�ȑ#G�9r���kp���Ǔ)��T*��5+X#���aB0D	A�?���
��c2��@O{af�T����p������5�}U�������XH.�^�$,̶Z�M��Ǿ�1؉��{��:�Z�AӅe����Q�
+n�X���Z6.3H#{&Pݦq�GM'>4��5�3��?���o��+
+�����d�)�|eF5K��7�!�>i�T
+*BՠCL.���H���Z䤲"�Y�Og.�u��[��CP��V,��ͷZ�U���bc���|V�
+�g����?����"^�*��t=�+�Lo���D�.�^�Kd��z��ϟ����"�W`)a�6[_����r�+�l}�f���:<:
+�ÕZ�DA��f+�H�I��Ń�u*[��D�Wԅe����I��H�����__�R�T�P�x��K2�}{�����(X��WTŢ���4.����B��8�nr����` �!+�J��j
��ӍMHr?���ۻ�"|y�!�?��կ��
+AX���$E8]��F�Eh�dz�x��ln��B���'��ȑ#G�9r�ȑ�W7��-N���
+S��l��$R�H4�xA�?���\^?��9=^�ۃN��&�X\t$aiD�2TLSx*�5	���@��	~����[p�,��G�C��e+��Ǫ�s}���$�<W�h�+S�RL�����\*��QY���[e�\�����2B�n��l�"��N�U��P�HX*�\q*'g���c�d�����@U�9ەh�2%2K*�nJ[�%o٢v,]�/tpE�sm���)E�ӑ�I��oq���$-.,������֮�����v�⹲8�����Ŧ(�J���5�/��_�X�'[�;vE�:V�T�pe,�_��r{�������w�L>G#��=�
+��]��ÂjD���H�>~�\�ղ��d�P$���xE����\qb��3e��n��5�f(����\6��BraœI�4t�vţ�y9��{�ޠE�,��B�j,jA	��qy�D�
+@V,�Hf�9h�j"�tckk�������
+���y���/����_���oP���w�S�}�"\�]�C�"����K�U�,S�r�ȑ#G�9r�������K����](WҹB�PJ狩\!��Œ�P,G�I�?+�P���`8��h �þ@������9J�a���j�d+De�a����L��ةf��,�$���dG��R��ƩU��R%��8��A��L�‚��K�5+f�"倜l� !ȶ�B��	,RPH3�<o�2�5�`�����x W&h�HI"���r׹���/�/ЦL���z���V�B S�֍|�O3}��JyG��ߢ9�G�8�TQ�2)[kߏ�-pU鋷[Y�B~;�R�L�ye����wW7���(��W�jukg�7���a�;C��R1����?�������m<�ľ)�T��c�i|G�i�2!x��p���gg�d�W���K�H,��XxPgf0A����.dr�"�Z��^__�PdC���2ٻ��p4�⇺���)����h!A`�����M(��v���
�+�?�q�0��dr�R��@������.L��_���`An!�L~y{����z�xqy�p4���&���7�Sh���x����޾��#G�9r�ȑ#G�_�|����}�{���L����J"����h<���P$I���ܧ�p�����|*����W8�������	:�#�l���Lp��	R��
+E��� &�/S�
+��WW8���QA�b���v&d)����c��vWŨV|B�T�0 ��bP��ca	݂f&���X~�ب�#k><�YxV��������P�u;��W����X<��‰Zd���~|P�K;�Ld�C0V)�M��,�+��Z��E�j1���iANP��t*K��*����YV�����߱c�����<����>}�\���x�j�����h���=�K�Pus1@�����������I&��ǯV�U����(��1o'�>⛲+�/xy�8�Nc�D�Z��U,�V�_A���f���!	���MN;C�	�+�yw�����x8���"A`U��\���,��
��F,�\�:��1޹� a��i����y|>�?�C�(�&�Y��Z�5��>�������#��=�?��gj�� �׷�OO/�w0E�w0������`�2����&�
p��x��.Bp|�o�H�9r�ȑ#G�9r�ҧ���n�HgS�B2��`�T6�L�b�`4�ƣ�T
+�sU*�F���U�N���:�F�[�7��j�PL�s�D:MBa�/�t{�9)�㐂e+V�H��ʪ�M�`�X�~Y2�X�B!�5p��($�0�J!n+oe�Mo�G Y�{�9��PHB|�nc9AE���,$R����i� ��8��f&
�h��]$�q�A�n�4KP�������@_/(�����y�t�^�6e��V*!b	Z�T݉�r�E�b����Z��r��0�p{j��Ce��4���[9��X��2E�����8-��[�g���0,;�����
���������/�T�@+��:Y����S�0*��j�a�9��x||��f�U�`q�7�[��.0h,��?���J����j�/�J�a�o*�כ+9C���BՈ���ẻZ�K���R��������p�� ��b��^���DZx����T��$2o�\9�(���K�%D[P���B�H$Oē�T&_(U�6��6��a�����������c�;֯>�S���77wGǧ�ۻ�ɬ;v�M�'��?�t�Cp��}��/��5�#G�9r�ȑ#G�_漼��^�/U�l�r�T&�Hc�`4�'��\�\��:����P������͝������d
+�y'�^��h��L��Heñ�?v{}�HuHQW�v������p3�zI5�%���%,�!�� ~��2E�����`i�Re���+e�N���ł�Uԍ�1
��_�9Õ]���Gk��M��&AU7C��I�d1ξ��M�&K�ZyЖ���u`7��O���麨S	��d�p��uNM��|f�d���f'ŢJ�s�>�=�9̸��A���u�y�����L[��S�ӥ�R�{x+^ R9�֚���~��aͮ@���V4
l��?��쨚�@R*g{�"��\n���?���oo���+��"�]X�F��hz������."s���������c�Z-���l��@�<h0,���"��+4�?�p�6�����"2_��U�k0��}�L.�q0$I�>SÁ"�m�.,j�B^)���7�7�����C�T*���\�gr��˫P8DE0(I�Nt(�鼂��c9(��WP�B�����v�4t�� ay<������h<O&S�B�\���mr�)£cr���� ��W�"�-�_0v~z~y�x���98<�]��1a���'$E}x|�����(G�9r�ȑ#G����iw�x��4��X*��� �
+�ٓ�h<��b�d:W��Z��"X�wv���N��w�6�w'3HYivz��/�/�Sip����/8kSucM�n+Ķ�-#���"���@����|�v@{��.������[a�vF���@����P]�px�y�c�[�1���,,�1��2��̎���M�K�W��)���	TūLwB���.^՘�
+�H�l�lW��E�&��.
+Y܊��a�Yu �;1{��G�@*sq�_Y��*濫�&��a�"�ܽ��X0���EW�+4-O�]��S/8��F,����H�V��߿{x~zy���۟�������߾}�~{w?c�x�����o��O��q}}�����qa�j	��k�L>?�^V��^�XD�C�}T�K�k�v�?@BS<�N'��pj��1t�X���dE|S6��������&�G�(�r	YU���Q]�j��r��HU����-~1��o��?mnm���CZW��X�X���g��O�)��IA�V��������҂N����h9�p�A���w�
+��0�CV�P��j�v�?��om������_���`���}��X�>�:B$a�����/���t}�\�"�.�ɬO�q����^�8ʑ#G�9r�ȑ#�/d�|�bx}x}{?[(A�*��Q���rOe��j�4�����^�]\�sɋ����󫣓����݃���p<muz�j-�+D�@8JÃ8�^�#��	*;�V�`Ŷ`;�2ԬV���R�X���ڂzAf�2A���b4���R�*+��
+�A�kTy���r}��^e�T	\,^ݢm�6V>��w�-݂�a�<T�]��_��'�D��]�v~EiZ�E���9W�����%�u�)�f����U�.T�VIV�4%�FŲE]X�b�*�W���Vꢻk�^�@(�w��_��?}����r4w{��h�����v��������~˧_��ֽ��N����ڜ/�aV~��ׯ�t�@��r�R�t�X2����W3��Ƽ�ʒt{|�pU�F��U���|qo� ��c���,ON'�'cN;�T�\� �89��$��˫��p�+��U�r/W��F�?�
+�x*M�U�.�gn�2�N��r���ǥ�G�{���Z�\�#�U-��<y���*T����e�A巻���r;�n��pq�Q9��\@	Y��`(����x2���˕z*X���&NZ@�$E�)XH����3����|}}w|r���7����,��dD�7�c�E��
7�v.����9r�ȑ#G�9r�B����?~��]�Y�cI乂݂QHh�%��B��N�[�{�G���,�����������\^�ܞ_^��]��3���Vo8n���r5�̓�__ ��WvM_��!���)�}����W�%ԸVl6��Z�*E�\1��;��A��(�O���5��4�-f!���8/���E��b�xmJ�nUM��U��l+���V	kQ� �E�E��rAB1Pi&���^)&Ν)N�P�1Y���W,T���vf�R��->(`�t�F��\Z�)f�����a�-`+K�o�yP�K Λ�4���<����Ng,��6�O�.�NNOG�i6_G�4�/�R,�R�T*�ʹ|!�G�F�uyy�����������Н.,��2��?���{���b�$FT�^��luz����hz��0�G�&�mM_0��W�Ց�g:��P]`_�ekw�����_�.�n�wv��^�ш'S�i�r !��ܙ��Zmv���/.��naWbId�fs4��k�T&�u
+¢łԗe�,��(�	�·w��;;�<��W�Z�ָ����~�V�(��26���H�W8?H}Yn��2�0T�E-�sw{��&x=}��Dc�,#[(V����&�;�{�{�������ܿ|�����>���'��6��	L��؂5���&��"<8>?
;���P�9r�ȑ#G�9����H��ޠZo�әp<M��e ���P8Oe�F�7]���?<���[pZw��x��N��o��o�~u�wp���=��w��J�	γ��t qy�T�RVl6�Z^1%,sY����V��7B�Ȏ�|v�OP�Z�hQ �ea�H3yV� ��E��T���Z�֮������+��LYBi -��W⥪��v�n
�S��E�+�XP�h�L����vM`�3���[$)䮋+16�٨x����Ձ|Q�Ì
+�=�x���
Z�nbەE�?U��).��1p.0H'}�5�w2�d7��H����o���nl��
+�T&�U�b�R(���"�X��l�����p����b�z|v~vu}r~M&E��MS�;��~pp4O��B�ZEA�J���L.�o��o:��/p{�N7TZ�.��か�������nl�o�����{��<u����F�����1���a��#�/_�|����?�8=?��j�@\�N��͊@î��J����X,Cq���ַw;�A�Tr�<8��IX8HH�a����S_��j�f�������~U�����xz��ͶAJe�9A�_9�vj�"̓N�rbR��tr;��/�ۃW`�Q���` �c	�",�k�V�?��������C�u^���ǧ�"��/̅�AXϯ`����ݽ��t�;v��h2��IX#�"���������?�r�ȑ#G�9r���ךkzJ�������$\������!o0�'s�28G��o��ӣ��{�\=<>��������������zx|��w8�����V�X�&�Yp�?�N��J�
�P�Z��A�±A�Y�������v!ʇ%&�����pu���"wԄ0�"���:�4�a�N-�	xG�?�
���b�Y!2G�,���ʆc}�5Q���J�ZQ�K��ȡ)dibr�q�T�_�Tv����!/[�5�_iB#!�e�T���s�������N��.�Ӭ,�+�a�/�.T�p�P[���ޓ��򀊾@���jsiA�^���Ie�̽�9���
+�L|���R)[(�3�X"�}~�����H�Eb�T:�/%�a�)�L��f�G�Z%�棅���.����#�
+�"��'�/�Ë˫O�?�����i}c}0F��d���s}w��t~	�v���^�P(�D�Btp�P,
+�L6�H��d4�B^�?��5Z�ͭ-�e��˗����v ���W2�:|%5�P,�o��M�T��W*�������dc����$1_9��A�NY�����U��nl������k5T>X���{��:�yGX-Jnw��I�rr�]q�,VP�+7t[�7�qa!��\XP�ߢ�`0�D��D*�˃W��lC�|�oޣ���"|�)B�����_P!�������rsswrz���7O{�"���x�>�z���ܿ�.4�ȑ#G�9r�ȑ�/?�xe����9��	���H�����'�3�R�ݝ�6��N��)�L<b�
+� �˻��ۻ<>9���>p������8Ŋ���&�ٱ�XST�l_Y[#U�ȅ�le#V+K!�\? �M[��<�J��5ce��}�A�%�TvU��+�Hk�Qʤ�[IV�eS-�vTE����m����j��N}V�cr^,EciA��X�b� 5wq�*;�G�ê4$��tVA�G�>H,X:�eY�*Ѹe�JYW�+]�YD'KЏO.ta�&ݘ�__d�z/<�w����\�����Z�����r�X���D��<�������vN����"q��ͣ\a1�J���^T��T���JX�x�X<�N��YX�W��
+xF�d�R�����ˋ�Xywsw~qyrzvvq�������Hv+���H�˧2Y�OGc�H4��H���������r&��&�N������yg�0�L.7����	+�����j��AX�(UFD�Zm{o���dg~Ł� ��0xH����X"��E���v�X��o�g��	9`�R�R�%�vE��+��-���d+�s�XXx���!M�����f����`8B@�i�ʫ �h=X{{��k��1�z���	�����!r[!	k��]X`c<n��(?V��9r�ȑ#G�9r���������T.�'��D0����`�������2�Z}0�n��Ӣ�+x�z��W89�oo﯐�
+�wp���;��Cl{�����T q�����4
�NC�$��y��@fWU���nZc�+��'�k�%�[W��J�UpEԵL����(�ݤ])�me��5����/��L�
+�uM�Q��6g��LXӣ���b/!���F�'��H�"|W �j��w1�C�/D�����@M2����E��{���*|�Gn�(QxE�,Ԡ"ܵE�A����u�ח����3`���
+�d�:\.�V�*�#�r~n8�;�No ���H���)HE4m�~e�_E���&���D:��r�U��BoA'X(����$X�ޕLfsy�w��[,�������q����#u�*�����](����t6��c0X���T:3��ַw���D��v��΂��(^�`$Z�50"�T��K��xzvqy��<��Le�N�gu
|h"�݉�0
l�v"�.���^�ө��P���K�J��#���b��r��Y�.D
�B�*�k�:BJz75�E#�.�)X>��-w�P$��X��֛�Lnl�����%J>>=��`�"���W�"�6�������t���{0E8�g���x�1�̆�Io4�F�g�����_O9r�ȑ#G�9r��������{u���۾�ޗ�t?�m+�9�l+K$"3)Q�"Ũ�s����P�]k-���:=�>/{�
��Hɔ08k���׿���އX�@8�%��Ú/����~�Se�����$Ln���������g�2�4v�}��C�������T*7l|����G������WnE�p�m.si0b�J���
�%��3(u�x՗d�geګX�J1E*�
����		��rEa�D�"�Q��n+٥p���c҅6a�z��0�2g)cJV�WTbB�=ίŤ���2#IY!����\<>��K���1Y)n�f	�j��T�̥Z�*��F�
+e����)����U�ϩL
+n,O����-+ӗEZemW&����O��MZT
+p��R����xo�����r����%!�	��5�ti�~ʼnTN^,�H��4NG�`$�\S�=�1� S\r�L��J�����?����Z8�c�St�8>��k|�C���ӹ������T�0�Ju�b&�JŸu���)���@0B�0��)3�����������������x��'���Jْ�{#]]=}���$h�3��K��A���2���T��~ѿ��#B;Xk���
5���z5Y���4s�^H�2�+p���+�x���R� E^�P*���.��WV�7��l0�F���w��w��]�_O�?� E�Z(�M�T5��Q�p�W��,�k���S�Cň#F�1bĈ�g錱��z�B]ݡh�X#Q_(�y�������^_��;�L�MM�-,��v���>������#��h�Z��1���!���)㳔�
+��@r0����
+H@0�,X.X ���ر��M�E��!W.��P�eM���.B�]�٤�K�zd=W�N7�l�0�(ى^E���+%s����#�uܣB#R�~@�K������Pk�"B�_�F)�D�E��m�R�;o��NA��	�M�B�r�+�+�J��I�+V6�����b��3\IN$��/�������ߝ�I��(hF
+�# !�����ش,	��6�J+�"t�������l��>	E����ALe�������n_ `�����,�A�����i���2P5h,�`(��
�����t|zxd4;:�D��X�B	iA��+�^_ ���H���d\$��WJ�ML..-<8���׷��ÃC��������������·��ã��թ|atbڮ�.7�2�/��5~H�R�~E�+N���($,�&i5!&_!��4H��J��^j�����;����d5������Bqnqqem}sx�`��+J^^�H� �K�"<=7�0�������I�*�"	�P��|��?��d�8�iq#F�1bĈ#F���ɍ�#Q�_uu"]�`D��݊���ݲ��E��djt|�d|n���v�v���F�>Ɨ[�+k��+PbU�L�F�to�`W�'���������QȎЫ�������`;C\�x<��v��)����M��rC��,M2�L�(�=�Ƨ�hPb[�n"[a��d;����P��Nh�Y/���H��ͪ[��V ���Vx�Q�"L���Tq݂�&A���6@^�rcX:���{ܪ�(�\�l��҂�C�]��=�݂�b����E���~�ei^����T>�H�� ij(���N�e���lJ�l�ti|<P+㼲X�����L�A	��<�xo����@"��l"������AEӑ�JV��`�:yv<�!�y��x|yembrj(�B�.�Wh�Q��Ƽ>�BE0Z ���*
+�Ñ�u+��+�L$3����L�TZ��<8<�xp�ևGk������Ladl<�����AН����uFhBJ��q[Y2�:a^�=�)^1
+�&�Uļ�-l��l����{A!p`�;�����q��m�?�3��zyucs{�L~�lggV�)a�.�O������"HN�� EX�)B�Eh��{���#F�1bĈ#F�����h8
+hW��� �ª��R���l�T-�����cSy�^XZ]Y�X]�Z�����������rqv~&_���0>B
&��+��t��k|D���a��$	��p��D[�ڍ5�_q倒���Rە��ZX�)O��_�>1w.Bh'_�J�Ć�`�!�,;P��Y)$*([�-|.�������bê3	A�
+HwsvF�)K$y��l {��R|� 	R���P9��ݖ���솲+T�M�r�e.���d�~㕒���J�9�X��-c�.I;<>I�z>��̍�.�mD�q�Q�"������l������R�t!AfQ�IVo ���)����p���{�~��db���j��f^ٔ}p�=�r�GFǏ�O�~u�4�Y�����L.��i��q���B�
����p�63�Lb�<��JVfxt472b������H�2��
+1�a���sj�F9]˴Z��L�J%F,S�򐄠)[Ay
+��Җ��Ѕ�%����0�"�"��hW7�`
�inx�-g��VV7��w����q!�`���ȅ�����9���O>���/��gO����tu�"D;Q��"#F�1bĈ#F��\^^���O��t;����h��[�UCs�����M-�n�������}*o|,*�-��/�-,��/g�A�za|rfdl��(8����b��1�+d-���'25��s��.$4#�`iik7�$C"U�r�EȦ%�"�qI�@ZHD*jy��`G+,|Y�*V}��*�!�agZMyJbR~��A�yE�/�K�m�ȉ����H8�\���|�$2�+V�b�P!Z��Ar���?%�t��^�H[኷W��H�b�P�U�����[K��aPq�����Zkln������� �̥S�t"��_\ZX\r9H�_����h�blT$����>>Q��J�yc����c�әЂ���@�
�V�f��4�X��6�r�AQZ������wv{���O�܍u&;<9SȎ�O�W�ܥaҲtvHF>�?nW�@b&43ƋOg���ɦ���N�}��XO_$��*�å�p"x
+B�"�—bf�Wc���[E4.
��P5��PW:T���
+^�����%,�?�
�A aEc�XOoO���Z�2���z	��wPe,P�Nq��;�"�.���g_�|;<<���]X\��R�`��!k��`�
+�y�&����~*F�1bĈ#F�������HW0�+_(�����mu��77�~����7��54����Ec�}���jxlbtbj|rf|bzlbzdl"72�ɍ�2�C�L�`��0�
wF������E���`����BF�jG*��݅�d"��X��,,�^��@
+�rc*;Nr�+�9(+����2�X���D�V棎�2_Ț�8N;]������O1C��٫,j��"��+��U�a�p*0�T'>Gk�D*�r<#(��WsB�[d+���J�(Gֺ�7�}v�Hv�ZI6!�\�ϢA��?���;O���P:�����7�GG�[Z��1�g��`���p����X�O�'M�����ɩLn89]��p2��p�Q�"�\1�A���4�CP�)BU�:\�hw���E����~&��Z�2:>������N+��dC�2�
+�C
+} �����vG�cݱxWw�+�tEÑH ��|�'Q5I_�nnh�N�U���1byLI
+z�p�N�Wf���]ج�`Y���Et�7_�m�_y|��� ��XO���o �JeGF'f����5@-������3����!�.����_|�vzv�������������Bqr:?��sH�t�bi2_�)���7����ں���#F�1bĈ#�c�g
+�:���"P��BS �x|������ݻ�/^<~��X�~����٭�_��p�1>

���`2�փ��@"�;���
D㽑h�qAo �y���n|����F5d�!*��ڰ�5ba���m%c�
+���
+I�T@����l	��?�Ju�$HPW��Q��"~�jSDԢ�A���ҥp)B�b)T��+"|�:�MȲE�^B�r�TSrY ��~z��ȣO��,M�؟�*ǰr[�H�R�'�Z�l<v�G��SD�*Gh�}TP��Y�Mz��Y��e��UDr�r4���#
+"�S"�_[_���8<h�X9Z�w��4U��N9�;�t�J[z���1��Igs�\�x�������@(,+������?D\G1f-��<^o���ãC�I��@a&�=�>:�}^X��M~;y:�������0�]'z�C]����B(HDdxK� ��NS�̎��4U)s��_�QA���
+e�CK	1��Z�6:X�Zu��X�P8��������J�*B��ZX4{7>~�@� EhR�P��'J~)��;���+��y��Ӆ�B�P�-�C�{iv
+[�N�~1�&��+F�1bĈ#F�1��s~qa���W=�P ��w�7V}���t��64>{���'�>|��ɓ��_�y������V��L��?��F������XOw�/����Dc!H����/�֚��-�?��!��C`+@���W����
+V2v[Y�I����]�t�Ȓh�c�;d��HI4�&(�Y����nKH��Q�;�k�	�z�)� CYwq$v�Ԣ~'Y�D%Q��-�AK�ρ��r1@�f�"I=��p%����p�+��?��ʺ��hW���k���JbP��	m
+��8=��XU����:;������ߏ@����;�{�/,��/c��X�D����556�ohx��`�����\ż&�m'*�W��܄pU�'_(��of�G �
+����on���qW����
+A��I%��`�mE�5]�������o����W�2�L$?}�j�aQTE�6��)�tX}R��J�1��B�2��?�{��3�D�mG_�Pc���hS�@��Y/���m�U	<
+��8��=>#�����7�M�;J��'�)�`MN�K�������z
+-X�����M	������N6�w�@�p
+JU��R�A��3�Yr7S�bĈ#F�1bĈ��4��P�B�������{�%�����۷��=������woݽ{����O�<�����	�X������������4>NB�
+~����r��6�W(B�������v��
+�X��%�+S��	AV��r�dP�`"~@�RD9�(TȸE
+�pŧ3
+:���(�J�}V|~Ѕ��*e2�m�E�+k� �t�\�,V}�`��� OP'6*�^�CT1 w�
+�IЭؠU�!�r�
+Y2��Y;~
�]q����Ro%�I���(ЂFw�����rduM{�����q���tbp|jjw�����f/���5���[�x����'�WV�O�./�����������B!�LvF��ZZ��Ms"��5�8�璤xO���Iiv6A)��xx�HA��_8�G�9���6@���t���iv~���?⽽0?:�dO_���Ϧ�
+�Uj��}SD�RY%�CY��E,UՊ�R�
+���
+i\��du��(c�n�A�*��3�-,Uk��HB�U,�wմx�Ȼ�O���`(
+C����k0a���NL���W�66�v>��*B�"4)X؂��/.���������������2LRVav�P�5S�����qO�[X7V1bĈ#F�1b���Nfd��@�*�E<�����Uj����ѭ�w�ߺu����wn߾w�������_�|��]CcSK;R��}>P���'AX��3�+���#Eˤ`A?��R�@�QQ� ��:B�_�vӂEB�f^�*7-t�
�2J�B@3�GS�[�@:��1��`S�bWT��L�hbXqR�\�y�U�d,R)�T��ea��c8[���$E�lQAV��$
+Y��d+
�X
+�Ww�ZɼB%;Q�� o��ldu��᪜fe'_���5����b�X	���NTY���KU�>yxzv�����`��`"1>1����D�ׯ�O�윚�o�~��������o�?�q����ɧ�ݽ��c���_����r�����fw<�~�,,�jzSsK&��xp��咠0��d�b�����G�"��L6	J|)���d�/�`����c�>�B�d�����wvv�76�d+:1�+�T��
+��(�
+�P��J�ʘ��/5�������	��ZY0B�%�+���^�9��W5�7C�0KL���E��>�,������O$������t�0���������a�������_�o�sj����+(a�.¯g'�>��.�����LA�p����51����cčU�1bĈ#F�1�U���k��O�z ���B!�R<�vYihi}����g��ܿ��ͫ7n�_�~���k7oܼs�V���|����7��74574776�4��5�u��$7$Ҁ�w^��1vai��ej����Q�[�L#V{{[G��3iA7���+	ì�d�X�Cf/!�tJ$;��b@X�I�rpXYJ%z��!k�����fED'�H���bvJ��%�
+��ں��Lp��f��ABl��`v�Z���EPWnU����v;q�^h1P�ߔ[��.t��7,U�Jq��ނ%;�TVד�\>�YN���Ȇ����9=;�eX����Tzd|byu�����eb��z<���+�[�O�O����'��}}�]]���H
$�Fw,��{��g
+���M�W|<<L&u���Ƚl�6��������6Q���70��a(�A�=�S���Z���DM"�+&?�$&|����_��x��l*�͗JS�M�ͦ~E�WHk"�n�������ƺ�h� Ҹ<���T��r9A�>�XX�
+uz,�+�:�Xe
+\>��B��ye���\�L����P�0
+�:��?|����p(�6S�sK(E��S��NOY�;֯�������ã�������N�f����<��!H(�-w��2��,n�bĈ#F�1bĈ�/�XO/���P�i����n�}s��ׯ<~|�Ν�7n�]�V{��,Wk��ݸq�Ν{<|�����O��|����7�޼�������8�@�}��̞w���+N"T2�`t9*$E�X��w�D��`%����(W�E��&�+V�b"��N[Y�������+���hTP�x� �J%G2�)��b��sK����,�*���ÃD�R$'	���L*���~%�N��
+Gk��sڕ�:\H��mI@7�}ɶ
+B�5�����G�Q�*o�2+�խ�|u�uy����իã��p�0��+c�Y^]�
��$����K�����[\X^���^��Le��/���P2�J1���1&���d:�70��׿��|�����/�˫]�q
�,pF2���ֶ�ɩ����T:���O�ǧg&���K�9�ʔ�p�P5
N$�g���CM�edl���Kfd���T6�L�C�+��K$2�N�'
�2�+�j�yl�����Z���q��>+�Y!H;�{Y��ۑ0�i��E�W(��,$�_�t��o�\�>�h�
�� ,�q����^�`�2�ѱə|qnaieu}kgo����$�;;;���D֯�Ă����%H~��������q�L�815�S��0E��3����b�����1bĈ#F�1b��9���X�|��	�A���P�
+)�ץh��7
�O_������[��_������3���ښ�uu׮;oܺu�޽��<x���c��������������x����B��ԯpٖ�X���-����~�rq,���v�ۂm��,�GƎ,F����9.�mgW8*(aJ�����ͳ��D�b��n��b��	���Ĝv[� ����}�.*
�8�¤���ߔg%����ZN�*����B�f��iP���(1����MYR��b���+Z�3�,x��e��RH%����ᑑ��#0�RrЂ��_\�K���Ey���T�xtv~qiu5�J
& ;+�N%}����X������_&�GR���eٟH,���ml�nl
$�<>��4�s��|�r ѿ����EW��(�:�Tv8�e W��/i�|�	Y*ƶ�@s�����
+�������ܞ��o1��t�{�].*[!)ɔ�4��KRLY�f}T�*Z�s�઼T�"Z�ǣ�,!Ƴc���� 	���)y1�B�habaH�0ۑ��.,/�_������C@�
+G:�����?�S��3�"x��ol�)Br')BDq���X�@ ,�"�]�{{��Givaj�0�����!�9���!n�bĈ#F�1bĈ�/�p4�Ϋr^y!��5O��4���~����߿v�V��k�@�����������������7�_�y��m�b�{��ѓ'�_�2N|�����������2��O$,��8w/�`i��PC�Du�j�d�\H�B�U*"dhWl{`��݂
+e^I�N@ȹR�#r��Iz2i�2�XƂE�V4�gy�q[a;�_a��2�)�]�f��&ƕ�l+�Q�8�J�v��AN�b��l���Y�e�ƥP����8a�U��e7YI��*N.,�6��*�9]�l��� #�ʕR&Th|�o߿�������]&�Q�t&144�/�����{��-x�T67<>>7����T*1�����F}� p�hX�:h���C�]�޾�D�X��a�`�����tq~a�4;04d�v"MI�</^�u>|�00400�H����^s&��ÑN俢'��?�ӈ�e�TS/B?(������T����R�,x"��L�z{���ƟSD�x���fŰk�������)�YL��Z�<|Ϡ�-H�|0��ѐ�d	��(��,D�������-h���-��,��?������;��o������tavnqye
u�gd�)B�r�i�/��)�s�"<:>���[D)B�‚]�@��/�`a�(�K����Ҋ�ۊ#F�1bĈ#�?�?~��
���H��!�K��3>
+�IJCK��7o�?~|���k7o�^�Z][[Q[s������خ���������z��q��;�A5���O_�x��
h'lljnE)B�
l�YG����?�ʘ�n,�O�a������S������ idx��
I�,�p����yE<T]3�p�"[ɼ~����Za����]P�"��&A���9=�ڴT�?d�#�ʪO
+�f�\����m��)m��I����r,|)�%)�-���ш�(U�|-�\���i�&;4���������n׿��oգAG�6%S��ѱ��l��O�
��y��d�G��D25�J
&��x Ru�N���-ɒ��
%_IVdE�=^_ ��$�I"
Auhȸ��L>����
@6J�JAP��k�{{3��xoo&�3Np�Tzt|�+��z��.L�0�@ԩ�FÃXg�!,$����3���	����iw<�����T�e���ʜK!Tv�n�*d5}�`�t.W��$Z��S�m�������H�Їj
���U�T9��vB�2C���S���GB��HW7��za,5;l����˫k��;{���G�'_�|;=E���!�ԯH������(E8;�8S(MLf���+�R�;��狳s����q�#F�1bĈ#F����?���g���q���Д�nUkqI����~��ɓ[w�^�q����������JueEMuemMEmUu]mm=�a]�a	�=|�����/^�z�Y�Z�;`�[�������+�e|�D� �ۀ"B�"D-�$E�@X�nJqg*�YQ���s��ʬx�/��F,����.J_W�� Ch璆ĵEӚe��ekc��!�"L��Y�*Sk�&���͛��6��U�bE��B�#xJr"��KJ)s)�^�{���w:�,WS�ӱ��*�a��R����7�\���?S��5�T&;5SH�����(��iC�������L"�J���|���1B�"�PPd:h�$��ƃ2��{|��h8�R���I�Rّ���xW<��)⿂�yM7~�s��3�����/5_�O�FF����{
+�t�	>�1�Mq�x3�����2^����*���)�\e������h�����
+��
+Y ��ԩ8l��:������v�D!��Ik�Ʃ[ؔE$,݉�[��`�u���Җ�jg�+S�!As��~<ZX�2�{��
+G�]���xw�`
����t�4�������������ɧ� Exz~qqy�t��HX��N�N>}�����^�]��y�"� �Y`�2�4v拳>�{�1bĈ#F�1b��9�x�t�����W���P��v׻Ʀg��܇�����k��fU]u���HX@����������)�[�nݾ}�޽�?y�����o޽ohljjmkm� wE��'G�~A,��a�+̾F w�tH��X�ŝqa��Nz������v�.X�����Zǧ� V���X�i��e�,��+LVq�O�s�����0���ذW�J��.&��Vl"����Wl��m��ܘve�Uq�*�j��T9�J��Q�]1Ӕ2T+���J*d�Ri�n�R�U,MqP��1��J>���Rqmc��GH�� ���xnd,�<I��b�����|	����⽽��놆+�_b0Y�E}RYyMQ|����d�CD���|Vnd4��B�pW�����nU�76���W��(?���-���.,n���F�W���E3UQ��Zьw�q)�$����[XZ�ځ��qz2�NgrC�tO_�����
+S
+W8��=&^����K��y��n5Y�JA�$d�U�qUǨv�9�{���*�a-�X�Pfz	,o�t$X!!����B�k9�}~_ h�Ќ�-�`�zb��}�d
+x���y�"��������/..a���/N��S��N��?��~XZ^E)©|u�
+��<��@A��/(n�bĈ#F�1bĈ�fck�Xw��zCa���@��|A��W�>I��JS[��Ʀg�^�{�����u�������TU����ب�����������յׯݸq���{>z��鋗/߾{���,X�n�U�*��+
+"�
+e��G",t�#��v��jikkw�pHx���Q���J���}��C���!�ݶ�A�n�i���헡��)B�K��A7�3H�+��2B��r�v��.� !�ș�T*@�-�(��#Ґ�OJe�U�~@Ś��Fc�b��e"��R�g%���W�4'J�-U��p"i��ċZ����O�4O���_��S��p{��ix4�ۯ{�Ư������b^

���$���\���,��@*�"���|��d��f����D4���C)B�w2}S.wg�{m}cj&��/(��)�JJ��ͭ���GNjK�ãc��x8�E|����;��C�#c���+k �vp���<�/O�L�U2����tu+���<�n'Y!s�N5�&&���v�@����$-hӯL���!�Ƀ2��EV<�t�c׈����<E��P����pc�Bʕ���w�R��^��Ca3E���Lfx|��1�.,.������c@r�)��K�_�$�a]\~?;������������’q$a勳�����@�Z^]�_�4䳸��#F�1bĈ#��h���O�S��r��W~�������٫WH���~������*+����ЂUU[[SWWw
�܍Ì��޿�ѣGO�=������!��$rWЧN�DB�@��	�_a;�
+�)��.���eFۍ��iK"D��{�d�Š��/I������(0��	;�[gE*F�"��N$�+l��N���RT�r1�+�v�d���
��`��e�&L�<�>ݮJ�m,,��f�'Mq���.%�vq4V�&�5GYlW/IY�����-��omWf�O3��7��~��e�P����3X��dӹ��DH(�������`2�����j����&+�svi�%i���~�Lvxk{'����B��J��#����`����Z�\��ŧ���1x��R����g�P,��o|�����������������ǃ�㓓���ã���8<>Y�ܚ��exd�x���?���y}~���+�Rq3�î۰���٢t&�JX�H��x�� qm1
�@�x�` �Zy�� T�LV:��x�D]��m��y�3ABS�"Z�cu�����ȑ�)� �`uEc������P��NL�K�K+�ۻ{�X�:;� w�"��'�"4�����O�𕵍ٹũ|q
+v�Ks@šE���L޸�q�1n=��׿��W�1bĈ#F�1g�����!O �z*R�|�|ƒ.Ek�d�_�ox��ս��~u��W5�W����JeeemUeMMUm-�`��_�Z��޽����Ǐ�<� �&�"�p�d$Dh�{ˋ��^��У@�
	�A�VIR�	]&������qX1�A���}Vn��R�x WȻ��B@��I��r���\�b�S�uXk��&F�y''RY�U�'�ͤ�܊5�g׎H�O�E�A?�Y�����-�*����].�˲�Sg�ҜpU�]�����>�'���[D*��C�n��p�����"�L6��$@���{
+����ݽ��L6�۷���ꂉ:��zi
+-�3���� ?�Je(�ϽqH�3观����d
+�W*-��u��`8����?848�[��0P۠�1^���ѱ���������������qg�����������������jB�����������($+�M�� )�!팖e�&ԉ��a�I�P�YB�aP�E��CE�8-h���
S�2#��pE�)�|�I�򑐠ɶ�!A�(��td�2�{P��kf	�%�`(�J!��+ރ�����e"_,�fVV׷��������o�N���///� w�"4�)�� E��V(�MN�
+����4U("�q�1wa1bĈ#F�1b�����`gЯ�r���O��d��R�V����f�W��@��:���RU����+�5U��Uƪ[���a���ur����^�z�-X�m�mn|C�
rk迒
+C����X�:Z��;\uLQ�-��XJ�a��M�\��S�6q1��E�h'�B�y˶��Jb�W�:�׹���X�}v��)��H��T��,��O%��C[�Ov�S)jً�U,V R�G���f��4�9LÂ{#v1QA�3biܗH���̋�kj�vz����BPiJ#����gߋs�C��t>���e�:�]U2�Ui*í��%,g�>O�����}xx��
D�#��چ�맒�@]��|�#�]���$Ce�%�Ch��D8�2@�6��Q�K�V�X��=�M$S=�����`(�{��w#���-d�W:G��n+�ՔE�*�ZES�T�"2�j$WH<Z:c�b<W8]�S�����nr��":�K{M#�������5�
+u��qB([阅R�Ђ�)�.���3~̃�d&72>�I��#H"�"��_ ֏��p������������p[��L� !�"��Ƨ��[�����X܈ň#F�1bĈ�w��?�G���	�W���v��{e��R�V���������������7���*j�+j��TW_�����^��ʊ�*`�2���ګW�^�~��Md�z����}���{ro���۔��A�$D,EM�I7��Ѕ�i��
@��}VT�R�@�i�8�W>�p ,�J��Q��O墮*�B��슝���,��;�܌�Şk>�:+T�:�����)�t�T�����*���Ձ�-?�Di��Q��+�R��;y���Ʈ�K�S��^G�A?�յ��
+������I��+�E���2�\vx$72���B�ȷӳ�DBU��]ӭ�v��г�5|*|4����ۅ���e㩓�b�F���^Ww��wiĻE4%S(� �*F��h,�708�҈�	
+��,,�F���}�X,���A���CI6�
+n�@�L�����'ȃ�ם1biԲŊQ��Aw���VH�"2���5��yeҫ����+3�b��^�e���`[�9�&���S�)��O�Y���Ǿ,�t�,��x�$jy+
+�@��O��]��Tnx|r:_�[X\Z����������ӧ/��R��?���P���a]|?=;?���������q:�^�a�L��T�4�/�O͠�D�P�1bĈ#F�1cݺ?����
"�ye���WRc[�ۆ���<x����{Woܨ���������RS	XU���J5�_/Vmme
�_�v����nݹw���G��<}���+r�,�5��L����4��_���ԁ,XP�2A�.�������p�)���e[i�jug�b楳v`��
+��!��N{�Tn]a�(�Y�Bޝ�N�P�H�H�M�"��N@ɉ�.�'�[���$�Y�”�D���P��2N->��sy��Nd�;�����z�f3Y������%3H�Q�xYQ�_����B����)�,\�ɔ��Ҕ/�����#�>N�RMm]_cu-�(]P��ғ�i�p#�/_�D�����T&C�S����#cƯ[��B੨�� ̨{]�}>�?���G:C�H��3j������Í�JY�/Ma�Sf{��e7���9ҫ(����d��V�Q�Bng�X�,��6jL{�N
+͆A6��L�"��	"��\a�K�0YBH�b�Wf� �K5+�R��,X��0���?
+S��щ�Bqv~��v?��!�`]
+�����	S�g�G��a��8:_��PawN�.©<�NE�P�1bĈ#F�1��ӳ3c���;T�����|�yܪޡ�-Rck�����o�>|������nݪ�v����
+� ��RY	�+ aUVWU��T�`]�~��͛��ܹs�ރGO?{����7���������%�dR�4Z[ϥ=D �'䞂�$,���\��ȂU�U�Q��T 	�1n+ָ�X�Wn���d���倷��K�|�B�#��J����@7C�r��Y9Y�L2��;R��CJ�I)�Cwd^Y|YJ���+W���Jrƭk��B��9�f'��N;��V��m&+;�9ۑw�5��Rh��U���{{��O���d��'*�Mgr�H�ׯ?t�W��:�aE.�%,��*�O�	�$ \��7}<���r�d*f������Ŗ�6F�R�����8Ҕ���(��~�bFqe�$*;��hVÕ���"֩l�+":隅��ڱtޝŲ���
+�Z^Kl�W�t��n
+ST�b�)ӎ�5�+��!��GC݂:�ey�L� R�|�~���\�� Gn7�,+Z�����@0�B�pg��;�m���R����$P��W�6�vv�?�|�����������wb�2%�?~��uy�������o�G'(E�*(U�g��Ȃ5](MV~}kӸ
�;�1bĈ#F�1b~?�@H2>���ԯtF�R�������ś���=�}���۷�]������VEŕ����⊱��������������������)B�r�s������>}���7o�64646�!�`��g����`A�;	y!
��Qƹ�n����!�������ࢂ2GtW�-��f�b5(ي�rY�W��f		�]�\��$Y�XX��m@��r�?V�rۭV��E-����;z�ʵ�ɿad�G����T+Ǯ@�cU�����%,�|?�}ے1d�R�u	����:��re�I��(�+�kk�X��3i�Jg2]�����h�GeD$6E�mW\��B|�PÕ����潽���T
+;���lnrjrum�xT3�E'ߋJR~��D-�����Fe�Щ��u2�.�1b!_9�,^,�Ya�U��w�Ø�<|�n�:�q�
+B��Ž,b���[�|�����&��K<W>�\��
+��
+z��~�m�e�=@�B]�������{�}}0�9<:>5S(��//�ml�.“O���)��ﴈ�	�4������������&�")�|Q܁�4%����̯?�0�D?~��c1bĈ#F�1bĔ����Hw�Wȼ��ү\P�j������Mͯ޽���G�nݽ{��ͺkW��j+���JMŕʊ�ꪊ�*�+�������������Z��`�0A�?{����7���{kS[{;�`���|HğӶ�I��J@��]���U,`ŵ
2�v'�;�x�x$(��*ޣ��c݉2�T.��?��Xu�b��tB����hϠlCZ9l����Ni���I6
+�%�gwO�
ZJ�Jq��KqP�4�!-���9��]2g��
��iN̓lHЮb��-Bȴ��n%'�1\�]�
+M��������㓓��4���Tx������tvX,&"U�p�uB�R�9�fy��Pcs������J:�C��F*����,�f[����(T��N�T�5�B�҉��	M*{�O\�I����b�'�g��M
+�XX#���L- ����;S�c��` �_a��Ni��
+YH�ҡ�q����sӂ�X��1n+N�2�@����fe�qS�Y_�����PX����xO�t����񉩙�����������;>����"����d@�e�/@��������2LN��3��B�gi�p
+���hcSܔň#F�1bĈc������WDkWY�J��[�ݪ����WCs��w|����;�ܸ}�������ʺZ�Š�*�eU	����Wuu5�uu׮^�q�ڭ���ܽ���'O�>��
H6457�`��)��9���i��B�*	d	��R���a��M�~�
+kV�d������G�Ê�\1*N�b;�H[L��i�RU��I��جňN���(����d�P܆R�Leaa��bՋ�2q�r+����6��+���D��������r�Y�q?M+��VY�VT���?�"s�,�
+���ǨQ���@M�e(������4ЯL:4be�G��\ 1}H��iU��b��(��WC��|���N�������}���d*���A̧�ƒ$�G�X�/89��9��	���mi����@;�e�3"��#	A�b�"-��Z'!Ab�œ+3hn�� E`�,w���[t��
+��$<����p
�[�Q��B�70c�(o��y�+wF�c=��������$LNJ E�������?�vzvvqy�����[��������/_�om�.�.�Y�2S3E��*�]�������nL߿wg1bĈ#F�1b����d([A�
+�%
�W��կZZ�64�x�����=�u��`]�Z]����TU@�
+d	�=�5��U	@Xuu���ׯ]�y���ې����ӧ�_�z������Z;�@�RL	KC����Đˤ�S�B��2S���HX46%��H���ds��[�T�2��c'J#()Y��8�:���Te[9C�x�;WHW|TТ_�����#��UI�_`��b�£��F,��iw@��МC�ϡI�R(�,XHϑ�1�S� ��h$P+w��A�GR+��HX��"l�ϔ���ǃjA]/K����� �L�*������wEc^_����c׬f�3��F"{��d���߾�NL��-����}�v�(UD�wt�c�YY�:��,a<J£~�=e�� ��C1�¤"�+�,D��B�:>�C�(;�H� ־t�s�-X�0�x�@��ߡ��&i�GI� ���+�Py|�2U,���s�
_0G����{z���t&7269��V�6�v�>|<:��@�g�0DS����ta�.�S�"��x���57�8],M���Bi�8KS��3�����ֶ�#�#F�1bĈ#��x�A��)�y�d�#��ׯZ:܍�m��_�kx��Ճ�O�<0-XuW�+kk*j�����Q�ՕU��^][(X�~X��ܽ�����O�?�����!Ƚ���$Eh~tŋ�E+���`uH&˝HX���	���R��Ên�ƹ�U}�#iYL��W���J��$^�2�,QEQ�v�뿲kV����l�=G�˞���l����d�r@�A���N*IV�I����$	E�In��*����U�[�9��+�=��0X><�p��_�qq�$����ť���UGAB�126��|��^�㱪R�����\8h�fX}2^��XY�\���������\"����[Xjhj�43�h8�gI�iM�<�]g�T��м��$mٳ���ED-B�Ҩ��V��*�-�^��O�5�i'�,͒"���y/�V�X���u/c�2���h��*!$P,�v�'�u�'������Xc_�V(�������
$�ҙ����Lavn~i�x�|��xxt�<X��߿�!ѯ~����};;9�������R�3�U)Bd��)�P�t���w���
qk#F�1bĈ#F;����h�[�e�+�H��%��,��ƶ����7
�/^�3-Xw�]�y��ڵ�ں�ښ+�Pª��RYUQ�r���)��ګЂu���[7�ܻwZ���|A�

M-M-m���̂�����M�Kk��4V	4�;��]nRDh����ږ���� ����2*$���)���H)H+~Ca�-����|,�JU���+�[P��Iq����{�)W����u��m�F�b�2��&;%�����N��fsmie��oJe�~���"?��5	*�MnJ4l����"�;�>�.I�tEg
+���hb(E��t6��
���@8���<�<Q����Z@E�ž��'����Tvqim|r
+\�Wƺ���P���2�C��u.�S�t�������U��;�c�A^����)����j���Wq�v+��a^yh��fԻ,Xu*�A�����N��*�t��1�*����p~lxI���vB�_���
+}����"]������;�0�ZY@r�.���V�7�wv��O>}�����`��]�T���A��v���J�875
����,a�V��Js���tv~.n�bĈ#F�1bĈ!���8���ʭzHr�WH�j������,X�������Ђu�Ν���aa핚j$���Geŕ�Jc���������j��@��o޼u������?|�����_�z��]CcCsss[{JʊlŽ@��T����R�)B
+��������U,��I qO�����Q)��tq�j�`qI@^������5���",���*��.�S�$�iJ*o��+o�s���.9	VyV�ֿr�+��E�*K�*�PIJv�Ԝ�X�����JA�y�����g���?[Q�J�/�$uu��&���@a!�U:�L��&&��l:7�7�����Fa�N���8)��~���`25:>995��
��� ��tvnj_4��倫RX	��4�rD��1CMs�r�*�\yi�!R��,,�.��iվtBb�V����{T6*���٪A�sG>+�gE�X��eż�^,�2%/r�<�
}>�J��j\h�BW�B�i�
+�o E�HW4�����ᑱ������2L~�?8<:��t��_\^����]\�@]���kKӅ�d��$,�r�)©Bir:?9SX\Y�f1bĈ#F�1bĐAM��x�?��J��+��v�j���I2���on}��(X/^�(X�oAV}]EM��o�w aUWWB�����_�v�捛�o'�{����_�@��M E�
+A��BX�ą(X��B?�@7s�X�")�֎�S��x�� !��s�D�L�ZĻ�][2G������Q
+g�b{	��.l�r�3�3��g���R��#��MZ|��d'��]��*Ms���2dz{T.r�9۩B�bӔ\�Re�ki�	�9�22�0��~�r)?���МJ�"�Q��z�ʖRLS9畮0���$+���T:�H����s����LN�L��ˣ㓱x�8�
e,K.�ⶌ�	�>����?7:>
��#�c�s0���'��10�d�c��l�A�X�����,]g���e+$^)�U9���\hD��4"O��-N��YНL2=��5��_i�>��ba�ʇ�W>ޮ�l�y������@
JU&���iA��b
+�%K�;�& �Ñ@(�vuǺ��S���ظ�^(�/,��!�"<���/.!��W���"<��y�����:�",�]��Y�"�')™����q{�]Xwj1bĈ#F�1bĠ�A��c��x�u(���M,h�j�������oܹs�ƍګ����X��TU����+���HX5@ª�3)X7o޼{��?z�@�������%�"��s&�ǔ��;�A�BAB�s�u����R��RE��ʔ�$�P������l��6��	�]U����p���@k{ s�U�R�:��/������o<Tv�ɉ�n}
+{��)ʧ:ѥ,�vM�=���JP��jBͩ|Ъq�� !�	�����$s�Og+"i�"ރ/N[����k��$�J ����L�BŒ�b�2���K�>|�?���H$|�`���r�Q�$�Iodo��E�c�Lvt|ru}sium:_O�3��p2�����aM׍_�e�$�	�NSu�p���,��ٶX�t;����b�*�CP�X��pwP������,���d��(ȝ��l�y�74�X$0�jV�<��h��)��B_��
�<4TH*��P�M��Nh�C�A `E�������?�J�a�p�4k��V76�ww���������&a�!�"<?�������d{goqi%_�]���L�T��3���������Lܦň#F�1bĈc|@G��%��L�
+��6�T�~��[\RS{GCs�ۆ�o�>y���`�G�������+5UW���!�P!�����ܯ]�q�ƭ[Ȃ���'�_�x���;�ނS�.	,P�&��	\2��%�X��~�ruH�=�N���]g�V�B�	U~W��E��2AB��B�%�';��N�uɩPr��)6Õc�O*�
+T�T��\�
+
5�G�v�ӯd�d%[)Xzy��t�e��_F�J��)]*֯&H�XdN��D��N�THՁ	>j�2\�.P'%�t'l$Խ^`����
�	����t:�+�ͯml�_~������3;�02:����F�c���>���������������Ain~j��A��l�Q���o��g���OE�!�r���-����ĊZVȕN3����[AU6���e	�2�F�N�W�`��҅p��W�JA^�"2@T�����`^� w���H�2�XxV�g��W>��\�ϋ��j��sB�?@���`(wvuFc Eh����/;26>�/�/,���om��}8� �/߾���_�.B�\�����������_��7�g���vp*_̣ai�ؘ.'f@�p~iYܣň#F�1bĈ����~wO_�[��
+�Z�Uh�r+�n��[��7��~������O��}����;���jUmmEM
l!���"������1�EXg,u���L޹���Ǐ�={����7o޾o@����6��Z�X�;
+c#�
+��@��M(X��_ϕ��(X��<z��T)�v�Rx\���*��B�,�@&?h���!AYu	ڣ���B�l�>��`�ٹ�l��[i�����F��~�R���TG��D����5{��a�9QW��jM�N�V��N����Y鄂�b�,w�\�B���p4H$���XC�tvxdrzzaiyw������ϯ�N�?}:<>><:�vv��?���x���55���)ds#�T&��
%���?��_I1�ZT�aqU�o��:�r�;X�<�i�)D:����<\#!#Xi���Y�u��@Bq�-&�ƞH�W��nc��|&���\�
+=/~�ѯ�)˧;��~
#�(�f53?��|>�6�G���*D���ǤT���wQ(�)�x����klb*_�]X\^[�����������ׯ�gg�)�?~};=;��������z�4gvJ����@�D�����q��_X7k1bĈ#F�1b����ʺ׭�n�ꀴ+�b�mEE{���&�P�r7�AVc�˷�����'���X��+jj*������
+L�DaMuu�YDX(X@���w��ɓ'Ϟ?�������[�Z�[�]�0E(��vf�P�f��"B�3�0E(!�;Я:�.I��JA��B�V�"�*v��:!�9�͸�8b��U�c���8�'ԕ\�O%9E��u[�nhVʺ�iY�m��a���h�j��t�Cw�V�1�N�Ql;֋�e�iJ'~*+Z$٧`e�hY��^V�Y��)vi,�cI)\)�Ru�'G���A�b!�P*
����������������L�4:11:>>=33>19<2f�Lg��o`0�����$I�B��P�zy�#n��ckM
+Хt�jŔ�r���9�g���/5�v�kVUJWˈT�ᷓ� c�������^,�
+Ud��k�C̓X�2U)�V�”`�PH��Q��
W�#��,r��в�P��R�
+h\~�0�?�$,�=
+�@_b(�A
+L�mln��}<<<����//������O>E@X(E��������ťՙ�d����"��@��x7{&��������q�:=)B1bĈ#F�1b�GO�+�	aNP�+�jVt�%��%AV��������z��鳻ݼ{R��B
+VMEMՕ��+���S�U�����U���_�v��
`��w��Cr��͛�
��[ZZ����`�	u,��hn�n��$�FE�R;L���.Y�j�’�9Ahʲ����ғB��<��m[��2�)dHV�+�w�(����إ�8��ô�$-U6���X�:�4��U�:P���e,"�*��S�p�=�bá��ni�ؠ��rq{� ��Q����`Q��b���f��`�M���Tժ_q)Ex
+z���PgWwOo��`*��d�aAa&�L
&��T*���CCC錱?�JGv�b�PH�x��K�P%(W�g+.���=�;E-�*
+N�k1�*�)��V^}�'���b���,zڦ�u�4V�mJ�‚0_A�	�t���0�+/[J�D'��+�O�^)�g�,,V�(���cjV�j�6�����pf��
+�~��{���@���1B��������.�T:;:61�/��/��nlm�~�?8����8E����yy�����˗o�66w��g
+����t��/�J�0E8�g
+S��P�1bĈ#F����syyi���NO0�Rt�3�D*�rE�۱��ͤ`�|���˗����`UW���X�T@�{EUe%��"BcA)��n޺{��Ç?~�����/Y�{K;HvH2��8��t !dP&JX����u���%�N-쏲JX�c)�2��H�a�TnV�bi�,���X>��|�	Z$)�液?�x���i<Pbt-L�''Q�JO2��X!��H;�]�S*+%�+��0↢�\��X	c�4��2S~�g��m��d�}X��	,�)�3�R/h�Q��ڤ0r'��4"1h��� 5]����`0�� �������7������ꎅ;��^�_�x��\�/�,�*I�ʄ�*OD�/	��T#����W�������@��x�t��u� =@�w��N!�j��;� _�K���KZ��1ՄD��ao�^yHT���0N�al�Nu-s'%�o���+�+Zh��1��>�"�.���h,���7�H$�����8H..���o��~8�U�߾�������H���؂S����>����fqn�L�K3E87S�5.=1�76�ss��jqyEܸň#F�1bĈ�;�`�CV]�Ά��]v֯�$�rGE�Ȃ)X��=|t���k7o�^�������VebaA	������������_�@�7o߾}�޽�������޼y���������������\�ĩ�v͆�"Xu��[����,X\*�FU�H�V�T+k��Y�(X&SK�r��a�|���QA��uJrrU)�w9���
�/��<�Jc}S���l�d�A���tVeRi��mi�#FJ��<o�*�FEt-F�by�)I�:g��9n1zan���d�0aZ;��V��sE-sMV�ҁwQ��BI�����{6���m��r��o؏
H"l0�6`��P�^$�q��q�q ���s�9ϔ�^�Z�[x��O��}f�U]T#�Z�}s�y�E�C�빸�����p�7m��O�;ɤ��X�	�rC�)W�N���]����ߠX�\����&`�� �-�pg���a*��Ţ̊�$�7d�*F�Y3���QYX]�_BPHҪ*��Jqk��u(ۂ�z!��mA���oBi3�o��Z��?�Z�>3KE�s�`=�˯�O�:�����K�kW�]�y�������;i~�D"X�d��"|�[��k�\���X��и�������r�"�"�:?��z����7�/�W��ͷ�3f̘1cƌ3�����lj�N�R�̊{�$�
+�	�ȝE����tzd|r��H��][�VWW[{b3FX��mlᦶ͛�Z[cq��0�H�]���-�]��=۶���oܽgϞ��q�"̑V	�9&��������"ªT
+%���rY�S���Mv(v�uX�wE�,�����-	�*?;�]BT���)c�D�7�<^Xi��8ؕ_X5�ME+مG=T�C�]",��R{��'�Jr! b��CJv����M]B'(��{�p�0"R�Qj�kc5zd/���أ'��L�F{��
+]X�>������pE��U9����LjAZ��&Q��纺�≠�?P�z͞
�+5v��f��J[)�j�	�s	W]��mE�V�%|o S��X�{b��<`+v=��F�(q����	Y��Tip�vŒA@-\�kU`�k(�
+~�j�bU�^�NqV}zvfv����9��P���V.]�z�&n>~�������o��k�4��w���n>�-�{k��.4V.,,�/a�EZ�kK+��E���/,�mƌ3f̘1c�̿sN�>;�o���W��W��,+|�+�EH#X��ѱ����;�{i���=�	/"ܼ���Z6o&������D�����]�[H�������FF��=��ܧʖD��G"ԋ%�R��"����p��=�^G�X,�NbY�\�m}��t�3�dI�ů)�]��{�#rY��a�z�Is��D�~EV�z�T�F�›�٪h���b�(*	��(0eGzԛ�,[�G�ξ�����S,�I��-����C'S�K���P�b[��T�*�B*�r��A]T(���j�(�e�:)�������U�C	(�Z/����*_T�DT�4�z(��Sr�G����-�F\���8D�G1������8q��+Ǔ��.¯�"�K�	����2 #]�|�r�ePL��W���{a��қ<�q��R�r��Wu���	�����5Gt	1Ϊצ�I
+k���%-“���~���Rc���o߻�_�z���?}����/_�K ���X��ᣧ7n�^Y���Dw.7�k��"�"��-̷�3f̘1cƌ3��)�N	j�+8v�/[�'�X�NaQVv��.��x*�gbb��Q�ڲu+�`��!^A�ڲ)����c�-���X[��=8b��������ݍE��qk7��{&���:�!,V���$��p�Lu�d!�E8�#Xи�-
+,�Ձ0X���KJ[�q-ꤊlVB���b��,V�&AH��Ѯ�f�BT�Hd��u��:�
+��M
+�T���B�x�m#]�n�L
+���3�;�[E$��?�8ݲ�,�c�-��$��l�J���:Nz�#pk ��	�>r,A�!V���P)W�Ki�J4鐫���X�jIK[)/!(W\Cv:�,�Jb��v��n󚡺LPB-�������ˢ�"Jv�Qw]���h�O����a�m�_�~�_�b���̩E���Q��W
z4C�
+�d!}k.x��w��۩��",W����Iy�W�Nx�h�g�Z�קg�y�Б_�;~�s�˫k��ݸE[�Ϟ�\_'&���>�BDX�B�'EX_H���G������_�rwq�jy�E�.5��+�K�s׮\
�n��͘1cƌ3f̘�W�G"o��pmvߔ��l��&W�<(���`�X254:>08�70���G��V[Q`��n��U�_���8�_utu']==[{{{�o��"�������d2��"wl�*��p���9cB���(]/��U��[�D���b�H���f���d)I�����lG��*��VZeE1�J�*7UT阫Q���TB�Њ���`�j��Ԫ�r_�Q(�X��ꁧ ��J�i�ɒ�=YH(L�QE�l}�(-*�+���-�bQ(ž�� l�6�4\�ڝ�b���螝�.D��z�:�
+�*�-��ȅ�*"�4S\`�E���G�l��Ў��'ʉ̬�`+O���U�Ĕ�hJJ���n�r�A�TV
r����@~��]�m�r� ��,��i+��X�����f�V�O�=E~z~
�
e�N���{l!yЫ���O���}s>r��c�O�<}�����K˫��ܸy�O��;�`a
�g��P�`}���˷O�y����;w�_�|u��2�ؘ_j,6V��E��:�X��ظ0�����������K܌3f̘1cƌ��x�۫��U�R���_�=���#XV�XJ�$����ܽ[�����֖-xa�D����m�����Z�X;����`Ggז��n�������]D�RX�+����y����c9P��AX�_U��W�"B(���eQQ�������U�m.�E������v����d0l���Q0�T��T���Š�(��v[��o���\��գ�Hy-R끶��� Kd���
+$�T`�v�,�m���L�D*�6Yы��6��7P�P��i+'Bۮ��ܨ%���Eש�x�����]�(U`���\�ˬ\�Ro�l�+B�Ɋa+��V�S��!� ��>+�ZY�s�q�f��Պ�$Y,�rB���@��2F��/�SR�Ÿ�#�	򺟨j
Az%�Y�K��7t��cY�X�^U�[���A�|��=~�էI�p�F����G������N����Ņ���������cI�>|���3�`E�=~z����KWp�p���-�K�a]Xh�/6�?�����܌3f̘1cƌ��������cT�^��ʕ-�,�����`q�{p�`�k,��36�sp�o`gO_�`%��M���hk�LSX�֖Xkk<�F�;��;�"®���[qk�΁ݻ��V:���2����%I�l�"T�S�
+�W�ȝ�#�	�J��Ў�D���̕���**���ZE��2�]����}���`Sa�UQe����J����l	��
�Tȵ�"�PM[!	��eV��Au� k��d	
;�I���i[i),�寐"6�{u9��D�S�����+��S�T�� rPX��LL��[h�-���	-�@}� #HZ�KY�D�DM�J$�Π�jG�D[�\&�4]W9h�O.�˘�]v�������l
+ÕY����)��P�yڊű$��da�X������B�r�2e���VmUYU��Y�J>��Ł+rM�/%$��d�̾����8t��O�����/6�.�u����O�?�����wp��D����;o~�<�����/��?x|����K���EX�E�h����v�*�
+�믿���3f̘1cƌ3��y�����g��
+��SZUƑ�\QP,�R�?��=���.S��D:��E�vo��O-X�DG�p��eSk����XKK,֖�S�{�=���ѱeKg��-==[��pk�]CCãc�X�Τ��\����������*��2�;�EX,�"a����k��Z:��T�q����*G���mY�n��U�e��:�Q�Ù���M���k��z}�[q���1{���> yS
+�8�rt=;���}��_�>]6�,x�͛w�y0�C��U�5��W�U
��hS8
Z8����"�����FGa�:�+�C�(�3�♨��]H	V1��X����"�rAUP��b����=����-����RW�5�hֶ;LT�6����sA�p�3Ze��!�W����9ג=A��WX���ȶAR�����
���?����ku���V���>�O��"��:r�cxᩳ�����XŻoݹ�f��_�y'v2��w��
+�-�7o�=}������\[�k�.�K�E8��֍[�����˗���3f̘1cƌ3������ψJ &WeK�r0�U�[�aq�+U2�b:W��dF�ɡ��!f������8�`���Ev�Z��-��
+D��:�l�޶
��w� "�={���'''S�t&�-L�0t*r�E\XH�׃:�����EH]�a��b�R�lZ?�HM\a�U�PW����Ɨm �jbq�!UEY5�ı4	� EQ%>���Po��MzF���ʱ�:�V����P�,�D)*��r@�j�̕�s*+�,x�Vl�0�~Ҫ|�M�N��LH�Da1�.Hw�����4��D�"Z~(�-"��Z^�z�J��i��_ը�
+��X!�r�1��\��9��9��C��`>�yz�
+�,���I*��S�Hra�
+���Aْ�2�E���s���[e�vί�"�v��鯤3�˃8�EE�T�U�M�g0��%��G��r�����9s��������k7n�!�E������>|��	,�"�.a}
�z�������O�ݼ}wu�
+v^-4��-q���X�_j\X��/q�>�a�1cƌ3f̘1c�=���Z/ڨ��W8yU�K�H�{d��Y��<�`�3ta:�gG�v�ܶ}�`�;�[�M�V�l%���֖X[�Wqr$��D�չ�E�z���w�""�ё���I�"�g�S�b	��*�T����q��<W4�5���,�eK)j��G����o�U�H�7�ފ6\I*zm�|��R{�Ĕ����CZ�k���P�����bU��nd'׭�t3��`��'�b��V��
+)D�ɆA�,�����+�V������F���%A'�@d��Pl)2��8Qx�	-�Ss_�Yݕ���k�"=WҮ�4�/t����d���V%���)�&+�R��(��u�%���"^w�S�Z,%���Z�ww��@Wd�|�"T��$]._ �w�0d�j�9�bl�	ޅ��q,*��k4jE�WR��$HWpO�ê�5�" #�����^&r?x���_~��&X��[Xj���{?~��f����`������G�"|�[���]��X��#X����l.5���7���G�E���7�mnƌ3f̘1c��?u��������l/d�+F���_�K��6CX�x\_�"�|a2��L
������ގ�DgG,o�w���
�cm��X+�BH&�˂���[��m�-,r���L�S�\&�Z�4UT��N��q�U-ʯ*E��� �Rł�uP�"�Spi�K=A�&$jô���R�j
A��4{U�<�e��Ȕ���e�⹩;
+��Y@l��o�`�v�tb�í@[�XYa5���nv��5AOډ�^Q��g�\K!T����g;zI�:�R�MBn��`t�/��_�F欼%{4��@��a���j!+�%D���JV2s�!�&l�E$�D"��>K�d��/t��]8���9�"Q(�prV�Yif\'�Q��[���Uy�Y�k9�E�A��i����)���U�fg�+~���"�G��G�Wu�V�O�N���7�֡#������v���+�._�y�����<}�����"��Z�_��O)����ÇO�߼{����{�E�;����E��Z�+ktṋ�k�?�ۙ��w�3f̘1cƌ3�왝;X�[>X��Aʯ��� #,K�B²�"©T6?I����Ƌ��+�����ljۼ�䯂���XK��5�-Ž�DG{Gg'�`m������݃C{F���FX�|!7U�*�"��E
+��E���2�`YV���I��g�w�6\Zt��V�5Ve���U�
+Yi�J���K�s9��I�[�9#�)-�e��\h�@N��[QQ�Hȯ-Oj)$J�
+m��/���qߔ�*��A�/���WZZ��Q�����9Q�(!�
+I��'DM��k�Q8I��P�ZNtg0���('�p���**��6�[�����u���u?�����.�gP")^t(�r�nA�
��	�M1�wa����`��!��йs�{���\_y7�W����!,b���+z
k��!S�W9���P)R#V����U��X�>�wv��9�"<v����Μ������ʥ��n޾s��'�E���;�"�,.������E��˻�_��;�kl!i�]�X����t���������݌3f̘1cƌ����񣱲��*a~%��%;W��E��(��D��
+�a[ܱ+?��dǒI�&�{�"�Dgg["��o��nnk�",R!lk�[���EX�$���D����mرk���ᑱ���D2�Je��\�@Z�Ųt�ˤ�'�'.�b��[��(W6�������#�*�>�A�2���
�ԅ�aﺭ�*������*�	��V�s��0��dFK�)���ݓ����@$��Z�JP��p���̓Q�+��n�B�B;�"|V�x
+���
+��R�d\N�0�hr�r�
&?w�$��F�Q������A�B�^w��sE7�"�U���x�ǂ�,�W(J�0H�=��A�J��(qb�,�'�$��wR6z�byґ�:a	�UU����v��+��R��� )���^�z+²���*#WL~EAEX�Z�>]����ݷw���CG=v���p��"�NZ��@�P�ܱ�������O�"����;�"||�����K�l!m.�!e��_ZXZ�-�O�?��u3f̘1cƌ3f��s�������]>���̓�b9[�~U!���[tat�� ��T	/"�&p+982�c�`o��-[�u`VGk�M1�"l�–x�%��FXq,rO$::�;�kkOOoo����v
2�{r2�J�����SX��D���
+�
+�r�����@[��e��T��F�4�.�BR�e�d���V���BI;ԭ+Rw[��bZQ�+�uW<����X��J,����q���H����~@1�Rė�-�<y��)=%i���}�Κ���^42
+I�#�Q�]J�E�W�h�MZ�hC��4�n�d��K)r"wF��
�{d��v��x���m�RN�AlB�A���
+�}��Ж}�.�P�eu�㒱+����vF�8e"/q�ם	a�P��]�j�}@*f���`W����+�>HZ�윦�8���^!3��[��:V.����k�h�����7�wn߁�9�˯��]��.�7���\�u�����>}���q��n�FX~'"�/a}���͛wϟ��w��kח�W/..a�%[��4�u~~���|��_���c��͘1cƌ3f̘�G�����mg����%����!���`�I����
+��#��T2�O���O�޳}�.���E��"��� V��%8�Zcqʯp0����������ݽm+�� �����q&rOe�|!�����w�
+^Y�IH��
+_G�SXxap��T�IT�I�J�Y��ҽX�}�5��e��v�
+*����
+��lm�H@9�l[��Gȏ TH'K8�lLq�zT�/��B�e��
+�.B39UX��K�n��:أ|S�'UE��6>"T�ѝA��n(
+L��c��\�$�q\J�+()t��٧���Jv	�[y�h��r<zPR�(�����M�}�;��ڮ�Ӱ��?Y�#؊���A���v�X��>�d�ǘ�/�~�����b>$Wv���.�@�E[�$yE�W�W)ݪ��CXtG!%W�i��Z���-½�f����С�G��z���]����z���������ɳg/��.���E�
#������ �O����q���'O�ߺ}we���������E��:��|qs��׮_j���5��f̘1cƌ3f���f���3�樼����?�	�b�����z+�YD8UJes���dr�����m�;��m#�;H��
���Z�:B��j%.w\!��G��::�l����m۷��ܹs�n�""w,��d�T�>U*��_�B��<�d5�N	��Z�e�"��V��`�9�*G�ّ��
+!�	!`��Vz>*�ڸh��
/)Q+&���Y��A�eD��*��p�+*ɠD��q���z%0T��:Q�t-����p�rt���V����r#���4ic����A��`-J'��'��'�RBx��6@�1��
+�
+n�SX�"f�t��Z~�v���*��d�Q����]@'zC��S�@
+��Ξgɕ"cguB�ɬԧח�hS��!����D���AK���l"�{��w�l��I�����k�h��Wkx۠_%��<Ȟ����/�*�6�ק���i̯���w��EX�O�v���.,.-_�|����w�?x��ً�^�~�[�T����ܿ1~�~�"��?�}�������\�q���Fh�l�]��l�ťm75_�f̘1cƌ3f���&_�-ׇ�v"���);U�?I�0��l$T-XB&r/�
+S�Ln,�����][��+����on�"���6r�SX�㱶x,�EX�X���Ѿ���q����``����=�E�L&S�T��"$"�R��SXV�{�����c�.��r�K	+!MzYwO1�ж�tS%O	��X��k��m�Z%0zQ`ER&;$�r�Ê#,�?�
�"��%��B��V"%�V:hB*q��<ʊ�T�([խGP�HC�
+����Ɨ��lq��'��"���N��)ං�AZ��F���S�����x��l�q��\5�E�PZ�
+��}�� �������R6�^�g����ti�շ"��⠉F�D&
+�Y��v���!�-J�(ڢ,���U)��7	/%�Q+�kUnġ,!c���ʓV+WڮXΊi�H��a�yK��|��pd�`��KZE�W4�EQU��񤖨r�{��ܧg���#"�CG�����g/\XX^Y�z�k>{���k���çO��|"wƯ�������_?|���h��;���༱*[��Ehƌ3f̘1cƌ�����c���+�	�B̾^�i��V ��ɕ(6�W$��%"�T>?�ΌL&G�v�����݆�`���6���a�f,¢E�Xk["֚h�w`�oo�������w�ص{�����(�`M&��L:���pk���²��Y������8��h��/bq/w���rs�z��J}
+i�u
pA��Z�Qa[P*�b�Ɵ�M���b�(5(V��S �e����,����x�IJ��y'P#H���W�`�?zGګ�h{U(�����Pi���T��Q�-wc?U���	�&l�r�w��*�r�x��A�)�P ��������
+}UE��<�Q����RSaC�k|��UA�lW����X�`\\��+�vyL�N�]4"ŔY�U,Cŀ�'�����SVMj���@ib��,���8�b�v�X��
DO��iP\�Y��V��…�����z�������)֧�+i��:=]����7�o�������:���V�._�q�����?}�=X��*b!�`}g�܃����������nݾ�v��Bc��B��h���,r�t�j��v��M�oƌ3f̘1c��?f?~�v�2]>X�q�������(��`�X��
+�"$,,�
+n��O�2҂տk�־�]=[q/"���U[��aVk<N�]D؞Ht��wvR�����K[���C{F���c��WfӹB�G�H��*Z|Ϡn�Bz��䯂s���BV�U���ɬ4!U����*JyP�b���Z+���"԰e�=�2d�82��9�&�*�	���=�A;��g5i�Y6�d�r�Q�
�~z>*�����jV���a�4Y۷q��i�j*E������s��;6[�w	%ί\����m`��I'��`��;��JV=��r��?z��6��]l'�BξH�I���2$���)�����z����*�R�D�Ig9`���V�P��������|?�^��P�b�jU(�]�d-Bi���v��������-�U����v愯I/���<�%��.a�r�j����Ă5=�o�܁d!��>{���K��"|�q��G�"�,Q!d.�/߂g߽����k�"\Y�D�V���VI�p����������Ç�[ތ3f̘1cƌ��Tg�z��)�.�"7e��/��y%�[�l!MjQ�����"Bf��S������P�ݽ��[��B��B\�Ă���J��m��'_�u�T���ݽuk���};��}������^E��-�L.�+`V����-�d�.)*���˒"���,XS�r�bm`q��z��hE�ԭ�.!�:C�AU�7m}埭Hב�R�R��lg�u�=0ĩlyM@7{�k��(��څ���z||�@]W��F,����ՑW4���Z�l�|���
=T�����u��A��	��� ]��@��|] O()Q�&�($-R��En
+�`�K�/��e��k�$F�9��b 9a>+O�X����y*_��Q��X0L�94��͒9�U4d�V�O$��K����T� `��
+F��K��%���'W�jŤX����GO�0(�_5\�I���6H�V��Z5fq�� Vuz�>M[�s��:t�c�	�����\�~���?}����u��g�h�����"�-��h�pi��.��2�E���@[�����K�;n��U�Eoƌ3f̘1c��?`����K�S��v������Ia�sa1s��U���a�XɐV2�#��]�#��voݾ�s��v�j��mnk�ی�X����-�kk���q��"�Ύ�n�"ܶMD����HN&S�L&�-�]�SE,r�",ʣ�SeY!Db��[��]D�V���!�(��p�/"�eE���;�_Q��ݒHJh�(�r�|��D�
+��n�%�ٮT�d+�)�v�l$+~�)��Rx�R߳C<��(e�Dd��r�
+�z�*���n�S��Q+Ʌ�(T�$��~���g��徟�ă)�Dz�ҽ�B�qA*ŃO�~.x�r*���q�+�lȠdn�#4I��\>H��A�/��<�&�K|HX����h)��AVߣ�,����@�mdL�9�|�m����,`z�z+A�e��D����’�B�����AR0d�,�DX,�Şe��J)�0�W}���8�]�k1#�]��U�g�jگN��4-�������쾹�s�.�#���+5���'-��7nݽ���#�"\��ݻ������o����_�O��a��ۧ�^ܺ}���k���K�����r_c-���������{�����7cƌ3f̘1c����yS
�c�\�$�0�*�y�d�*3��UF�,E���Z�H8e�),��J���`
��Vߎ��wt�&�I��� �[7c~�����CX��,r������޶u[__ߎ;v��5444222�3X�D���i�p��V�"�W%���B�;s��]�8�U;�&��0Ԋ�Vx�Jk�tK�r��+���m��ez
+x���
+A�UD�
+0+�m�t�'���e�9Cn4tr��U���������(���!�j�?��"�p/�
+���L�Y�P�*���jtȁJ+MoXi�KJy�������Q��Yϋ*6�5�wyR��i���87���.
W����} ��UT�J�b�R$����<���"T'��(�c1G��`���J�ܤ�|vn�gJvnn���D�0��{�v%)�qa�T�Bj�r�����.Ӷ��ʃ�D���J���k���c�+��H슞7�iL�Z���֧gY���#ǎ��3��qaa��"�s���'O��x��h~"wʯ���[�߾|�-��7�E��zi��"��",��p��Ņ��rp���7cƌ3f̘1c�1K+��c�v���di �V0��*�8�`�{p��UD�lS ���E�������{F�w�ڶ���D��l!��?7ǂ�-80���DG�`un�B[����v��"�]��ã����d:�ƻI�X�b����-B���"�*�{�bc�BH#Xa{(�4�hV3�V-k��l%ѓÙ�#Ү�}=v�w��]~��榰ݵm>�֞�]z>
+f������Q�P2��Vv�R6	F���dVS"RڝEO0*�6L:E�,/���|E&��%����Q���^���z�!YR���
��ww\�;9�JA�����j�=�N����UHeSvH���v-�"F��/�|�󈝀�N(��B��o0��sĄ���g�AeK Oa�̕/ڂ�g�x��J�V
� ����k̂%��U������k�X��o!�
+�a���e�R�[�$m����Ū�c:xpzv����{��;x���_��r���S���~��|cy��5�"|����_�y���E������_4�EDX�E�������2�E��XY#-��"�t���O_�o�+Wo��{3f̘1cƌ3f�GσG������k���
+�U�➙*	q�sV�f
+,Ղ%��-�\!��b����������hK$6��6�Z��e3��?q+kk'Žv��:�;�tuvo�Bvbo���Vn��'�DD�%�K��E���J",Z$$.�"�`)+-�U���G��՘�A�����9+�+��+�%Y�c�,���
+��-��b��pDp+���t�܇�<T���D��"��dE�`t
+9)�P�\V3z(�j�g��P	%�z}���M|:B�rU��i+�dS�5��?(W�I0@���i�+��Б�"����6z	�gM�D��Yq�<�xpE [��Qps����r<��,�^������Y�X+�c<����Z@� Z‹��$���Լ�_�w��*�~OR9RcUwk�;���V	�%`�_���[�x�^�P`�C��|���>=;3�of��}s<�[�ǎ�8y������E�����/��߼{���G��B#X�E����E����g�_ܾso����󍋋��+؂�#X�I�pe�
+��[_m��͘1cƌ3f̘��;gϝϗ+E�*K~%��X�����p�0��Wai-B*�ʗ�����T2��HgF&Hk��m��[�nm��w���onmŻ1Š�%������gpqǖ�-=��Ă�׏E��GFG�'&S�d:��d�ȝ��D�"�����,V!$�+��eYJ�
+i.,U��LU�큲XA�YGU�;"je��a��R�d2+���)��J�v"7Z0���jbPoR�s�U}��OG`�_�A]/:M�S�8!�X0|+�oD��ǥ�����q��֮���AAO�#-Ȥ��s��\���HO�]Eŝ%	��T��(L��Q��/�1�Y��AZ�� �-KRr�(�@Y'�0_vy��
$��s0����+�-O&�`����d�
+����P]CU�VU��B!f�eP�<�d�������((c�*µp%���IlUe�x`)��%��v�8�Ɖ���{U�e���3aa����>r��X�~���痖W/_�v��'O_��,L��]���]��>}y���W�=~z�杕�K�X�>�X^����-������ތ3f̘1cƌ������NO�W���A�*[d����W�|%�U�F�H��E�H
++_b
+�<�W6�bQ�a�T�0�Ɏ&��c�;���v���vlْ�lNjc��Z6㣵es���1���-B¯:;::;��t��l�����߿s�ݻ�����$��`�q�P,��b��+[`u �< �"�C����#X@{�`��۫l]W�,dT���-u B0@��xPk�)�>>��a���O8� b�VSX��yo��rC�>'���
�&q)�d�nx����?eM�&*��)�U�p�^t�Ё�(��%�\[M^)F)��W��qs�}�kfVGJC��Pi�
+��W����Jy6tO	�E>	�`q����=�/�y�T���Q'��h�Ks�j��	��j^R&��g
+9�b|��2���P�(��i+�F����o�	_DHW�;�TSW�^�O;��tQ���{�1+���Tx�զ�/����"؊q-�.µ0�"-B,r?�#X��������_XX^�t�ڍ[w�=x������.B�"�"�o�ȝ�?~������/��?x���Bv.4H����W��.�K��
+B3f̘1cƌ3f����7��?�_�3˯��J�3S%����*�D�{
+��T~U�-X�ȗ�~�G�R�p+�H�V����V �jm�w\!��Ύ���N�"��ٺ��o��~,rO&��E��-�2+�hв��O�X\�e�
+չ�df�����Ax%�T����&v�m)]��J����Y�U6����ƟB�*%@%���d_0(�7t�NR9 .��-�3萪ɖ@�V�+��ÉX��6	Bp*��_]�pw�k�b(W(�P�k!��	�8q�#�
+t|Q��DU��I�����l�"_n	��Kd���2�%CS�\�'n���.,���H���WB�=w�5]�dVv̵��C����=��)�����;"�4�|#�HvUN�-X4dE[~t���h�.�
+>@����n�X5�J�#��#X,^�+��bU)���,̣ȯU�aУ�vL�h����㽊cW���43bUk�3{Ik���C�=v��'N�:�[�KJ��ū��o߽c-BU��"���n>�-«������������%�b-��a]���W�M�Ќ3f̘1cƌ������W��S���gf���T�l{U�_Q��V���+��+���BI ,�*�a��XA���Y�DD�ٱdjhl|��p��Ξ�����DGGK<��m��mjۼ�u�6b���E��D"ޞ "�v"r�� "��m۶��m��#X#����ta�T)�,,ª��eW,e9 �_!ε�9�2�U�U�]B]�.���*h+���@!Z�rO;l%~�	�B�&� R���	"�d�Q�Ra~� �P�IOam��oc��_9M[��k��4�&N(���&A�e��4��a��*�B,��]�+�#&�9�h�	����	��mE�. �/[��f�Һ~>������ȓ&�BJ�O䝴��W0@En��|զ��D�UR�N`��mP��U$Z���>)�
+��\)�J_8H���t�dV*�␊�ҝjM��V�*�Y���hʋЪ��9���J����а��HCYʃJ��)ߩ�J�V>/�5�Ȫ{<�E�W~u�>^%�֦gf��ۻn���s�9z��"<��������W�ݺ}����d����0$rWEX�E���:n޼yge������bc��w.�\ZZ^[h����_����c��3f̘1cƌ��3�ٳg��3��w߾|>����eOʕ���H���]���Y�_��_�u�%��Т",�o�8+O���rp�d/"���3��F��m����6�"��f��j���-��x����0����$�-[���������Ȟ1�"$���R~��EX�M��e.�*G��T�PrEV�*�=��ҬV��rxŠF��NHf%�Y��R'��)'������茖�D������<��rT����*B�����>-j����壚���^�*��*U�f��l�����0Aϐ�iF,�z��q���.��)�����R̮J�(8r��Hϕ�R<��E\i�����4��S������
+�D��V`i�'�#�cD
+�r��������8�l�4��AO����Y�<�E�����˸,�&��#��	A����<�Ű)����w	�Kϕ4\���]q���+9����Y��UM�+){������,n��;p���G��]�g�0����v�ڍ�w�=|�����o޾%-�ϤE(+�r�g�"|��݋��<�z�fce��B� ��%�"\�-�s�������+׮��
̘1cƌ3f̘�?d��x�~�F�_
�R9��M�J��T6���#_,����s,y�
+���b*_$K>��OQ��#Xؚ%[����,��I�."�$,j�ھ�F�z��؂�aV+.�V�
[���X"�)V{{{GGGWg������;vP�������$�E�KsbaŚ*U(�B-4%Z~̂U�.,�B�j�`�C	+�\��_!ab�FuR!ȣ,�R:�,y����5(O�H�^�QR-UQ-B��RNN�l
+m@��7��V��o.t7�}�f��&��U��,儒ZA�\OA^�RŕP�R�)��Ɵ�篢"R��o���+�>��*�1%yQ��]�|'m�-��<ꞧ��<i5w���"e6%�UR��}d? 7���'�S��o�4�h�OJ���@O8����Ps�*ٔ/K|��(^3d^,�%J�J个B��(,�.Xt� ~¬�	q�c�aS���W��
+?�W�����
�PZ1#�Vզ��ʫ�y.kZĮ骒���ޙ����8p�ȑ_~=v���N�~������+ׯߺ{��c�"|�:�"����p����޼y��ً��\�rm��..5��5V.5VH��|a�q~~�ƭ��w��W���	f̘1cƌ3f���;��<�����ze�J�ҹ�T6_Hgs�\>��.���b�l�X�n�z�5�"�*�g�*EB��9FXE����u�y�"��+��H�
+^�.L�p+329982�c�`��<�Ղ#Xm��~Պ�x�_�V��#���ݽ��gk__o�������=B�J�3���a�]��_�v�J Bb����3��D�H�����4�c�t��z�PY
+Ѣ�,.��{:� V8
E�B��
+2+ۉ(��a��j�>W��wS
+r~�j��
+��70�;�]��R-t����.?�X`_j�Ʌ[�l�X��}�&A�D��	}�+���_�Cj�=u��t��@F�|Ų�����A�fue\CX�r�1`h��Ir0���dŠ�.W�M��(�-ϕJ+O."��pu �L�č�3�<�U��(��r?��T�0S�x��;�*YUE��z�|�m����g_,7ť�89`ɠ���մ�H�h�S��Q�_�	+^!TQUh!�Za�`�5�N�܏�]���.›wh����7oq���"��]�E����"��q}���'�nݾ��v��"$"�n��a���E��_�?̘1cƌ3f̘��?w�����Be˚L�2�Bp��ʐ�W�\���˕���栅�T^��S8s���j���'?��HX&����"B����"�
+S��T2�K&���w+�X"�9N*�-�_�a~E-Xta�=��U��o�����޺�g۶��;v��=4<4222>>6I"X�,w��*�!�Y�
+�0P�e� �W�%x#!�`�f��6�P�(�X4UE��l *؊���VA���-��4Q��^ckJvW�CPHCU��T��(�ʲ`R5�?9���O���&������\}ު�TT��՜PWiK�]�=��������@�o��(��&�U���<I�D)
>�\�V��2q��p�D�EP�;�*��AjKv�lW��[�\j�tޟ��I'N�d���a*��	'�l��/)i�
+?�@�J��=ł�T��TT^��ݱ݅�AQ<�}���r�A��O��UpR忲�`�apIi� 9��}V��A����@�Ѫ�[��_c�fY.�\4vU
�d�,B�pߐ<K,X�E�EXs��-��'N�9s��������o޾s��)����E�	��"��[�_�v���F�2�Ex�"�y����/��/��̘1cƌ3f̘��6ׯ߀�j�\F�3�J�s�,�V�V�&����?��a��+�)_ʗI&jJ�XmӪb*GVn����sv��e�%&r/�;
\Ux���%ĖxʂV:=�L���/"X��4��+��7�ZZ�m��-�X�T[��+����wl�,�"$"���{�GFG�'&��=�"ٳl�",[S�aUxa",q^�&-B�"�,�f�Bu�(q_&(*�N!��8Ca�p%AS�n 3J�̀�"R솮ꭊMZ�Ev�%F�ī���.���&p�UyN�:?�U�)��8x
+����P��e=%a�v>�l�������d�H�*�¼� ȇ�Mq�;Z��1*`�ŕ�@F�	?�(��Ф���K�E��'t��J�gз���4���UbG����D�����l�����r�$�:|����
+<����a*���X�9+�1�;}PY�
+-<uO�s����z��	��P)�����]����ؕ/VB�U�����k>�SZ�LY`à�e�s�JW
N��#T\�Uc�
+�*�2�533�o�t�_��z���Sg��q�H��ܸq����O�<{�r���w���E�ϯ߾�]��+�=y���W�/.��AXk��K�d�Ņƹ��[wp��Z�7cƌ3f̘1c���\�v
b��?�II0��f��
��*r.����0�*���=��RNUHf���Y`i+�"'�)�`a�.(�"w��(Ų��FwA��J�Z��d&;�Lc��������m���wt��V+�nn�*ޚ .w�������;:����D�t��if��}p
�"�*M��b��@X��&���J�Z!,ZV�-d�u�Y�m����?�r�e�\5Hw�E������r�&AN�����sV��B.�[Ҡ�ۨ�P[0�r�:��j�r�d�~Z�tC8+�����8!�B^&�@���)%m�v��NG�~@_�S	s����.Q�,��+�5]vŇ}=�o�C�*�Z��E�G�5�@�U��K��nr@FˁL�����"Nu�X���	�9q�U�)UN��4̆|��r�M`�
+\z�,�%x�|�����]���"U��2p%��"mŸ�_���xG�C���<�%ʆ�q�r����*3T�R�,�%�T�U%[�Ht�4^� �G�y��H^Kn'���N��7��G�~=~�7�"\�|���[x��g/^�z
w~����ʯ�}��?����wW/]]l�P���BZ�+k<��t��m~����Eaƌ3f̘1c���|��ͩ�ů�>~ܷ�\Ng2�t&
hq=����e�+����_��P=8�̪@ U�c�fYa���y���s�K�v�(�*�!u����H�/Y����Of2����ѱ��!�joM�E�m��Z7�Z6��j������D��=8!���{˖�[����v��������8�`e�a��SX���J<%E��+\',�;ug�2��j���,�l���˶��U���L=A��U����T�6�a9
+�҃R�������0s�Pi���~�-�J&J2�IE3H�~g�H�w���B��e
+� ��Y,�k�Z[�>�XA�
+ǔ���`)e�P���S?�g�|:�1'Qǃz+G�%��l��"IR��)ɠ\��~=����)�`���)��A������!�0M�ߕ-EQ-t�@���gSS�bIckr�$M���]���v��(��9+�5A�D�PVy��è�=%�)�u�g�k؈�
+��g���Ҏ%�=!Q+jʢ$��,*lg-Bft�mA���I���`X��?g���7�o��>��/��8~���3�_\XZY�t���;w�?|�����EH�*r���#����w^����.¥K�8���E��DXK��
+3f̘1cƌ3f�[�ӧO��Ǐ�/^����t��/��Z(��l2���ri����JJ�đ#«\.�+�Yʯ��L����O^e��L.���*G�Ia�0�@ҭ|!�w�W9bӢ�������`*V�Du[S�����Ρ�~�����q+�
+���ͭ����*і����D�/"���;8��n��;v���=c܂�ʤ���ߘ!-�B�2U�L��U	����b���ràp���aɲ+Bi�끶l�s�"����rB�@I��UxW`�V�pK+�jm>Gqa�ȗ82���
��y+��	%'���H;�H�('2Q��r���;�$����|�<��P�ړ<�+����l%�$e��K�JI�;GU�Z$T�]"�n���THE}찯�W�@%=QL!U��Ar��
+@$�'�dPJ�,T;���!� psT�S N���I��-��';�����9�Bb�������T�8I#����!�b9��.��+�V��(:�5������đM�:Y=����b�x��س\�%�0_����,�<�r�V�U�y-Ƭ<�Ž,B���}z�����
+��c�~���8|��`����ٳ�[X\^�t���;��=|�2X�0�����g(r�K���}���뇏x���/��}p�����y�b��VV��.��7n�o�/_��?9̘1cƌ3f̘�O���w��ӿ�����O�:U,����$�[� m�`U��
+�0(v
+���ZER�#M�l!��M����<�Vy����w	�p��sY"�E���b�-"�����8D����ȝD�ҙQ��p`p���E�:�"¶6̯p�o$l���ư+F*�X��[��Ԃս������������]������+��䂃����}�X���穨�]����@VDL䎏�z����p�#�jI$�W�hݍ
+h��v,G�T�J�!�(TY��nT���ؔ*��Ml�?���FR�‚�u�Ty��f�ೠ(yx<�Iw�=>e�������)�=��u�k{<줇�D�L������%znxǟVq��)�0�L�U<.��EU�d2v.~�7t@QӶ�+{���|���# �b)Π�'�Ay����ܗ%3`�O�\�"e� kVY���AzJh�D1P6�XaP0+�[���7��vk�A�̵�33�K��17��NLչê�3W^q;[)H�ǣY�U�U�ȶ¤��EX�.wfw�O�0�b	�$�5w`��k�8��o�Ϟ�0�X^�r����w<x���W�^�}��e��|S[�8��EX_�}�Lv�f-µKW�.�k6VV�q�����s��_�1u�1cƌ3f̘1�������Sg�8�x����mg�y�LP��I�U6_�D+�خ2m����d:K�UE���`
+��L.��%�#8��
+���A�X)���g�Ŵ�	�`�]��BHʯ�r#a��s%̯�,rO���'�k�v�j!"w�ro�Ժ�-k��1�jO���"!Na��wa���ݍ[�����1��9488�gxtld|2������zS��bpLQV�c���#.Zw���G��
+�+n�"�*�&�"�.f�[C������:��
+�dV�U��{�h����ڐYɓ&�*�-������	�{���l��2+W�R��P�r������|\����|�����<OJ��Y>R�Ur���r�ФN
+�m�de�q u��|hb��=�[���)�G�=Ua
+K1ne$
+�yZ��J��:t�6u��`������������1����0[ŋ�F�>׼��P
'�Xa�o����ʫ�ٳ^�cfu�I�����	oz>[�D'K�aE
+}���j�	O��K�U�(vR��/���zu����0��,�4�V8s����4-�pm��i��k
+�Q����7�w?�=v���'O�:�Dž��+���]��[���<{���"��	֗�.�?���}�����"\\�g�W�_I�"m.��[���!f̘1cƌ3f�l0���G�++�33~���_��d&�L�Ӵ$��Vv���I;�Zg��H^��Ŵc���,�Jg'Ɂ˃䘤'��d:���_�Y�3��W�J�
+�E�+�E+_�"�����`�E�/���	���ށ�����-[�Ă�F�WT����	,�j���ۃ#��َ���-[p
+k۶m����e�p��S����"�M��b�X�*�aْBv�S�;�ZT��I��ZH�YY�ckl*��"�)+���D�԰Vx`ij���!׎\D(�j��3+e��܈�_
;�[~�̀=�ǥB*b��IP
P�h���GA;���9��pw�T��䨝>$vz�zA��Bq)��q}h��-���$�T6�[!�/�$��������3A�ɕ�",[�d\1W�ύ[��B�:>H(��"5�0_B�!�)�ʇ��A��T����DXU�QW��uJث|�@P�����O�`��y����sI;��b��DZ��&�Y
+�+뎸�F�u�\ne��bA.x�'4�%d�U�#ta���������cF,&���B�.�ٻ����X�~��/ǎ����]XX�-B����/^�~��������`IfY_1������=y���+W�c����|c���+�
�"��v�KW����ϟ?��I̘1cƌ3f̘�[}��q߁9����Lv2�Ngs)�,�n �T�bN�U�
+�U&�d�&�x%_2��He&ҙ�T:8&�
+~%D���I*��P+��,j�"��<�b~�����E�R�E��S�g�Շ�BHʉ�������=�w�ܺ}{�֭T�������b�n���$�
+�X{"��K���EHvuuuo�"�����;v��544�gtd|b<IZ��m��.B*�b����+���^�m��-?[Ȭ�~@�9���]�&�������R:�������f�Sl�ὁZ�I����r#I�a�r�{�I�k	*�U}n�1��xz��&�8��$H}_G�Y���
�����&�l�1`�5|����`4A��8�O�Q�R$tE{�c�@FL�Y�\_�\J��>���Jj=P	P�"!�Y�.�F*�J� ��ȧ�J:�N���̀ཪHT&}O��x��٫��C����*��P�Y�ʫ
+�7���Y�pU�B��l1�ijX"^�0.�WyC[��
+� �U�Amq!b��"��Y4�E�U��N
�uʠ� �Ū�>�I����*_YHEX䘡j,�b]�������}{�8x�����`�����"\^Y�r�ƭ��<Ļ_�zM2X�>}
+E���-¯�?|z%w^�_l\\��I
+k-8�v����f�E�Ε�'f̘1cƌ3f̈y��8�������W-�Q�/L%	�ʐ�\�Yz*�S�V$�b�+��ʅڂ��B��
�l2��W�IB�����V���W�¬�W$���",,��"��T)S$"wz��|���HsP�"$�
+/",�2\c$��YD�70н��G��[���ئ��Š�n�����B�����h��-B����}׮��C�{�����]��4�`e�E�/�q���"H��+�2EZ�|!�W$�U	�+�E�\([{d��Qj��yP[;�4�Qa�B��|V�mA^BD�=AW����
+@'�j����j���Π#D�b�+���JK@�^�"��%j���v��
4��ك��'�{�G��dM�3ȂC�^n�R*ś��ĕ�vM@��%'���9rM���*us�����H4A��))

)�,��xz���:BE�Zl�bU�[Q%	�PW��~z�Ї����}�x�ʫ�cW"�%SR�X�D����دA������Ja;�X"�U���*�^�5�g��ѨSi�X���T���h��8��ȝ�&d���Fº�_I�O^U�	�N��ٷ��"<LD�';}���V/]�-�G��>�-B�����.�o߃'d��ѓ7o/�^����WX�N���Bc�û�������_)f̘1cƌ3f�����S���j�Z�
�rŚ*�'��T&���J,L�"BV�p�
+���BF�
+szX���R^e���d*3�L��d
+�RY����h�0��$�\�,V���d���
+Y
+�+�"�+ o",���ȝh�q+���ؽgO��][���V�WD���B�[�X"њ�%:��$�Evtuunٲ���X��o�����"�HN�a:�
�7/�V�P$"w��D���
�UH �28��U�"�����j�J�Wa��i�C�v
+kE�܍�~C��6����
+�����)U�����^���k"f��T>���	L�Ĕ���RNN<φ��2�#�X�������rŎ�Ɩ���Q�Q�:���~'��q<O�BJ~h����jR=QQ�(G����$
+@!U����������@bJ��"C���5ee.w�C����"W�ĔK���8���K�n�V�R��U���M��A�jaU���E��),fh�Q+�,~�ϜW�nJ�J+*`gZx�/2��J��U������\MK~U� aզg���ۻn�ࡃ���ד��v���\XX\�t���[w������/�_�y��}T��O����v~~�������p�����څ�����������EXK���.,4�W����_,f̘1cƌ3f�����C�����z�^*��b�b��`6�Su�"v��)�?�?�=ȩT�%�|�@����*��Le�'S�I|�?q�0C��fr�H��J#V&O"[�$w��F!w��EEX�HX�p������W�bG�r��ǒ,�ջc�������X��?k�Զo!��a<�h������N&�Ƚ�{KWO7FX}}}�E�spp��ᑱщ��K[���B�Pd�q��,"�",J�h�n�S��eQ�E,X�-~a�ae��Q!g��U����S$��&^�`׭+Nu�)A�:'Q���4�:}
+;��W���ZHu������=��m�Y���Aj���z!U��U�
��FE��s�9t��H�$Z
>��-�zB���O`+y=@Xp���A�&#I��”�UMx���J�]Ψ7��D����)7DPu._^URX�K��@G}	�%�&��Q�
�UGeq0
%tU�@�0X�>R�9�*�o��o<.UeC�}���ਉܔW��*Pq��x%�V��^��b`����"7�&v�����6����\/Hx�{�H8-�Y4aE�)��
+��rYV�w	�gfg���w����Ç��*��N�>��y��p��U�"|B[�o߾������_�]�\�.[�_�~�����k��.,-�"�Rcay��#\N0º�xqq�����3f̘1cƌ3���u��V����?ϋ�r:�-V*�Lɞ�sL�.�Q01�ƨ�U�9����X�޳���`|�T��Tp�&�#�d<�&�*MXD��넔h���􎁕�Zl_a��1�Q�U�NU�.BKZ��*�Մ�R%[,��S�}�S�=8�5ҿk����[z��wv��"����M؅��k��'�q¯ڃ�E���h�"�{zz�m�ݾ�oǎ�]�v
���t&����`)"�
+�����d�X��^&*�(١d��cw�2T���ԧ��ܩ�D�
[ӕ�z`埫D�O���z0peS�\���Qz#:���Z�.�"uu`�n�l乊*��O��$lћ�%1F.�D�JD2j���~@ȯB�K���b]&��2�!��'[���P��\�:J%	�V�O��A!5L�ȣQ9�KU�
+��J\���*�X2�UU��)�ߕ����C�j���X�*�TPێ�~\{媋]�'�+��SW
+˺�_	a��I�NuE�^�zj%��JK�<���b+�*6	
+;��ק��Jd���6�W��]���"�1����]��Ȫ�����"$y�(�5=C����Y�"<t�Б�G�����Sg��~������Ex����O��x����n~����"��,����O���^��y�[�w�W//,-�acyqy��#X�#��+׈ku��3ƌ3f̘1c�̿g~����m!T*W��B�XJf2���1`�U*��$'�WB̮�����0�<.4Y��~��TzWӣ�����Drd2�#Xą�\��Ȍ3�;
eQ~����
+�;�W�t��ӅIaU���"��	�� ��"w�
+^K"X�����C�};�G�(Š��B¯��m	�"�+��
+,bqO�E�B�>�s`�����C##���\�N"p�EH���W,�����@G��C~Uf,���ȜLd��cYn�l�U��٪���	k���,T�P�_!����X���P�aE6�Si%>߻\T�T ��t������"�}Dy���|�����S�F�"�Rp������@�J�Y2���y�+�(���\J4���H�
e��0v�'"��?@
+��N�ppT=}OS2ڤ�!5���*�HJV󪎺���g�7�n+�ȃ/��Ƀ��W��7%>vq�UjCЃ:,��+�5��A�XTN
+�����|ՠ�ZU}�`
*��ea���\~eY>9a�
+1��R�_��B!�"�,��j�"�U#���Ikf���.£ǎ?y���3�����X�DM�x!n�y���{R"����7m�DX?~~��}����p�pie�Z���=8���������~|��}���cƌ3f̘1c�_2����t:?U�J��@���rܾ�U0.�岢�	fhC��.�B��]�l.��ګ�tvl252��H��O?�H�p,a�(�",��Rb5ap��T5�\��-BZ$�",j�
+���,�������~���<��=K"%�$K�}�ݽ����[�RY{�޻�ڪ��ں+˶E��ԓs�4�a��t���'vr�ɃH��9��&�x��?ߧ���~��ouu��t�����~��L�X��(�`u���wu���7��6�����kir.���V���ho��he"��`���
�

��D���E������g�B�N#X����Y�T����e��<Wηhsp����_D����]�Se�*�}X��
ji�y^_�.�/�ؕ���(���:C{F��?��G��j��U9T��Ss��*���J7\��e�Y�˚Kin0䅤R�[s��]��V��	9�ܒ+L��U�t�@��t7��iN~����������j,�ʔ���� &S��?U`�Q��R��&
+G����4u�O+N����%Q�mA�`M�b)6*�����_)H
u���5�T»n�!J����)�떆�\���2Z&k��q�X�S�_��N�S��n�!�S,g�h�M(p'�]�JUƮ$��!Lr�e2HŖ��v	�:!�[V��V�vu~~��M[�oݾc�={��z����]�[��/\�*Z���z�駟�;m
+�W�E����O�Ex����'N/����2CX+kǖV��WC�p�nz�;��w���x�;�t�on�G'��V)S��"Q�TZMN�X����*��׮�Jj��
+#Nx¯&R��xr,>O��OD&��D2�J�R�sa:,v��,j�"uB�X9nz'��4��DXb�pZ-��[���T��,`k<�5������D�>"roiil!�������I���������~�#�Pptt,�!�`%әt� D*r��.N�NMC�����l�[�ap�ċ�,�5CW�)�=���٥�J��0��2Y��,��u�T�$Js5
u����r?^g�@]��_�A�z�[%��rk��Ұ�J
\�;��J�J�`	��lWC��!1�J�gV.Qy�E�4$f�<�0]�s�����}�/�2��^����;�XbG�Z������7��(u�������0����B���;=�-���Cѩ�3�%�ThP�TЄ����W�*Ų��z`�/N�To2B�tX��ޔm����t�n"��W�de�b��S��&3���A�@��+���+�,��"���,r'8�m6;H_����U�+��^��<�e�V�"ܵg�^�E��a�Ex�칋��^�����(�z�[�O�R[�_<y��G�ܻ����_'-£K�+�"\Y?�����
+�Y\v�<v��'N�����w���x�;���?������%�NgP�Ϲ%MVn�����(L�&U��Z���\����J�5C_%�Yj���'Fc�����x�D�b	�D�qVDuBƬ� �^���$Y'$��4��/��&kVl��Ue����V��$C�Ԃ�������D��a555476�|��_V�����+�B���{{�����H �Zhl,�G�'��EE��I&r/N���^��+r�;TK�_)�iVa����ON���_������@MI^��z䪌W�4��WV��e���ĉ�����H�pN�Z�;
�dW�U�S�V�궢,HC�p�������H��")��e�JC1'M��)
>C�&��Gf�=��g�)=d/�������ۥ0 �u���E.�eԔ�j�R�<�a�"Xb��_r�d����\w�ȘA�SH�e��?I�t����,��U�w	f%~"�R���{���橐�JE?Ӗ�D!`�F,��hm�y$��t��"d�@9)�sY�Ɗ�r1�PcY�/��;+��nC^��Mʩ��ݢHJ�)v��+��b����X�笨����,�"� ��H,X[7oݶm��;��޻o߁�������SgΝ�-���޽��`}�)�i��+������d����g�W�I�D�Extq�������'	����#��x�;��w���<����O�����Sr�O�Ğv�
L��K���Pc�p�.��
WsP$�H�k2�Ngf
+S3I8%!y���'x
+V4��Hi&ˊ��t��	�h��Ma���%��LMX��l�!�`9���.�\�f3���d>��:�>6>,�g�E�`���X�}M�������W$�E-�흝p��v�����;0�E�@8��x<��V*�Ng3�E8Y�b),ίh+�E�Je���[����x��������[��Vi�?ȾJ�5�nѺ,�B��pXKQ�#�D�U*��J>L�%�g/I��!L��K*EG{sb�̭Y�NVQ�daPv,��)��Q��{㹥��(�tr��x�I�b�I^e�j�E��.�:�]� `��'�l���*)�)��²q|є���2��ԧȣ�杉�y;O3rU˚�0~0Zĉ&��Pd���*�(QB�������h����~u���>�j�Bu<G(rSe�e��Rce����V�U	$U�l�,�����'������ٌ2٬���
+���?���+�
+�H1�d>+K�+zCH�
��"��
+{
+���'��L� 7����/	��a-B����V�.ʯlF��b���M[�m޺}l�ٳ�����:rtiu����g�Ex
Z� r��o~&,�E���Z��}�<棏:O9��P�����
+�;/��"����W�~����_2��w���x�;���p���ſ��~�����L&��S���_�I�l.����]�<�%fw���c�\�%`W*��-��<T��M�2���
_E�ŠC�0:��L$�	�K��"�
+�V�E7xk<�N�iB�����D*��L�!�4�`���=���
b�;��V*;鼲�B�X��G��������Xܛ���Z}�D������������!�E�{��(����P(�� ��H%�T�|/W(�ta���a�H��4�+~�X�N�d�,ί �%fki�V�N�x�P{��W��IA����$�Kx%�U�]J�_�T	=���VR�T�%�K�;��īd���t��(5Y�X���ߧL����o��X3岠�PC��i��}��c�S�%8���d)�wC���*��!<������:�@7P2�B����S}P�����ڠTI�Y!�c��L���e���
w�P�,Y4D�I�R�;y�����`���gi5�C��3�ߒ*���K��,�r(D�RT%�Q�2�
DVvEuE��$�T6��(�|�]ҸN~
+��b�+���z]�ҷ�y*��I��]T��s�E�UB�.��&Y$��˰��A*�<(Wm�,XVu��M[�nپc��ݻ��!l..�'-��\�q�����|"w X�E��"d-B��'O>#-�γ><wa��Ʌe(.���"t�����_2��w���x�;���p������o��?��a�,��p�"RYlV�Ia{�y���(��v幘=/�W�I�d!}�D:3[*��w`y�X6W����xp,��9�OD&����a��ĈR,�%L�]BI��y�P�RA�aV`�d1C[�S�_!�{a�X�X��.x��\K���C}�C�=�m܂�-B_c������������{GWgGg'"�� �`
��h8�"��d*��!�4�>�<��Ԍ@X�_͕T���	r�E"T�Vʳj���^��X�����=R�RX8UU��"wį�]T�&��Z�j�\53�J�����Y���W�aVZ������Hd������D5��t�E��������`���j�ч�(��v�ڠ��߂b�
�9
�!�O�Q+S�Pa����gv_,d�2䠞�j��q@��Q�����Jt����5
D�&K�)�QҔ��jY�EE���.���U�7%ؔ�]��x�c�.���V���,���c�H���BO8%>	8��҄�ݠ��
+����J2+9D(]X�gE��c�����@W�=��>[�mA�4%’�B���*�MM˦Q+��Xg��,�B��B"X��l�
+[��a���[��~��ѥ��c'N������W�ݸy��=h>~��ɓ�>�&wT!T�>||��}����y"r_]Z]_Y?��v�D�V�.��d�؉SK��^��;��w���x�;��O~�'?��?��o^Ke��/q��&v�šT�V<d7����R��Z���§ҙ���;�֢�'���dy0�'‘xp,:�;7B��X|�S�	�%L�iB0b��%	�s���ZY�Q�I��a:+D��MaA��#,�Bȶg����t�@-X�Ec#`��VGwwK{{s[+CX-MMD��kk�V�����ko#.��6b�������-�����a�"d"wh&'RI�"�fɯD���-��N��!i���ʽE�,$r�,Ml��e@��u,�r-�]tg���kP.G���O�ǧ�
�!��T�M�@Jv�����@{�n�:����>�@w��8G���+VR�tܼ+�=�O�,H�5�ĔL�Д�b4��	���1��3\�Jp��"��U(�Uv�$��dIS�R�ˑ����S1�(G�4]�$�^�]��LC%KfIEp�;�Up�����z��*J��?_�G2ZE�QY�eS/<#h�/M���#j���Ol��>�Q+ݰ���@�+��B�2��o&UW��K�rY�$���ɃIcʉ�F� eS���E������� ��� y:DhUD:�Ul�ЪXVU*��<8o�P��aU��6S����v�ڳw߁�~����,,���8���._�v�i����O��*�\��T�"����[�-B*�ZX^]&",�"\;
+����K�7n�v�)?u����x�;��w���<��ĉ�����O��_����韎���|��(�R�X�Y�Į��J��w�)�J�B�H��朋�l�ZZY?�����c��d|"��=4Eb��H(�V��������<�EX�Y�^a��ݳ�iĂ-B���&+�IfsI:DX(�;�`M��V�E�~U$��`M�VD��a{[�������������"X-m�>���
+akgG+T!�����������������@ �A���O�'	�JgH�2�#[������Lqvv�"�Ri�mj�z �����p�T����e$W/�1_i��$�U�[r�2TM[�ʸ0hԘ���I�G%�]�@t��ʻt���(�?*��>��b_�"s%�U����ŐӁC̅^�w2��Rg�*_���Q�J�45��,RX�D�Z.ez��;��Q��N��P�f������Wӕe=�wr��SkR����l/W?�!��G��� S
3ݮ��
���,�&����*?���*� �ӟª��f����	�psP�Vv���-bqg�D���5��Ґ��������V�»�X�)��lC����>+��"��d�a�*�vG����RY����Tr�|$~�U+H���ԅ�m��]_�$sE�XB��ܨ@�pۖm;��ܵs��}�A���{Gh�����\�v���;���-B�"$��-B�"����[g�]X?~��K+�Exl�l�!Toݸ��k~��=��x�;��w���<����?���ҷ^��_�m����Bu�:+U۞e!�IᳪYd�w�/bzϥ���{୥�3g�߸yg���t66������X`���e�c��8EX`t�a���!yE����*5�&��t�ଌ�`�v!a�r,�%�sS��&��
+��)Ng��`�3щD(	������;��Z��as�����ZZ�[� ���X�����[I
+������"X܂5�F�‘�X4�HL$��t:�Φ��\���!�EE��I���(T!�:��,j�Y�
+��jU���W�I*��^����}x"����E�蔎�,���`�*���Jj��i�2+����VO�T“|ܻ�dV��+��Z�
A��۸��N�ҧ�Q(���ϕ.ɏ&����V��B���N��+Ȫ7X��ru��u<%qT!�c�{tS���t��2S�
+����5[~���c\�I6%���skCY��[�#����NeR�t5��{�r.Pj��L@�|�xN��r���L��ԄOF�3�SZ��V���@���H�|��T���np~�
���$�W`�+)`'q,�/
+A�ɈSlUдy:�<���v�bw18(\�PU�����U%�:/�Vu~󦭀����EZ��z���.���[���\�y��ݻ�?���?e�/��
+���/>y"[��N�]]?����\�V�V֏�����
+D��w9~����������w���x�;���s|^y��/������� �OT��U�SJO9�H���\�B��ҙlqzf��K+�Ϟ�z���7���D*�'F�qx����aǢ�u(G�ñ�1�ŠV��΅Iݡ֗���4H�Y�OAV.�&"w�",f
+�,�`g�� �����Z� �����d!�͍�R�q�
+��Vk{{������������� �	�)�jrE+����uGw7a��

��P8<�F����D2A"X�l.��$�j�0=]��.��L���_�%hbX�ű��{��������v<#(�S�jWu���?�S�(��!�5���9��ȟ[�y�Oh���JG�*���XV�V:ͩ@Y�:t�XW8�X�GG*u��Qy�*��J��|Wr������sݨ#w!&�R��\R)�+h�!?�t������y�H񨕁�t�V':�d���T�ꄾ畎�V�{�5�R!UGc�I�'f7Ix���H�n�}�j+Н�2��L7I��+6�w�ϊ�-�Hj�B�u���(ab礋B0�'ɯx�P�-J�&���f1�ET�eYq�+�6�]1�%H'W2�erI��|V�Ӡ�+�W�Lx��_٦�<�e�ob[�; �����..�;q�̇.\-‡-��>��L~���ӯ���Sh~�%k~����;h�pe]��V׏���/��9_&�¥�ο��{y�x�;��w���x�<o���s�?���W_�g��{����W�`�a�l^aV�Fޝ���+��r]�9�NH���W�K9�W(nݶ�����^�v�ƭ;���3s�W�H,�GG��Шs;8u�-±8/�J:7�E�$:��La��s��KH��3�D�"�5�+�NN��"$̊��i�
�9($:��������HO{WWk{;h�}-���
M�$���L�iZ�`qo',¯��{{{������G����h8����Db<��a&K~��l����V-����!ua��=A�ª�W��K�n+�:�_�$/
+���:�j5n+�
�9���R)�9ɵ�
V3/�j��0V�%�R%�U�(�B�)^$��9ͽ�'LV%���擷͒�_�X�]�&w��d��AEN�M��/�j�TV#-/�f�o)��p��tf��:�uM�[*c���6V�aY�a�=(wT�Ϋ�i�-�վ�V���o�WW	`�*!�2T1��_�ĝ�2�Y]��������Ⱂ�A��'Z�9�-�F�8	
�!v����]B�<(���sg���T�V������4e�JCY�$�$�+�X3Q���B�+[���c,�W�qٕy�BhC�R!k���;v�޵g߾��z����?����~�ę��.^�r����w�=�-��b��K�z�Z��B�����oܸ�����N�Z\^;��������ڱ��u�+�-£K+�=r�A�~����w���x�;��w���귿���/�{��G9eʥED�&I��, 1��JS�{�N�?�@�<h�r9�
+�y�ȱ�/^�v��ݓ��߼�05;�ʌ��CcQhl8���_Q�����:�	V$O��E�/D��\Xq��;%��l
+D�������g'k�)�r�$5�i����|2C��'��$�54�������֖Ɩ���M
͍M��&�+_{��-hB��"����Ξ��l�""��Q��{2�L�ә���|�0�Z���E8K�Ԝ��)~M�X�̔U����*cwq*U],��R"U���%��N�f7TW�l���`�d=�P<�ܻ.T�%�R�R%��dh
+G�(�2�
	��FI��*��2X>�ězn�n*��(@���,�#��TbBF�"�Q��������:���=�;�U�
+,�8�뤉L�#}2�(T�0k�)�'�������jyTm�I��ni8-����*=�E��)+~f��@),�ȋ�=�:���([������%#UKO����A�����`�eXj�O�)��+i���,&��h���]�xU)�Q����)F	n�5C:�ЖE�WR1����$Z\���S%�B���\��v�j2`7L⿢C�vuD�۶o۾s��=���?p�С��}����걓�Ex��u�E�L�OX�b�b),�"|BZ�w�=�|��gέ����*i���/,��՗_~��U��x�;��w������/~�\��?���_y�����_���ԩ���=A���O�k���'����*|�ٻ�-���_�u������?X6����x2=�Bc#��P 8��P$�Ƣ�H�",�E��OP�;�a	�E��B���UF��d�2t��d1�X�@�>�D�a�ᬰ`��!�D�ұDr"X�$�������hj�5�{cK3�`����؅���K{'X�;���a������

�����"�Ţ�J�br���T*�s�ٹ)HU�V`�&��<����Y�Ph�eVG�vI�x�O�fu��E<�� OL10���Ɵz�
+��T�T�� �Q	����	���!$U�!T�S���!��z�*����5n󺸩\���o���p�vɠTI6}r��tWʨ�Bax�!�zA�n!��ݤ?XY��ۂ���TN��x7*+Jsw
+��2�d��W�S�&~G���AmA����VyS�P�J�dPJ��K2�>��P˔:)�:ү._W]��ASvM�������c1[�(wҤ��ג�+�f�l9,ȳR|�PZ�i4�@�Km��b����w��A�g���-���WL�nӎa��.�[�1��M� r߾D�{��;p�C���х��c'a��"�o߾KZ��>���}��`���;?��s�Ex����>X^;&Z�+�r__\�!a�8y�����K��6��w���x�;�y�Ϸ^}�ŗ_��w��	�ʧq�Fޞ� �<���ꄯ�<�EG��B�k����Y8u����7����؉S�]-i��ly"�Gb���?8���0i��v	��.wί���DDX�_�D�0�J�I^A�JF���"_L��!EX�9R!���<�X3sd�p&�|2�s^�Y��2��k�{C3�W�,��j���6
+��:;��ۻ��{{�K�� �������H4�O�a���'3��d�HDXP!,�@����@R:sa͕�b�v!`����?<^��v�ʈ8I
�h�J�Qr��rMgP^t]��$���1a麬
+QQN��e@����T��|�q@��	�z+����B",��*!jT�Q+~10�o�wu�,�&
+��5Ѧ��ݳ����W�֧ &ĸ.y�����{�gd�e"����*��"�e������X*e���DY���ɰ�ǐ�K1��� j�a�����Jyk�nY�_]���+-�2�R�&GI�ه:��HQ�͈.:�X�����"�:�c:w�(�*�!ȇE�Um��b�:��[��`�%	�!�V6h�ؕn��m�t���[�U)
��ފ��-���� �4i"�6Κg,fz��l�2�e�V"r�I[���y��#�+kοngΞ�t�ʍ��ܹS����Ϲ����/E
+�sa-�ǟ��[���]p^di��W��a�[�",�Exdq��;�?�׼�w���x�;��w�����
�����_�����x������"6Vn�t�ܕhV��`>�b.�|�`+h��v��;����_�r�����n�ڻjv��[S3��d&<�jh808�b���XV���X���a%�KHX�l�0�d]�q������W��s��䒀�
+i�R��%�X��K���a1��'�`����?�`�����5@*���Z��[}��6zi�ho��h#���.�)�==Ԃ-‘�!�?
+�F��b����x2�H���L*�#Xũ��`����!�ŲU��Y��5.,�z��bZXl�\��@�U�se���J�4�Q+���ү��s��ߧ��u��0M�X�4�Օ8�I���᫒ꪒ&+�԰&���V&2V�R��w�jb]h�O�")���Eg�_J↎BVu�z�`�<�,G���
++�Ь��qz�#��4�j�)Vs�v*����SV�.���TrMJ�N��cd�&��G�#r���"K�F���gT���P����B�=�AB*v�%Q6D�*S�fuS�#��"U6#K�X���|�����%ڂp�ar~%*��M�A�4:%�T���/��Y��Πn	�$��"�EY�oh�	B���-)ig�,�-(��S�� �_UD��	���Yvu��f���{Ͼ�������>��Z��.^�J[�>��ѣGO�<�"�/���k��s�"t����sk�N,,�]Z]\!"��㋫��k�"\\^^]�����ޟ7��w���x�;�y^ϫ���K�z�o'4:��TNY̲2`^\\-B�{�
_�/Y��Z���L.�ͱ��^�q�����?˝����s�5=W�HfB���@h`hdp�?0���H�D�c�%8"�p�����EEXb�P	��]�`�� U��!B¯��=ME��)%�E(#W<�5I�W$�5�#X��P/�`uu����Ƚ������D�ZZZi��������~��ݽ�=}}����C�EC�D���a�F�r4�5�'kj�o�q0U�I*��t����\�6u�B7�G]���2J�
A���]F�s�H@
k�ۂ|(P�]���db�iu�R���≮��������rܡ)}@)�����P��Z�ŝI:�i�i<m�όc�-��֡Q��z�\���g��I�X��TX�;4eZ^Y��D���B$eJ�YeCS�X�{�"�E/K�%��$�r��$<.'u�…^/��Rіi!��d!%
+�T����@��S8�]�u�k�5���|VB��2Q�.�����^�p�	
+*%-�%�5�gר��*���m�b+�9+R�eڦ�Ȓ���O�-�WTWE_SB-���X�P�i[��c�੪p��6�/����A���l�'�U�rA�� ��;w��[��}���`�p���><����E��C�`��h��X��'�"|t��݋���<}�Wb�p���ڱ%�ExdaDX�ǝ�s�Y��x�;��w���<���K��������K/�����������;=��1*>P��˂!��ޣ�
e�+���L6���g��?���v�¥�w�ݼ}��3�0=�Hg�fː�Je���`��p��p��H����FBc`���V4�9�W��[!�V�����Iݩȝ�f'ҹd&�"X0D"wƯ���}�YƯ&�3t��F��+��{�ڻ�[;:�����L�USS�Ϲ����W��D�C��EH"X�E8<"w�`E������D
+Z��t���s�B�8]��)��N�1�%�V%w\��\�<GIW��ZD*u��#��BXB�+ŵ���@^P�Cf�9V9$-?M��H�O�uX"�Tr{�t1�'�����Bu�,�l�*Qg��A��]<=E�L:�W��z=u�^��6=��W���&��	t&�|�N���T�+���"�](�z�V�:5�A��g�$����eJ�a�������7%���5�RTNѓ���	<J=)/������Q�����>;�b��RY+Q�)��՘��YXY|
P��j����a᪠ W�1 T���I���VDi���M@eU��-,X\ێ�W(LE������n)�J4y��j"iӼW��B�}$�UL�.Y��_��y��'P�2�i˦-۶l��=��8x��;�wdie�����"�|�v���Z���-�/�!����姟~NZ�_�q�������������2iB��Y9��|ti�…Kο�|����w���x�;��w���Ͽ������o}���P�F��9<A��X�I��N�V._��+ՂE
�\�JO$�vu�[o��~�ԥ+ל?�Ϟ�`��t.�H��
+�s�D��@��P��`��P����TGB�#T�>	�E�+��"�8��#Ir�)�$�ƥ�ݦ�+���$�9��Je����9�R��� ,0�S���rV"X�����k��jikklkm�5C�����kj������UkGvv�-Bpa�wuuvwC�p`����P0<
+"�hV���L��#��ũ��X�Iӳ�V�1G��rL�<G�ݦw\�+�Lw	�Y:7V�5�%
[�Y�c��TQ%���ڐC�j4���XBN����$�R�~
+��@4��dJAOwI��Xa��>C��R�z�ݨ۪����E��]Jƴj�<�z��|5�-���(�H�޻<;|��UD&G�����-��]�>	��x�^�j��tN`lUW�&Ejw�T��a!���n&2L$���L��me�����0�-v�4�[%�Ur����䐟Ld���Zu��l�1����I�"!MRџ�߃�V�h ��dE���VWl���$Q��n�HiE����z��2/h�{L$��VvJ����7+l�ж��(�ɛ�A��2I����,�(�����JuSu��-۶o����{��?x��;�9���~��i�"�|���[w��{��Ǐ=~�D��!GX�宴�^����W׏�Z"km�D��W�������_������'�6��w���x�;�y�Λ7:׿��o���/�������M���>`��)���1�r���V�0����ה�$�;�۶s��G�N�����;w�����dq:�ˇƢ��b�0�'��сa� �^�W��;CX�"�V��0���"a<��,N��VI�{��ȅ��	��~5Y$),�*�p��RX�b�i�ɩ�l���L<�Ckl���������ƍ�M�
�`YĂ�\�� vww���@kpxxhxx$���#��x<611AE�,�"�OBk�05=537-�U�)�xމ�#I�J�l�UK�b����Z��"mŒT�\	g�b\��v!�N�\,���J�*N�$(����OQ��!��8e*ߒ)�-T����b�2]�v@.Np�Y��zz�����ܕ��@�v���K���չ�\�w8�dZ��빰\xJt��5
+�r�5�4k�Q���DOY�C�A'�N7�2T��1��(%%��0asc.Y4�����(�A2+�1��zM�O���W�O盀��'p��0,�e���D4Lt�c��2����˲t��]���*%�y*��4S>`�H�ؕ��Uš��U�c(�
�l�EB(�	��D���������d����
+S��Je��RTm�+�̊J�X�Z�n޲y���[wlݾc׮={��?�&���+��O�-��b��㇏?a,�E�EX�E��'�|��Ǐn߹-�S��[\Z=�����",�����"�?l���x�;��w��|��}��/���+��ΐߟ�İ 
+\)�vz�Ρ� �-���s�L����D2�+w�ٷ��r���o߻z���Ɲ�es�`(��er�H|b$��������$��@HD����s	G��R��X	�rr�-B�Wq	�D��l�;�a1�E"Xn��),B�
+�a9�L�L�!B�Y�l�y5b��C}���}��"C��������B���Va���;:;�"aGgWWwOOO_o�@������p ��ccc�8D���E[�T�^(����,EX4%��Ig�3\������]�����E����
+	��d��y5��*�*θȷ�2`�P��F�A�H����dYO�2'�aԶ��B����MW���5pUP���>����Wjq�*���>.�Rؔ�
+��x�T���s��A��(�Ba��T5�(	�l��3M�m��8e*5=���
+���J]٨�����i��S�Gڊ�Ju���ӐBJ�*p�*ĩ,�L�j�]�k���H�a�P�ʲ��bv���^�DŠ���
+4m�l���3����̊��dIP���Y�-�y����8t���R�P:�b!��5��/�;��D��jUP,Zla�B��4)����W6��W��[�n޲}����w�޵g��o|��]\^=q����Ex��;w�?x�-B�����"��经?y���7o�;�X�.,��-��4����zxayqe��Y�^�|����;��w���x�;��iljr��^x饗_y�/!�U³�u�VR�.���t���0�Je����^�'�%}ϾK+kΟ���?���x#�q�20<O$���Xl���3�������30�?420�	�"kG�Fc�4�E�X"rw.L��+����`�E�ѹ�Q�D��KG���� Oal�-�ӬE�-N��a�
FG��ށ�Ξ�֎�����jnnhjl�!�Vʯ@��D����
�.2D�C-X��C~�H0H#X�X�d���-�rY�`�_��4�`�� G͖5�}��2.fqG>v]��������u����#u7�k��bKR&�:��?�а��K�\V+�����M@T-��?�����Ӎ:���:�s�^����sa��3�X�K|6�Aj�I��-����TR^�:��pP�������X~��w�>��z��g���1��I��<��"FJ@�~6�rW���e�2�J �GY�
'��L��R����s�����4e1�:z���4?�b��0��=A���8��g0%#EB���,�(8w^��?�-	�@X6�K�����@���B��/�QH�VGO�NhKHe�WfY��@[�n�U<;(��A�����H�"7*�M�jն	�"�JU>�5
��u�߼uӖm[w�ܱ����o������.���-��\�~���E���"�"X�DX_~-��>||���9�C�W�W���N�s��G����8��?��kz�;��w���x��<���^|��W���\�(��5������4�]e��,�W�d:͒W�_E��=����c.]�u���ʚ�
+c�xh,��7����hd`��]�}ݽ��Ź�30�,*r9�"�,����-B�Fd"���d�V\��t�
+�_�az�
f�ȝ ,��"+�\�3Y���D8	��GF�H�G"X
-0D�����cw�`��sio��"�����n:D8008<<����}ll,
+��D����/���(�
+S��Lq���hK�)��8�"8�,�iLK+�IA	�����+�W�t.i�	�����춬3�z	s$�D��VfU�\�  �ő��ˣ^�
�ew	��a�]�U��������x��#���g����%�+��l�0��cF�q���nZ�.�µ0�R[xJٰ��h��v$3���p.K���Nz������7���j񗥠-����b��F�����R!��6�����ʌKU1�a�!���#K�wd�@Y34me7PX��KY�
Κq�PK��x�ʐJv�'h3�%ʃ�\Ʉ�L��dI��]q#�_q%�'N�5YOЮVE�J���J�b~EF�T ˲���"�زN(�gV���fbĚ�[�r���\�`�ڴy��o۱s��{�|���W���Ë�^�~�i>|���Od��7����"|��GY���g�W	�Z\Y~ul� ����Ë���֎{�x�;��w���x�9>#~�7^x�W����3��T�<v[�%����Ru�����]�J����R��W�dlb"�H��[���ڱ���\�z�־�‘�h46vt����H0�?<���K|=�]=}��}�� �5�|k��-���p(LSXĊ� V,>J���1@X$����!�	�Wl�0-B�Ţ�+ʯ(�Jf&S�|��I.,5#/<Ѭlq:E#X����tt�D�:���[}�4����� �vN��a��t�V���������H �Ccc�x<:�#X�L*C"X��$��g�3s�9�`�n`I�&+��ũ.[�$����bRP�]q�V��]dLwc(�mʋJOI�e�ҟh�WP��%�V]����G�+ju���`S�:�LBK�L�U���6!om>�U��	ۮx����X5|���v��I��,��P�KX��Y�v�O(c��,��a��U8
��$���e���&Tn�93h�b�P�}-W��
����F��eY@ih�O�qX�<�%eSH�.���߂��ej��͘Ҡ�R[t����}[�,)�2Yˏ��)BQ%EX�PQD�"U�KhW
+#��v��5���Y,�K(2Z�]A=DĸتRE��
+�ش����]I[�pd�-B��R�e�S��+&kR'<�~Se~�b��x�p��m�e��;v�����Co���{��,.�Q�;i޾s�ރ�-����W4�Ŷ�Ex����8E���˫����ąE"X��/,A���I�/��z�x�;��w���x�y:�o��\���~��K/�������/_���dA�^MN:�Pl��uB22�ͦI�
+�H�-� �j<�$�y){~��Cﭮ�t�t�x���;���p$68�o����G�۽��=}�=��=�uGO/�`
�F����aA�F��h|X�$����8X�k�����"LǑԝ7
+3,��#"�D�(��Q����V��NA�`�!�ɉT*2�Eb�P���i�
D�_5�Z�Z}��6J��::: |�"XL��#Xa�"��C�@3�4��)�
+���TazF�`��A��D҉�
r�`II;Ve̲��J�'��cWt׏2.��
+t�w��Pŏi��8+%,���%A©��`MD��.��ڂ(eh��>i(U���YJ���zR���
�2M�Z�2�'"Lnm8~w�W��R���Y�����m]I��(D��gT�ʆ%�e�6��68���3�}:
+k)&s���D��ڝLL�3$����R�%#LR���؎��e�B�K�7Y�S�]Y��g�8���p�J��tŦ%8��.i|UP<Kg����'���6�
+(��*>hYB�N��a�H��$�"�@�b�,��Ī�iV���%DU"pEX�V��S`IU�sgU>�%��\�UQˆ6���� ugQ�;O^��R�{�ƴ���lۼm۶�v�޻glB����ʪl�-Bjr��3�E�"XO���)k>z|���kWo|p����q�V����|�pM��W>8s����;��w���x�;��iok�C��o����_�核�X�j�%���T*���`*�;��D"�HFap|"���7��핵��/^>}��W����h��`sk[gwo��HO�`W/����nr���������"��@p�����	�h,LEXd�9‰u�S~�\XT�F�4�b�Fa�X�E�t~"�G�,d
+S*r'w�"��!B��z�39�`A��y�X2�|����p H-X�]���6�_�����󵴶�������\���,X]]��r.}}}������$��G#cc�X��I�"�W�;gf���f�J҂Ŗq��K��+�$-�(yE��HҲ._JW�U�G�6P2[%��l��}2�%�T2s%\RP�QW������߮���d��h�@dYwK�-e���f�R��\!�I:��Zs�Qs�4���:)�����N�_��\/�?��v�RQ���o�Ø���P�ɲ]
+�:O�@I�'$��G�oQ���ΠQˠ�=�l����3�g	|$=Ꚍ]��G(�łX����ʔ?����gf�(�{�W
+��Z�a��+�V�0k
W6ECx(дyD�b!+��LrUaMC�X��CƝ,���d�g�8�r>!��+Jv��Z|s�%��l����J����ފ?��	�"��
+���څ�j��	"X�v�صg����<x�mh.����+�n��O?���.�W_|��n~������"<u���ڱ�\��-B�E�|di�؉�_���/���'�?o���x�;��w��<�
$�����/��������8=S^��$yElW�0Hm�I���������b��DҢ�j�؇�/�?U���������� �������������niko��t.`�"-�~�`��"��`x���
+!��F�\�>N�i�0I.@�h��X)��JS�5A�W�L��a��P!,f
+Ă5=��,��0�{~�8����`a�"X�p4��FFz��I,X�B�kj�57�VkG���+�"�,����1�;�`C�����`�'��c.�!+_�.�@k�E�4R!Ԙ�]�$�RG�ѱ��v
+P"#Y4Q��t[ӹ&��}%A�0�2L��*�<�"]w7u7hҌڶ��*��,��z�h�Y�և��)�@KS�RU� �%'� �I�U[	��Zr�Rl=C9%ۈҗn�����5Q+����JIF�"aH%x�� B&(�&Le�G%Y��6���d�~rL�\?,_S]��y��Y���ߋ�����-K0�GP�� L���r
+I�XFK���/�"lWrg��?!���=���X��i�m>ȗ-���+>(BY�q���;q6%��&�ҷ0�>�}*��2�R!�4�Ƚ�<�,�[B�^e��e�X���:�l^d��W�@1p�@�,*��S��u*��6�]����X��l���;v�޳����z����+�'N��+�nܸ}��}h2��d��*r�/� -�Ǐ�����[��_�t����u�"\�",�ZXr�\]?F�}w���#�;��w���x�;����������o}��o�������\�����*�+���䨪�Ʈ��*�$�j�W�x$>>��'�f��K+kg>����:�Jwtw�:�{���[�::ۻ��k�W����-�m�]�]ݝ������E8�?<�?� ",�`�F�c��+����X�j���u����(!���|��������&ӹ�S�b���!�_�r���`Q��/:�J�3q�`�;�m(����u~4_{[l6C
+�,���Y����N�"���� �����������a�?
+�"-B�,hf�YʯHkzv���YK��L�,M��4��DJ��f�����d���I_���U�տa��&�L��r��t������J��W<�U'�Us��<Tf���Tʃ��	��L,<W�S�%U�P�դ����
+h�R��
UҮ���.�z�&ΑLT�3U�e�lVH!8�n�%����~Κ)�AC��W��T��%#R^��*%���=%����$&ҕw�5�i-�bU��Ќ���A�+�N�KS��4.�����L3(�tC�ZE��8㪈�A�gM��gI��[�(Z"���Wbag���r0�c.2_(nW�"�xJ���l^�*
+�X�J2.���B%����^����"�%�Xi+���",�ڹP5VuӦ�۶l�N[�{�8�-���u�<v���s.]�v��-�"��c X҂��ܿ����_|�<�ѣ���?�z
Z�k�N.����*�`��h.,��^�|����;��w���x�;���Ƌ/����7_|����Ɩ�����U^AU0#2Wtg0��+�(�r��Fc�H$w�?h���GWN�>���G��uu���_57����������kmwn4�¥������� ����������a?�#
�-B"X��� ����"a|�x����$|��%�4����Q8NZ�t�Z�D�[��)"�w�Px�G����d�$���M��Q�	�����������,X��.�2D�F�i���y;;8��V7�쀰��H�0������'&���� �Igs"r�"t[!�2�FqCD��r->#@%��ǜW�bq�|;7���� �&�e�5C}W�O7�z��gĢ0��ɰ��\>Ln�IK�X�3��M��T�J:�,�
+q�/k�<��6ܦ)�m��U�_���smYH�d׺��9���v�)��>Kd�$�B-<M��ջa)���O�L")�<YW�+=^�Y�V�}B���0Ųإ�Q=����'���P`	������
+�/��q1M�ar;i��9}���rY��ΉS�K�<4%�+�K�xM��$����v��"�EUZ<�%1��B\�m��VU�y�ۂU�l�&v��$��n�e3�e�|�1+¯*�MV�5
+���v	7U7oټu���;��ؽs�޽����;�Z�-�3g�A����ۢE��S�"���"d[�O?֧��Ν{�._s�1]Y�[�+k+kD侺~�����<E[���w���x�;����w����W_}����g?�NRxE�U�/��x�U{|"�\xm0�D�c�`xԹ��������=|t�؉�o�;����

utumll|��
ollhhiihn�����l���kjm�\VwwGwoWo_w�@��Pl��)�
+���a�����a4��J� V�[��(!�b	)���S~5��",���a�0
[�E�W���+��L�+[�N�av<�r�"X�`�А���;;�����`5��!�Wt����"�N*����)�������!�`�Bcc�"�C��X�R��峓��Bqrj�0,�`Q~U�D���MX������ Vj�e4�WB5@ĵ�����W���\1�唨
� )�Y�e�����Ϛ4����&�$��rRa]����h��P�QeêM=Ik�E3T��X�5=�����#7�[%\�X�TC�,]����w���<KR!��4��rr�}ݴ����IN�	Rd)�G|~�$E�R5[���k�!-yE��x~I�M�l�)'�S�6)?�wB?�(E9���U�������!��]>F8�S)�SU$+�*���FuB^3�E���B̚$tbK�\�n���
�79�2�%_Ģ��<Qd�d�>���>�+���*bh��*�-HV��tK(���b�b1�;Y$��ϝ߼�"����ٻ֡w�;|tyy�ĩΞ�xL�E�у��E��g��֗_�"X�w?~��Go޺s���'?X�[�KL�~�n^X>��|��i�_����y�x�;��w���x�9�mm��O��?��?��/�������8=C�U%�2�Le���ǓI:5rɫH<>��#���X�,�3e��3����[\Y߻�sgskk����666�vÆ�nx㍍
o46��и����Ʀ��F_������������`
�����AƯ�c0G8�
+\�s���+2)�h"I�X��κ�)��"Rw�"�"a2�K����b:_���a�K^�Ep��� ���R��D:��h,��
+V[G�`Q��5�Z|m,��A���:;�^u����������Ȉ?�G	Š�&@�N63��`
+�,�5;MD�|aP�ӌڞ����3�dH{�0��t��N���(��`�n��5%e����?��ͧ�\ �T�QJ
+�B�˪�}��z&�t1(��՘�75u��j�QJ��BV%FBj�XJ�	����z|�.n��,���znO�`�]+����<5���`�ڲ0w+�r�\�I�!q����@����� i<J+�߀�َ�>r鯎��ي�������࿈arI�V(�d�?I������b�ؖ���q@�K�Ta��=��wahNH�,W�I�_�B��[�����E�\�g�ؕ-m���'%��EB���c����*+�@���qU�ם�h�p�e�
Vٝl��LY6�Y�v���@�57��H�p��{a�-B�"�����.�-��>~(��D���-Bh~r��G�n�<s�������U�����@����..��y,�x�;��w���<����O����|�ş����TZ�Au�mA�3��$�hmp����Ccc��Q(<g檛�:�YX޵g߰?����K������6lx���_����ܸ�͍o44nظV����������)��ޮ>aQ�5H\�E�q�ǂ�_���	��;�*����%��	�"�+fĂQBF��<��&-B�����i�BHSX�H"�b:�Ofr�K9o��}�$���������JX��jnmmr��h
+����S ,�_��-B*r���Q�"�D��4iNf��\a*O����3$���_Q6e*1$�`��s��fȓT%����l��Ⱦ�=[���,���TM�Ϩk��Wя��\�=Y��
>Q��*Ǫw�@��D��
£XK1��8�5l'HV3�[x�8����)#�:����AUW^�cy&v�[�\�&���j����+J~�g�܂)�,���+#z�k}�����‘*�Ej�m�����"&S���d�TU�v)Y�'Q#�@w}�H2��˖�?R�Ij�u.~G����[��k�סZ*¯l�E�L��D���)�Ȧ�Y�P�(��W�PA�*J��g�l��4�F�Qa�fE>KI^�ĺ�
+�Sժ�fa�u�ӆ��SLrŰ�Ue	�
+Lű��B���M�e��m�E�s��o���z��E���s.^�v���;�<��,�"T#Xt��I����Gw�޿t�ک�g���K�E��D[�K�G�/.�?���N�X��w���x�;����qZ|>��?�����?��o������G�S�^������W�����h$���@(4�����2�k��w�?�c�ޑ@���������^�׿��k�op.�ݰ@�o����f���ڨ�������a�"X���Ma��.4�E[��Hȶ�YEƓa�,U`�.!aY�u�'39��
+��b�P�f(�b���Y�šfE��ާ�ǧr�8��|Ԟ��Ξ�֎���6(K�B�`�;?#T�
+!�vv�{wo/���kxx$�-±h�����d&��|q��"�)�"��+����P�^����`!�����(T-SR�U�[��,��o��X�n�[3e�/��I�˪J]5b�BP��,xe��w"����=S%K&Z⫵�����Z���ID�,�:�+rXH�I�l�A�����w�9Țn"}d�"R��R���WUr	�\�4ńG�lە�2L���h�T
T*_�pL��DЋwQ�I	A�p�>y������F�d�"&�b&+N�t5@�>�)BM2���Z�]6�$%�+��'5=�Hbe�d��@�*6)�CS�~�(}��?�}�м[�w��X6VW�ɬ�U��eq\&_�ۮ*�0�3�U5y���-�x�R5d.�
�� �\q�J�ʼx�q[�iBr�
+��
V�Q��&���¦�[�l�-�w��G[�����l�����w����㇏�-B�"|Z�"���?a-�/�8-£�+D侶BE�kK���/,�9{����֝;��9��w���x�;�y�����ʷ���^�w��?��'ҙl2EG!pŒW^I�x��H��
+��!`p�?�HΕ�-�w�;xhێ��666vtuu��645����z�5����^��o��	7lx��7�6657�|Mm�-��m�]==]�,��74<0��K�+�Š�"1h�9B��$�",E��V�4�5��&29�`�
+i"��g�0D�	I�W����B2�#�"�,_{{S�����l�jnkmnmm���vʯ����ẋ�{����E������(T��9��"Ҙ͒aZ��_�a����
+�s��q�t]NҖ�p����T��U*_��BN��h��f�$���(W�	��z<�ͬ�2`�E�T<[嶩��;W=�����SYX6��u�ꪁ
+M�);}�Pٚ�*1ʄBVVm"HE@rP�Kq�[�h�iR�����D^2�d��t^����)w�.�SE)�m5�k�0#2TU��0[%Z��� ����/�n�P	wY2ऱ��m$��s{�P=����v�]�E���^	&�����E��Ÿ�&+�ll�O�xS.��mD�.�e?� [�4%e #~5�c_�%�\�eW���(��+�DQ+"��@�(!�c�x�|EF�(�"+�U�_�[UJ�6mپe��E�g/l�����GWa�Z�W�ݸu��=�EHZ��"���E�<��'��|�ƭ��ί��XXZ=�����FZ���-�ŕ���.�x-B�x�;��w���<g���ѹ�Ӵ�}���|�����o66N�4pE�W.x���k��yE�h�Ba(48���P$25;gW7�ܽo��]�H􍆍����������6l��o~�����sa��
Ν�������j��5����w�wu ���ᾡ����t�pt�?,ƯH�����!�a�+),ί@ꎃX���.�3�b�0�S�Y�J��`�*�y"r��֨�`������k�¦��MM�H��,XD�E[�$�%Z����=}���EC�D��F ��$-�TD�$�U,��F�JL�Nd�:���VI�,\��uq1���|�
+1%�Vi%��&^����Fa*����P��,��U˺�䵌�=A��)�Ʃ�z�8:e����>5&�tԼ�K�3v������p�N)��~�Ն�j$�*h�M=�}Ȋ�Z��Y:N+��i�Si�U'i[��pT		�qީ"��)!>�.�U0%3\�*L�xKuIUt$?�E�R1�ś�J���o`Q�J�X�J�!���+��)	D�ٔ
+�P�JF�*�7c�c���?U��f����RY��^!�U�-�`�[�J�PEX�$�4����k�6�����ZU��<�a�<{��B�W�KH���
+�W[��K��ER[�6�-�-۶o��"Xa���х��c'�ᵛ������� �h>�{���+�"d[�K�E��v̹,��/@�p�����ʺ����g��s���x�;��w���������w��������R�4N^�`���vV����v�^��΅� �FF����^6o۱y�N�Yo466��t���������z�����/�����׿��o~���_{ݹlx�͍����}�p��aO_W_?�#�+�{h4@#Xa�h�	e�F�`�F	��	>G�w	���gH����_g'as�"r����\q*S(�&Y+:�G�#�P��pWX���{CKcCsSc�[�`��+� ���N"XP!�����FGC��X,����'�)؅Le��\~�F��g�4�U*�;�)���s��˺�*����~=��	q��E���
W�J<̒u�M��J>@��h��u�7�� VW	L�z�¬t%LU��,�����'�F��ba-]ѡ�d�L$SB�6�ʚ0��{����I:dZ���O:�4C��Z-���RE|*��g�&���[~���:.a�P��
+%��X:~.Gg���(��`*}��9�#���I�&Y(݄~.��E�J|Z\���'4z�Jd	�%����i����dU�2%�����X�߹���BK%�Fp�5�UAӮ��,[4
�l'�>��4�%�a;�\ټ'Hs\������b�A�<(A��-��ڼu���> �+��H(2W�V����o76oٺuێm�w�������{�]^];q��]�t�ꍛ��ܽ��`�-B5���_|��g�BZ��nC��8l�Y\9���D"X+�Ex���.�;w�������_8��w���x�;�y>N���s���_���ŗ_��w���ܜ���ΫD�
���4yE�U�8�C�Px�T¯��#�\~N�+�[�lO��o6l|�acgOo[G�7���o_��_��o	���_����_���kąE\>_s[;auwtC���g�m���A?D� �E]�H�-����A]��m1J�܈�:!���!r",�"̐!D����j���Xk675���IOR��D&#���ؠ?�30H#XM���"lnj�57�46��|��̀��ڨȝ(�`����ST{a����ί:u~��E��"�D�
+�B�05S���&,:DHBVF	�"\ߓ-B�2\VvU�n���TH��FU5Q+���C�*�]�]�+��@�l'*'S}��*X��h�Be�OW3Zx�s-��c⦅�8�4��n/bc��e��=ӳ=3�{�3�3�q{���?�H"A���-؂�
+(��!A�JS�HxSH�%�IшF�R���5���"����Jdef%D|�y>ߩ�i����`J���y��X��Y�jJ>FM��KX�c�{^��)W��+5'(h�'�}1w�v�I���)4��?�Y�Nq
+���$VS��OԺ�
�}�����8�Vi��c�F4))
��x�J3;q̀d'�w����h��wb-�vZ�نA�@����	Y]@Bb?Se+�mWfR�zumi�Au�O��YlPE]	맢5V�="�<��0�]�Tv=&�S�
+��Y�.B���$<=����oʁ!��i��شd3�C�4D�,b��/%�d���G�G��&�'��L�\��_\ZYFb�۸�R�����/_&�"|E@X_~�ճ��E�S����E��0'���=Q�`���8E����U�k���k��ƚ�������#G��O~�����QS[�A,^5��v̼j��4��<5u89������r 񪢲��YYᬬ�o��Y����o�����IM;��_P`/>������t���'�u�ɓ'RRN������a:�3slY��ĂUT\T���
+Gq���YYF�k�~��
+X�j6b5B/!��Y�;Zꛕ�����	I�������ގ�@���,wR>�]X������BGO�^�M�힦f�`�jT��+;;Ӗ��򃔂��_X��,hS��vL�R���
+��:���jj�'��x<���`�jmnkk��l��	���Wy섂����˫ӯ��[,X^��>�����U:Q�0��%�TkbLV\�q���y�W�p���>#3jP���hL^�
+*;��c�rS��z�T��7��6���#�����t1C&����_��@$p�#��v)U�+�U��(X�8_93�d�`^��H�4�qa�MF1���8��f��U 6��S?�ָ�c�r>F���C�i�U~x,9�h�'�����#q:���OSu��A�qIQ����Xd�@�ϊ9��p��XI��Ȇ<���d�B���lˬK w�����B��]1�����N(�ي��%0-�l��mP��+�t�mI
+�\���on��yis���RY�ߎ��"$�v�ݢw?%�S4�A��#�c�E8>5==s���������jX��������~��=�"|��/��x]��|�
+w�~����^�"��k5E��ǟ\ۿ����S�X��a�{�#�P$n�nc�5�Xc�5�Xc͏ir����/~������[G�d��Z::�(󪱩(R༪�o����`
�^��U�,@�r��.�`�U8 B�rut�\�ty�+v�����>���]X\�����v���SǎNj�}	S��u�|:HXY�6���-(�+,*�#	����~,wg���]W���ea�xEYX��u�-:���C�H�P�!E���,$a]@)‹]}����"�݄�Տ)X����������Z��T�UHqyy��n+(ȲٔϮ,�s E������gD��<�b���؋�����D+*��)O�U�V�mg�j�����F��`]",5!�|pN����M",Mz��`Ŷ^�S~�9+�����#/�fWo��i�pu��g�Y��Q^QU�T�JS��~=�Pd�(Fkb�!U�bBsf�2�B�J���&<H�)�Rx�\BMçk=w�x��z!���6*�I\���dߵ��Il����<���.G�<��5h���`�k���%�}Oې�O������ĨO�ט[dt06a�"�8�O�JAQ�PQZ���PFQ��E�l(O�T����'Fz��(�!�G}䉱�sN�|v����RE$�HyE-�Gc},�/��+T�VjPIbd+u[�g%m'�c	ɮ<����>����"�`$�ŕ�e?��3t,�āD�˒�ZE��89(���<4�����BN�׷v���߸u磻�H�S6E��M~�ݷ4E��W߼x�哧_|v��[�E��
+wF�!B]��
ŠC�k7��w�Y)Bk���k���k~$�������/�[������5�M���y�Hb��j�`-8�jܕ.p^�~U	ʕ���ΊJ�`5��w�]�����/)+OIK;s�|~�='/���3'O�:v����$e�t�8ƹC)��4�"L?�������k�����ۋ��^V,�
+G��� ��r���aVR�j�Q�����Z�-�H�j�H�"�wrVG�ܻ{;z���"�pWք�~�+r�k����E9mS���pU+w[TR�WX�������̌�쬌�,�e�
(X��U@�W�v��BX��+{i)�`9�EX�B wOC#t�� 	@�:
+�%B�R�)٤JX$Hx�ӯ4��Ir�:�80��P��=���~Ȣ]�2��1�+����xE�j�}\=��3*W�m����AF/��=-��Ǹ���r�N�bRxҀO"p-�fN#u<�����do���i�cSiX��1/u0v6��E���<�(E�w\rMY���P&Ϊ�9�|�h&
H��c\�G�=`^�ȸ�$V��qՁ�$��
2@-��!���O�2�+�:�3G�5%����8�(��X*�JK�	L!��"ҙ��S�2�q��@΋��WK�_����"��z���A��J=�&e|X�z�(��ԡ�܇�)�_I���������݃��P8�F���SS8E(���vP��v�b�1�[�0���/�Ȃ ��ё���񩉩ir_\ZZ[F���!%�����W/������?���g7>��������"�o���pd-�����_r���k���k���͑_��7�|���myyM-�P5���iP�W89XG���*W�lW��*P����^�t�9n������B�ŋ����gϦ��΁|\Q��s'SS�N�d-X�rOMMMK;�����
���",.& ����
+G��@rW���
.,��~U窫	�Ӡ�Q~��Y���L-XZ�P��Fck[s[GKGgkWOkwO[O_{�Ne���@�X���>`�w`�{'X������J�`!
+V~vnn�-;=h�99��0'Y�TV��PAX�_XXh�ۋKK(�ݩ<gd�����Ƚ�����,X�����w��"N�"B��T �噓b���Į	J�(��H�c�2�����E2�D��,,�
��Fe2IR�GC�3f*.����Ƃ��My��4�q�9t��i����O�o��F\U�q� o�R��t����6'(�}�[�
+z]H��q�n���q�����8^��t������sQ�K�ĝ���1�W Hu�S�x��^�b�H�Z�P���TEΕĻ�|�c�B7�ٷ���>U����*�>NӬq�^�?y���F,-�'�i>F
+�4��e	Tk�:����-�G]X�kPw��TwB+�s�U�Tr��Y�?���\��_
�'�g� !&�_�ii�/�Ñ�P8�m��]��rEQ�8$(�U�de���+����×��P���G�Ʃknaqyy5��on�\������c�E�R�ԂE��$E�
+R�߼|��r���������pt��� EH�C�(��~磏�_r���k���k��L~A��������#G��O�O����q�C��W`��w�y@����
+k��j�uA`�!�XUU-m�ݽ]}�2srN�����(�+���ޱcG���O" ���S�O��u��"L���������-(�+*� w`��]�U���E���`A����u���&�ݬUb!��6 Vs[t�ao_HX8BHe+~����`�w4�����Y]S�p�KK󋊐~���������a��r�➟�ū�B$,*̷�xU�B�����**�g�ܫ�n�ۡ<����&H�VwOw��`]���q����+a	�^�!��j�����T	�m���.{���JTi�Zu����QJ�=���Dhbe.���j>,,�����L@�Z͟�9� �UF��p�OW��Օ��f8=�ds|:p�|$//F
��kL'[�7Ȅ�8��+B�]�`���L%��k�8Τĉ3��y�X!� U�D/�;����5��t�+��&����F�f�F����r�Q�b�-����4�=m��"�V���i�%
�.�3��D+��sjߧӝ͍qCr��GղT
+�ds��L%J����D�+P�T�Jf�X�d%��M��©�?��S3��������������FFi$�DE�ypp����O?Gc�p$�F76�߿ ,*^���؈%H�p%#~��%Lw��`��B$a����a	���� MB��Oq������W������˧O�A��6Nn#�H|=�B�`�.��p4��];�?�?n��c�5�Xc�5�Xc͏f~�_����o���-/ߣ�W
�p�㪭�����T;�x�+G%Z#�W䮼������������(5
�����܂´s�#�HXǓ���'N��(K��ӧ���u����(Eh˵)�*,̷��^Va/+G8wg���ҋDª��!X����Ƚ��Ќ%,l�-�	�W��4�#��?�b�.Ž掮�Ξ��޶�a�.B5E�ū~�_!	(X�ݘ��\��Y�����m�Ȃ������������m���|���+��
+
+�Kyt��b;*"����@V5�`56 	���My��]ݝ=��}z(KC`Ѡ������*��.E0�j�a�}F�:�4�+Q�ʬPK�i����=����`���[
25s�<�J�kT�;/I	<]TI�Z�O`B�<��k�d��Q�4���*�Z�t�;]�Y���^�R�(Is=��5K6י�L\C�D��éOz�;���kM:��I�41v��d�%H�l(V���$A2Q���c�Z:u���99�O�IL�|��Y:�� ��4Of�H����X���X��|��A|!Ϯ	YD��}�r�`H? ���n�R�b�R�-��]�P��_�go���WW�ሲ���K�1P	�]Y_�����v(
Gc����իp9��R�P6�$
+�%�&TS�/T�B;epa�����0P�&�&&'�ff����/..���侽w��?{�S�/�)��(�[����g�_*�r�7omm�F� X�cH�Z�)B�`���'���]��k���k���k~4�������?�総���~�_�韪k��k=���$�^U��J�_�
0bUT�r�+���V{kGgs[���\��S�)�33��陙'SR����$�_A)!�`���,ү2�eeg"��-� �Ȟ�@�Ee8E,$�R�XX5��HX.$V�B����T�@z	�j�V'lh� �N�`u��u��C��X��.�~�%�wЯ�Q�X��Y��s�r3m6$ae*�,[!��/,���{
+��n/&,�������F-E�������������w��g��)B��a}���HM���tn+��$2��T��ꓨ�ݵ���l��W��A����9=j@�8tՠO�`��<ޜ�G��u
��&��P���֩���
+4���8�����,��0�Y$�A����$�4%���tv#&?���.#&(lK!�
+eL?��P���ez�[n�-L��H4c�.�1�I�����f*��nM��)Z���Ϡ��Ǩ����4.?�
$v���
M�Sd�$3яcR�,櫲-�ݡJV�qʕ���Ŕ2��
+x�U���U�Ԓ@&
+��0֎԰��W�����'O�����Z(	Gc�33>�@_Bg��������[���8Pܣ����-`�(Z,�W�+�hw�?�
+\�b�R.342:6�$����+3W����
+��m�`���"|��ŗȃ�Y��CB,aA����RS���oll�"@�����Z$��Db���[�G����o;�Xc�5�Xc�5��h[�~��9yy�l����:���rU�v1���\ċUUE,X��r�Xu
�-m�-��յuY9��ө�g�r
+�����%�<y���w��A�c'��uY�RϜ	���s�Y�9�,��a~��������]���
+g)�]�����^�JXu��^,Ocu=�&ĥ�tѼX�Y8E�%���npa���1�~ʿ� ������B{Oo[WwK{g���U\�<�`edge@a*"V��������"�p/d@�e� a!��]�,�!����������R��ݽ}�/Oq��<>���T�e\S��jr�e�L�5�P�.0(��)�1'��.&�(0D01��d+<j�P�ǣ���(�����A�b4.�%hiht&�7(H<��)�i�?M�����20(���(�&r�*3%G4�>z�:��'�F��H�����,�b�=�(l�}Mf��d� ���|	^�<C�J�*Mb}�Nk,d���)Wzx��O�E9�R��n�x{��bO.h��w��%i+�V���'�YZ/!�jiA�$E�?4<65sHR���PDY�W��W�FF������|������P$�F#�u�e?�bbJ9C8
+�}k�h0�Dc�(����@z�%�O��BEb�@���ԑE�W2�bS�Ef!����8X��f�^�_XXZQ�<���ۿ��m�E�R���P�`��V�`�.�W��B)�'(Ex�Ïv��c����Q�`�6����S��`4���?�Y)Bk���k���k~�SQQ������W��~箫��vW-���~�vDn'�+RAX��+�PVeeuMSKkSK[]Cc����ٳ�RSҳ������O$�:v�Ļǎ��t�(�'�<	Vjj
+��9�|VvHXy��6/R�[XRRTVF����!E謮uV���u�HXKT�jOү K��M�E��T���V�[��
�W�=:{/v�1BՂu�P�:z���������\�wVW�:�E�������+��2���k˥w���!Z�~U`������ ���Ry�ʷC���z��������Y�z:{z{.\���R?�W`�����B�bC��^�cJ�����?�xcf��R�u�uxJ`�T�<��B=F�b�U�1�)ݠbIf;����uҊK�i?�-|���S�a����(.����ЋE�β�;Ib���7#��J0y�OϪ�Z�x��>�g���>+N�9L�c5�3��{�v�{�y̧� ��GOW,���p�&Q�;�|gs�H_�<ZƗ>�����!�7���x�U�"���HY����~d� ��R�y�J`j�V��f�,�������V|skkgo��������k��+{�&�pà������O?�lvq1���p������������ڎ�֕W� �������:�py���;g�2R�EYGwB.,Y��FB���G�FG�I��������ʚrō����I�.��(���?���������n4�����E�ð'�
++�U�5�Xc�5�Xc�5��h�W�'o�����|33'�����WU.-<��+�e�;����JY�U8*�������Y�>����4[~A�-7�LD���{RN�HNNNMM9}�������-�����^Z^\VQ\�(uT�Y�����q)!V�p���� a�b����@��-*Ƚ��/j‹L#!����`�6"
+V���lDq�����Uүp�Xv;��paqQq���DM"M"VcKK3X�:�������������F�ج�ȴ
+����� ��R��L�_��ᠪ>�z�i�K���*���D#���>NE�P�7J��q&��"�	� ��DC;�&����}<��+�c�OFl���i�M_+��8T:ӎWb�kF�E�Ⓓ2�Kt�D�?��c�<�{:�FK5�����
+�A2I����pfaC��iƋK>1���y�|�}�8��Ȋg��zG&Ya�v����<�3,��v���2*��(���'�������Z�?0����������Gc+��J0�,˫kK+��X\���*���?z�dcg{ai)
+�����k��ַvַ���P$��Bp���Eegl}#��cq嫁�Q�S�݂X���Al�¥� R��T�h�؈�����1$a!M�"T>��?���"|�{���
+�ܿ�]��2]�(E�|��KH*o���{��o�on�c��N��(E�a4����Gʏx�z��9�Xc�5�Xc�5���'//OY�������[?{�Ϳ���������c�k 9誮�&��躪
+E]�������,w:���[�[�u������gN�&��
+�������GO��Q�"<v�����rgR������L���D)B[>J�q�����Q������B ,��^KJ	�<U���{	�
�~E��ބ\X$NH@�m�H���VG/��b
+
�-����u�������������A�0uڲ�rl9�\�sH�R)�E�$$)B{,Ÿ��@��*�`������� �����N��w��b��~�`�)��KU�X�	�� ֗X;.��!��`�8`���D*"(����m���&�R��kP��SZў����D�&Djݨ$�t�I��D�S�\�Ӱ��J��.>@���D>�����n"Iq��9'\H�_��ƹd���^wf3H���e�SID3ѣ�/�F���/�T�2~R�p���e}��(U�1��tr���TU5�v��
+J:�����h��?���	�~A�b�+��r�+?e"LyE�4PV-�p	�v-Q��,��j��Lɠ<su>�����B�P$������:��8�������-,�GX��׻����/����X8�����VH�Z][�_X��redl\�;{��?|��/[�D��hT�!�<Šڵ�A-ĉB��$�_Y��!�n���34:6:�����+���G��{�nܼ}8X�"|���s�"���o�6�`A!�_B��������ݽ����!	�Ɩ���=�(�h$���S����O�_x���k���k��q̯����x뭷~��sD���!�+W��`6_�� E`�X�Ve��	E�u�M��
�-����J�*���K>}��{Q��?v���S�N$'�LIA)B��+�q>3+#ǖ�W�,�"�#V�CYJ�RgU
+"��,Xn0bU�:B
+uGB��Ҡ�ԅՈ#�t݄R�m
�m���-�]����m��k�Jq���K݌�[�(���I��
+��Y�l�Y�➅@X�Y��l����A�_��x�U�����2��r��n�"��7A��1Ƚ����O�`]���+Hj�'5��5�Q�:�d�~��N	f�s� ��+�idhW���1؅����[�9��[�.��O4���Q
+�QL[m��^�%c_���hh�v��o<,����!�f�n��Z�����e�9�{��%�^��	B��9��d������}�|����eR�V�Ҍg�dZ�&�t�)���66Nn�V����ST��:[/�_E���^���2�W��DIu[iCz��������pd-ZXX��Tv����GG��'��FFG�1P���>K��?h���߻�����h,�DC���Zpnaq����I��r`�\���_<�~����r,X���O�W�R��A�P�-�2�b
�A�º֐r!e����HX����`0��ܹ��[w�޽wy����9J~
)�W�4�F����_}�M޻R�{�Z��1�=���,X�E����[wk���k���k~$c�ە�ѣIo������o����uj�+!$F,5Hȴ��U�p�a
+�Y�Z��^SW��,XɧS�gd����8q�䱤�w�{S�U	+%%�4�`�?�$���Y�Y�y9y�r��a������AªDVu�"����Q��CqX�_-˃��]�kY��â)¶������;SDxI�����b{υVHv5��{�[�

�55eNL�*���g�l��٨�0��\RD���Z��� B�X�v�0Ž��DYJʱ��D �D*�k�a3�wv�uu,X������BȘ�������{J�Q�0vpOy�ݏ���+�%Y�KM0\>����TԹ*Ķ%�P���ߢk���}�x%�;�̨M���tI4CE��5h(
L���o_b���d�'����}f���'SV�dF絝ÁNz�H2y所N�>>�
+�;^2M%�x��s�1V�d�D��H`�k��'�S��;9.��T�Cӊ5��J��J�jbs�ȪXL6P�Y�� i�vAf�f"Yc��q)�������C0�Ñ�յ�J��!*(��
+�S襌�Ը%��F=~�����,:Il5����
��@t��}yppai�񓧑X,8�x(���	D��D?�`�QAĶ�r�����@�`[FF���F�'Ƨ��f�^���_\ZY����u�"���}�E���H�]�	뛗_~��ً��?���k�onl���B.,Я�KXʓ��olo�)?�7w��_x���k���k��q̿��o�x뭷�IN=]][W�W�vUSU����{��=�*j�R6���
+@XX�Rw]}C3ؐ�++ӑ+�t*
+�+G���S�cǨ���@�:���E��ϟ���)���<�E ���ҢҲ"�*ͪ\�j�P��H�^B�`��CYX
ꆻ��M�+,d�6"!����[ۛ���R�}��Ǻ�.Q�T��փ,Xm��m��\u��U\^���`�r2r��%�R�I����܋
+�r�U,\GhG,;ra�UT(�S���j��U[�@�--�E���������E��}�H!��T	�h
���U��.p�>��\i%���.
�G2����5��x�J����N����ە(1H+6�ǿd���=�OIf|�Q��G��d��'��+C0M<�G�g�&H�%,�̽R���9)ݬO���DY'�RB.�ޅ�ؖ�x�n�ƶ>�O�K�e�n*�J�n$�ؠ�N���M��j������+SAO�kJ��K02���D�k�� W��t&h*��T�ʇ���$B6Y��-���G�FF�#�ʩ.]�1�/���H|s{/����E����08�@QZ��ЏlW`�B.,�V�|-,-?|�h5
+Eb�JEb�S��~�}ac~�����7>���ɓ��%�`�o�CR��W�JhW�@����!"g�x �
a�
+���a�B�(Y���y���F�&&���5;��P8�$�7o���=x�9�"�
+���$,H~��%t����w>޽v�.�8	����R��k��J0�؊m�*?�Oj��c�5�Xc�5�Xc�zJJK�uMu�o����o�_����&͂�[i~�JXՔ��+�B�X��Ng���tU�7�4�˓�����3��y��s�'N�	���w���$��N"	�tJZZ�YTD��u>3;ӖKA�E��*�{yyqyEIү���-�@#��v�^�*7����x.�VP��Y��������։�[�P!0�.P�c�]��
+�rdkGWs[�����S_US[樴��P�����-;7[��� w�²�,!�`�������@�*����R�


��roA]��]]�}�.�������_`)�zƵ�b�U��;	8���
+��ĪX�$%p�@/�nyu�u�T�Sݤ�Z�XD��i�����T	U��IJ�/A�.��ù�t���26�m��}�ț7�I4��T+c�kF�2�TID�2)�3�K�D�W�`db�+��d&:�~L.�'�����%�z���I�@�Z�W����g�2��#�>j�} ^�8���jq���Kd�QX��֚��Ք$�ndY���WY�ON��ίo��M}s{��ʲ?��(�U������b�G"�;�H��d��E'�\�m�H�PEKƬ���7<|8}u6_W�+�s8�'`B;�Qƥ��x��Ï>Z\Y
�‹++���#c�I4���gZ�p%S���2��Z�G!��
�������8���g�^�:?������ĔG�����;L!�"�Faa�
+u~�
J��᧟=@]�{�t��kc3��j8�ƕX��Xc�5�Xc�5�X�c�?��o~��G~�˓))5�uU.F�~;�:4�;HX�UA�+d�r�������Z��\�p�KO?��z*5���SR0��{@XIǎ%OB)�S)�)ig0�lz�ٌ��l[�-7'R�����(XȂ�AX��P%�Խ����][��u�����W�u
*�sݕX�-��������������u^b]X؂)��޶�����FD����TTU�"��BZD����E-X�r�%�B�AX���*�;*"D ,�"����u{<u

�"lim
+VgGwwWO_�E�`]��K��)��T~�� ��	�Z�D*Վ%��*tZ�ȓ��KuR�0v���*M���J�~%��1���3;�ǪIfJJl��w�K���*1�I։-^C�̛8���>.)�͘*]F��8��I=��N=�ɛHh2cd����!�D/�41�Oyu$+��9�cO�}4�q;q<Р�C�9m�
+�����4uKXq�y��
+�R�^�.~(0�v����6���s����[��׷����r0������on-���
+��F�>�����v(
G����W}�(0:�������Z�Va�������7��/D��������(J~�=�r������ޝ�������!��d��Jb�K��2_
#/�d?�g���a�f�v`dlxt|tlbKX�"\YYkk�?���=�"|���g�r��I�+\D�{M������������S��p��+EV0�ZQ�k���k���k~�r��u�[?���o���ۺ����Ue
��B�K[���*j��p8]5�M-�RS���I;~�ę��+�Dr�Ѥ�w8։��'�''�:}:�*ae���NϱP�����B�",+)w@�\XX�Rn����nLtV-���(�W����\w�R��؂�nh�4��!�`�!��8
+�EU��‹�m����^�ܢ����.u:��eyEv[>�gg#�;HXX�	E1�HXv$�ە5va����UQ�����r��4Ƚ���������^�#,�BH,X&��L���2����&+�E
N$08ȼ�۱h0�'��*V�bR�"YI	d6T�+W�
+Z���2�g��L
�6ϲ�n�C\^>)��ʄݝ��m�`2O����a7}�P2o�;L��x?�t��d��3.&S;�W2�ybbKL�q��t۲��fg�u�����t��Md��,%��+Nn��;�E�S�4E��
r���DV7�|�ey����C�H�������5Уb��ԗW��k��PXy�S��4���ާ�m�l#�э�K�"#7	�Hy�P'����@qW}Y�zaiE9U0G��x|%����,̭�*�O�Hk�ʯf�	��X�4�J�S�jH��v�"D,DABr�.�񉉩����ٹ��kw�����}]�>z���s�"�1�W�~��v~�{�_A��kH>����"�ۿ���<�x0G]�|�p-����w��~����5�Xc�5�Xc�5?�����˟���/��O�N�t�y��lE�n�b�T�U5� D]�U��Jب���)BD�jj�44�V8����z25�怂�t��ǎ��+�a=~<���'O*��"�3i��J?������V��܂��";X�JP�����IX�J�r�,�jl�r���pXԅE�+e��X�8W�j
+�����	�j�����޶�ގ��Tº���IYc
+VW_Gυ6�`u��w4���66W�yU�������s�4
+V�-;@�y�؅�WP���H��
+�Xv{a1	��UZJ@�.�����Ur]��!E������������}�b_��~D��4�Q܍H�A���a�����4a�K�^A�ha�j��zԠOMJ�ҥf��,�����rΩ,�{��F��L�D�"u���I�w(]g
+J�t%�yL3�	�DٷD�q�\5J!758�	2�Aur_�.�f�%Y���^��f���4x^�1�>�z���A9��$�ʕ����%Ư��Pi�|��$�^��?�k!�D'��.JF�����`����0쌊e(d#{&;�3Hr`��\8�)������������h��
pRu��]�?���G˫��H$���:E�S�J��~�������'�{����n�ɽ�ss��z|csr�J`xR�*5��`�p6�%���3�v?һ��A�4�:��lW��W�X����F�F�>1=15s��������w���[���_<�,X_!��`%J����H"V(����f8��A��p�����/9�Xc�5�Xc�5��h���Ϗ�⭟���������US��Wn,aᅸ����,XU����+�",��P��46�75�����3�R��Ξ�-(L��>���^ұ��}����=	�O�<q��ܑ�ES��X��A��$,�"$)��
+eq�)WtT�)B��rW�	��]W�֮:�c��ê�F�jO����[ꛡ���`����v��E�a�p	Y����������̓,X�n�r{���|;�`����d�azNvVX��0�(BXX�)�v;�`)kpa�a��Q�ph��zOcccsKSKkk[[{gwgOOw����߿���*"��7�7�Q�KC6�L�A�΢��
Ut�
+��7R^� 2v��Od���`�=�I��whdϘ�;\�2���d�t7`��N�t2��֓WLC3x���rc���L����:����d���>�����_d�R�Aђ^Z�,�Wԅ�dc��(	
+����A���z�Mf��5������X�IG\y��z?���Z΂E�"R�D�ٸ�)�&�hGC�SH��C`0<26F;e��P�lc��r����gϞ��B�p$�nl�v����G�K�"֝���<���ɝk���`8�\t|zF���861y��������C�r;��ˠ_Q�
+�Q���P� ��/9K����$gɴjP�~/�F_����w��aa��������+@r_Y^
E���;$E��'�"|�H�/1����*a�.�/q����"D]��H<[gS�k����
����C˅e�5�Xc�5�Xc�{***�7J��կ���[[__U�v!	�Z1����k��IA���J:+)���V]Cc��y>3#95�Tj*p���O�>v���ǎ��{cS�II��u"%%9--R�gΜO?��q>3;�f˲�w������RRT�A�",u�uB!X�������*��<�K�rBVm#J� 	��HX�=�EV�*a�,���ξ�����֡�����UW�p�J**
+�Krs�r�����	Y�,e#[��
+p�0���WjaqQX��*Ƚ=j�P��Ur]C���	����������ۃ,X9�Ȓ�t�h�
P��4R�i6P����0/#jEKЊ�ڵD}럐�����n���QW�Ld(1A�P4*?:�Ϥ{�T’L(�~|f0vc���3կ �#/	���T�1��Ktr1��^k�$�����{vHhQ�S&S��K��?�L���K��>�g|¬	�K���ؗ���^��D-Q�#Z{ [&(j��
jm���R,��B|Hy���+׮݈on��#k���������dյ�������vgO�����O�.*��6w��ã��M
	*�hxbjfs{w�����7o��pva	eA�
+�#���tyuurzzdlLT�*TY(�*�D7���_�]i�Ve?F�Ө�Lb����Z=@�fa��?4��ĸrC��ZX\^]>����	n�A)‡�?~�������W� ���Z�@¢)��>���ݽk��[��z8��k��"����?���[�wk���k���k~���o9��[o��_�uM�Dž�*"X��	��	��`a����ˡ�ih�onq����奁+%��ټ���YY'���O���H�:v�(֯P�Ib�" �s�8E����o+(�-*�/F.����򊢲��CY�+]ʢ��Q)!�a���X��:�(t�"�^ud)�F"a�!�`u��濢�.Lq��涎��wP���UV�_Td���*Z������E�y��@�*���+Jq',�Eh/)	���������Y�	����������������ή���=�/�_��j��l���W�?�	t��#Ui���5S
��,Z,���Y��C���zFVB��d��&2��4�5hD&�s]G��7t�F����I������C�()_=���+��"�¡'��:���9���@�̮+$P�}�؂'�'��=�3��&�����P�3��"O�1����l&ʌN%�IFUh2�Z>J�2h>���㟧��X"öB���JF�� �~���A�%��4~�4����/}������J(�Dgfg�C#�y�+���(#��S�����a��u���ɽ�����r��o޺�Fg�A�R"�����2�����RT6"�
d���O�O 015
�D�Ƴ"�+j�R�o(ʲ�خ0�
+�(Y�R��X��d?ga_��0�1�����%
�����O�OLMM_�2;?�����c�[����ߺu���O������/�!	�t�z�-��~�IX߼R��/>����>�޽�<��H4�G�7��Z$��*˝���p5d�ܭ��k���k��a����?����sD���_����y��بF��f@�j;���r��UIS����Y����23R�N�LIɲ�l��g�$�8�ޱc��޻ǎ
+��N��V-Xg���geA�0/7;//����
+�K�e��r��#�����D�UuyU��U]���]��x�)�J�(TYX�wַ�6�����S�� aub	������.A��T���݇(X�M�����q����+,)��E�6."#VN�-�a	�jV�_�#�;�����X���^][뮫��o� ��VB������R���/�P����~%yN�R�{|NP�0�vrv��Pwr�����B���Г�����Ak��ҹ/�%]:O0x��bbnU"�Tb�GM��!��}T�D~*�0?��8:�Lu�L�+�)av��/'su{�3Le$��?�x�2��b�/�1\%����D���I��I�6̿}��J�y�#v������Q���������66�v������'_ZY#�hS���������ݝ_ZV����Y\^	�#s�K���}
+��������k�o~p��ε�`4>9sE�������۷�|t�^8S.�
+���\������gy58�������k��X���<:>A��R�vE�W��JDQ�h�r�)�ݯګ�W��Jsg�&��F]Ɉ��Q�+�DQ�pdDy\��pzj���չ��嵵H4߆�� E���.¯��)�o^�R�+*a���Ϟ�|�S�7P�0��ĕu[��7Q�0���#�����5��y���k���k������������ٛo��o��%�\n����]�N�r�" w�_!�{���������\���+(L>�����z&-��0,X� Ex�(�܁�u�*"<�|�DrJ��3��+#3=+;3Y��l��� w�bU�:�%L����
+J	]��êq��:�k׽�����N��
+���,X͞����֦����+��d�8K�,X�ro��njkohi�mht���+����pa�-Æ�������rrss�� ?�����Ă��v�`Ƚ��������D�����Z�ǃ@�����������s��/�,��W��+oDa�,ĒR��f�u2=Ib+	"�����@c`��)��{J�ٽÉU�j?S��=�c��uq<��="{b��������=!TbBv�a�E|}P0��%�W�dq��K +	�CL541�Sb�!�"w@"�.�����K�8�:6k���?�����,p�.�sq�.�Y]����ٻy����ͽ��{��ۻ;{�vv����`����k�k����(�5����mlo��r��>V�;׮�ܸ������[;����j0G6�w��\;�>3;�\q������ٻ��G��F$�"k��r��n߸����[�׮G���H4�,HDI��*�&��Z��uؖT���8�J�oى���	�}H�� �(WC�d�,Xp����ONLM�\���_\Z^[�������S�"|
+)B���q��}��q��շ�n�"��5E�=��r>�"TS���Z$��ll��������_x���k���k��Aϟ�ٟ)�O1�w=
M�sE�Z�  �*"dUTQ�,X5`�j��o,w8Ϧ���N=�����m��{���%AỌ�u�ԩ�ɧN��NIKKM;s������3������(XD�*������ܡ����Y欂 aeU�˅��@����_�8!�Uԑ�	Y��RW�i�.���z�`�7�.�Nd��A)¾�*�/}�����+��w6��z�����pՔ8E%�yE@��VVFVf�
$���\���j w��"B;����J+�'����:O���������a��
+V��K�"�>�B(�:��UfP`+u�R�U̻�E�9A��53_}��k�N���̨S��t��?9�8c�`�7��g��C��+����\���M���M�ht�tx�(K�$�'r.&�;R6\Wf's1���X	$ .�n�V
+
+�?h��L7�d6i��$ݢ��|�
�ׯ�NY�u�����W����zh-Fk�E"�����������~$�2;'ʁ˃^��$�q3�x(]\Y]Z][^]]Y
�C���%�@�/^Y]���[Y[õ����\^����N$�� �U�X�A���H���������
�ZP� 2Yɔ�P�)Q� �+$:
aj��,X�
+�
+�l �eI86��*ꪒp<�1�}����"z�xtht(XSS3W��6;��L���n|p��"|���"��+�E�-V��e��.�/�|��O?{�S�QhT���"���z(_G��B{������=�k���k���k~����7o9��7����������:!tc�
+kY�N,XU�����ʊ*B���r�~���r�����>���z���� =+�D�Ǔ�R�G���ɓ�~���u.#�<P�l9yy��B5EXXRZXZJ$�
+G��	8wG#a�FB!D ,�j��D,Я��h�z�V{ HXS�R�-mMm���H�"]�}���O�"Dr�EeC�jhV���������@+"�F���d����������W��P�4Vq1�+**���ʪ�����:O]C�r����vHvt�t���"
+�ܑ~u�+X�?��>a�{�Ĥ��|	��	#�:�{��$��V�yͺME�.B�.%����ߡ$��K|��%��^�"<��'��%�E�S��C�)�Fd��ӻ�=�I�П��Y	���f��D�:�P��V���ǥ�d]۠���_Q�}��
+dLVl����|p���� �ϕOi�D����7���:�؊�׃�p(YZ]�277933533senaiy5������Z(��{mc{��ܼ ��>904suV9faiinqiqeuayynqqvn~zvV9�������rskg}sK9(T���A�R�E������+W���,��.��-��-.��/.]������JA�����J&<+YU�4G���F`�B��6��k�+��0��UH;ai�b�A�B�,|��e��!������Y�9- u^#]��>{@9X/h�7���.��!qa}���/�z����O>����7ni)�(�#	R�`��>����ևw�_x���k���k���NYY�������?������O����y����P��i����	)W�����.�%,s8�*5uOcsm}C���\F:�$�ge���S��0�_��,J�:��S��)���̹�g�䞙���i���',e)(.Q�B��VEEI�	A�	��*'8�paa�;Jb٪R٨������)Ba5�557��6���aJv�~�$���¾��؂���V��R�wVW�V8�0+/7��!B�������k����
+T���fŲ�1ȽD���w��@�.��נa=�`!�{{{g7��.���_�t���K�^��Z>t��Z�����d�_{<�q�	��F����+�XF*{BO��g�ޱ5��(4��G��T���*&�3SID84�vȥy0��Ɠ0��+6�xs��(C�N+��N���d��Xq&a�N0�E�_� s�R�����'3}�(1��+�5��Ki*�� (�oFf�9]����$~����`��7Q�O�\YA�x�Fv����d`��L�\]�����]
�B�hl}s-EM�O"A


�(K`x�a:B_h}���փ��76֐+[���(����P`hxxdttl|dl\ـ�!ǔH�f)�J���Z�h�PB�+QS�4�J^!�Jöc�U`���A���W�_ጡ<4B�,���
�డ<4��'�g����/��v죻�"|�HS���$w$a}�-�����5�g�^<���Grm�z|s+�ñp|#�N@�j�0��������o>�Xc�5�Xc�5����/������#?�����?����,X�l��F�VX��+e]�,w8+���Ʀ��F�<��ii�R�SϜ�����<q
+,X����E�ǎ?~�����`�J�.³g�p���X�*�e@�E��E��@�%(H��W�b9Q)!qaU� !�*����X����W�����Zp��R��mݽm$E�ϤU��,X=�ʑ��
-��I�VTU)7Y`/V�CVn.fe�gee�+7;�Be),��v��ÃX�*.)� �r��骪t�\��l�jjnjniikk��DE�{.^DE�����V
�-,��s��=�Ÿ�D�ddzωҟ-A
+ϫL���!�(�Pj�W�L�O����}��u�%�mxUJf�ڼ�$�O�~-!��"j��s�pdt2jP:��tb��+E*ʉ�O�hc|Y�����e�������K�T�2�1&�ޒ_�p3����%+���"�S�߆�O.���T
������&�T�FR`d4_GH4�-.����}{K����?�𣏗W��X<���Ox�R ��t�$�H��H���ke�ML|p��͝ݵPxyu�֝�ǧfp����$En�PjK`@�V!l;6\�u�L`��mhm�C2sBƮ��N���	����J{�LÁ�Qbʢ8,?�Q����kr|r�Y�aAa$�������m�"���珞<}
+
+�K ���+D���ߣ �ﱄŀ�>W޽�w�S��h,_W-X�H���[[������/<�Xc�5�Xc�5��@��t*������/~��7�|��/	�F�`!�;�X�w��FU�0ȝ����UT�B-��ªp��z����՗9*�gd$���JM������KNK;v�8}�_�+))�ĉ��"<�z��鴔3g�Ξ;s>�\fV:��
��
+�%�",)+*�]�X��,we����KX��Y�5���M]X�_a9,X�M�M͞�ƶ6-E���A$��]��]��:z{[�z���,gMM�`���IX��Y�`!����WH,XȅE��1���n/.++�,��\U555uu������TD������u���A΂��cY���X�%�����ۦ�z��O� h��S�KL�YrN�0����$��G����lb�,�&�n��#N��%���#�IGj�|&�!��̲)˨Vɼt�	b"g|�3ϕ��h�>I���g�#��E��$�R#�HLO}��J^���{�D�_K�L�/�uO����>��L�R?���>A��x}^A����FF�G�##y�c�A����w��A�_4__^���`��GڵD���ܓ�Ϯܘ_Z��o\���|Ή��������90�}Y�DH�R`h|rj%R�x�pd5�âD"��鹿�P�)����V�$6!H����G"��?��2�+Lk'n+�HXD�
+0\w�q��Ar����$N��,��	è�pbj@�PE�����D�7�vn޾}��'��� �/�ܿ�X��7PG���g�����폶w�"���p4��c��p#D����Gw>V~�ܼi��c�5�Xc�5�Xc�t~������׿���#��'?�����^V^S穂.�Z�ָ+i��W5U.΋�����r'���U��feq����=�TjZZvn>P�N%MJz���~(X�%%;q��	�JQ����gϜK?��q>+;#ǖ���i;��������²���:BH:��ȈUF�A�GV�K%b9i�KX�T��8wDǪE,�z,a�5�4�2)Br�)�KL��t�^h�F�6�`�"Š*����Ȃ���̜�,ZD�`���.Bl�B.���`���W�Ky��nr�o�E�-mm���r�"������������Kҫ�T֐�JI�΂%�C�}f�*�ȷ���}��_��+���O8�����>�"9��v?�Y��kE�������-�!hɇd�T1��>^c@tڎyN-��f�X|��©["�m�,9�A�����2�Ƈ��KIFw5�ɬ����E���eAf�T�
kOX�;�D��,����[�3�I�������\�]eikwo{���������ԴWE꿒��h|���s�K�H,�����
+y���ʏ�Q�!�r8}���j0�ƔwH�@��ˢ߯9�C�3Wg��ML͌��������������P4
+%����ܜr!rr�=_�hP�ĵ
+�"�j0P��H�����
9A��"��H���q� ~�&R��~�B�Y��W���!d��u�X���~52>161519�$����%�r' �[�?�{��}�rG9B��₄����o�K9J9�ާ�oܼ���F���H<[G)B�`){VC�K����/^��~��k���k���=?��/~���������FP��ԅU�vՠ a
�ba����W��E�N0bU��y�ݞ�r�,X�S�SS�gf���>{�؉��=�N;z�5����T���=w6#$,�E����_`��`�������,�2�R�r����.,�vָʝc�;��UR"V���v6y�[Z�H�Y��{)��B�E!D)Ž��"VWSk;�`Uה:1,X�r����Ɂ�͖i��rȽ@�|e/(��Y¢�b�aaViiIyyY��Va	���46b	���(X=�؂u[�KU�T�3�'���OR�I��nL��>+�IL�)}��u�5�a���[���e��>>d'�Vz�R��N��Ks����^B4��½ѝ�*�HC���د���D���[�X5L�dLD�v�ҙ�3�&��+g03{D.c<`�\4�6��KIe41r��^��~k�|�yI�����}�4O'��|�����O
+_�]�ml|pk���{�`�?0;��__�ܺ27/��*YG��_�@|�h8����D���R�`Y(��"��442����;|ev.��quaAXV��Q����o�����n��l�^�ݿ��wmc{7����W����WeHJ"��$ �Ma	��Y����P� ��x��Y�T/I��`����v�>A���U��R�+"a�%��C�E,XPA82����c�E89}ej�ʕ�������G�[;���Ï���	��|����0�]5b��*_U�}�=�{���������|���aQ���k}��U�k���k��ƚ�����_)����_��ȑ�ӟ���~WT\⮫s�k+�`��X�H�A�s��]�*Q���UF)Xʻ��RϤ�JII=s&;/�|&*"L
+Pܱ���$�rG)�T�`�9�v�ܹ�LՂ��0+�nGVY�`9�R�p"�{%hYN�bA)!@�q)!���$Q��+�|��X��� ,�E�R����
+Vkg7M^0�܁�Ջ,X=Ԃ��V���E����b[AAv^n�͆������l�-��s���`a1�ܕ5�����UVV� ,�ۡ|����=���-�ro��l�����s����R����PD(��AA��'��IG/�D��|^��P�\$�U��^?_̔7Q' �Kd�^S�we]Nd�z������$���gn
�t��L:�Iԇ�$6���8���D��&pғ�Ø"oT�4X�4$���撦&����1~rK��{���;\��ʠ_�
>4z�l�k���+u�+�:�h��@�>������D��>j��S?sr���A�rΩ��1P�>����;{���F8Hk��Z0����*��1�0?@�V��G�ƾ��˥��P4� ���e���Ӊ�R ����������`$���yЅ$b����ml�
��!��E�ו{S6Vւs�cc�l�?��r�z��&�|bXђ(�J�mZ/Ў'P,�vE���(T��lϠ`Ԫ�!\'�9A$Rak����ᰄX{52:�d��щɱɩ���ə1�(߲+W�fg�VVC�¹ܸy��;����C���ŗ��E�X�T��+H*_U�{��чw��^;���W��k�h0��o�+���a�r���������5�Xc�5�?{��Ir�y�?�C���9���Ύ٬q��~<��w�G��P@�
+��Jh��L�!H�Тt��UՒ�[������>��Rg�[v 22�C ����^��2ˬ�ZZZ�«���ʫ�����/�uu�`��W@q',����#
+��b�U]C#ڠ���������V���ׯ_�~�V^^AqIf�
hDx1��ϟ�օK�~�ܯ�^�@��y���ۄ��_\RTZ
+a�WUaV
	��1����j�7%T�X-
-�đE��X�j��XMm g�D-KgwGo_go_O�@��P��X���"��I��5I\X�����1҈��������������(XE��]r�N��aiyY��;x�d�;�EXS)B,a547�������ܡ�܈pbjr����筶E��j�[9z3��#�'N��q�5z�w�Oٟ��jM���s߂I�[����Ƿ�Ӹ�D�����m�AO���(
]�ttvQ���n"
�I�g�x+�q��"��ۋ�3��rW;JP�׋�|=�Ν1Q3�($�Y=:
Ѯ����][�9����VP�;X�!�EV�iJ�S1��:1vVv^�S�:�="A��)�Jp��X���+����C��|p��,V�vwc�d ���/��޵�@2��%��Tjg7���>"�d�~�$����g��|+�v����%��f�3#���`&F..��g���4�.�XJr��n��C�����v8M$��p4����Hlk;�����x8�֣�:G,Rv�
+4=��)����D W�l%�V�Tk�x�
+݀�`9��2���颊�D�+l�r�l�ӥ$
+������0��
+�+�^-��/���k�Ѳuݷ�F�Xk�ͭ`8D� ��{�ƛ������S�a}����|�/�P#����M~���|��7�>8<�'w���
+R��)@�Cf3�S��<��s��_���e�Yf�e�Yf��"�`��׿~M�`UT�X��[�T�;�`Yh���d�74a�������������[�**2��.^�|�Fvai���+W�^��q������Xºx�
+�"���)œ���[y����%D�*-)���V�!���`�v���
�"�ڦ��fY�"M	-�
+�!b�5A������ѩ��>8BR�4EH�W��ENL
����b�j�V=�`���V.P� EH"��X�*��+E�*��UUKS�
�M�---���������?0 w�_�,���P��QA��x��X���ơbぶ3yS�k2Ⱥ���7�@k���fZ��j���E�Δ��R�H��F���v��6F���m�S�pV$η,t� H�3�{`T2Q#"���4M�����n"�t���3�`Z��b�b�w"�F��2/���)������ng�+�ׂu@Q�M��R%2�@�D��D1�+Q�d�wv�{��������9f��~gm��v胏>�{����A<�J�w����Vз��6[������I;�}�q4GD������Q:��wv?��3�7������>.�B�’� J�����!�8�L�F�I��C#�:�=.����>���t��l%8TV�D��C�c���R��d�t���.0y@�iAHt*��!�Q��H�_.�N5fH�D�"�wɥ�� !���f��d%Ц�h��C���b���v��eͿ������V����������Zl���� g��F`#�����?>������y�?�䓧�~��_|E���|�U,���W�_������_|��ɳw�}���G;{袄c�r���}zV,aE�o��2�,��2�,��P����h��嗯\��V��cV;mGP�v���J�.�z�`5�v�-��MhchD��Q��x�v���L4r���K�n�ȸt���8��322���KX����u
,X97n��`�{^�����U��W�V�=VT��fa#�a�;చ!B�YXD�"v,paY���$�p���������[���G��GGǩkbftrvD�E8�%����ѱ����������O4�ʚ�R܈�+҈��7"�)BB��!&_U�����UY
M	�dVm}}CSS��� ���^܈ppxpdtd$,����܈P�N-0`dŅeW��,Aϼ2@N�D��o��t��KU:��9e5ֲzZ�b��x���+�X��}�1$���I�ʡ���F���|G�u��� �Kt�3�����~D=�߮K��m OqR��4YBQ���ª'U��S�7�A36'��sC.��c�(��O��=��=��@���IP�N�Mp�60A�2���U�d,�����{|����`8O��t,�������L�q�f_^Y��/�t,��&���Ȓ��uKV��t>y��[o��
+'�;{�G�x|u}��*P���!Jk��݃C�vɽ���pT�dz�|���JiH�)�R�%�cF�u�bF�VX�pU�b�d���oM��f���ca�YB��f��r�A�\a_���]t{�/v[�=>�׻��/�V��+kk���4���M@]mn�6���m4�hac+�֣�V�։̵�l��K�v���{�����"�'O�}i�/�/!X���8!ߠ��7��7�g�~��G���;G'w�B�81paA�0�S�h������1��mf��c�Yf�e�Yf�e֋[��կ^y����ॿ�����i��$��\� ,,^�5 ^AGB@����ÒQ}#*���"�ƍ+׮efg����\�̼p�⹌�ߝ?��/_�+++3(X9�ro����/�
jO)4",+/��,�VY5e�W��Wb�
+w$$8��:9BX�l�.,ڎ۱Z1�B��#!aa.VKGW[ww[7�`
B�,Xcc� aMr����
+�4Ԃ54�C(X��--������%����E��
+�a!X�
+�!�`�����,�Λb��Ԁ�R�-��B����P���5<2<:>:>,ڈpqnѺ�dS�+Y����,��؊D���*�1��W��JV�Ĝ���]�V6^�bxڒ�0��*Z��M�zC�wa����JE�P,p:_����4��D�H`�V#�*%#�FaC�����\�!%s��PG�HX|JNݹH�nK>=G'��
����!`oi�M��3��yv0�3�K��A>9�3���4pu;�
Өd,2K���0.2���W���df������?���=�J�b���!��+8)A$���
+�ީ�Vpfnn�fm��v��V�����X<�H��ܽ���k��Ks���m�_]CO�B����0�킂X�1,S�:���N-r�XkH��y�&l�@�U�~�6��.J*�]i,�YH�O��TvAFZ�M1J��رS���$�\ [y��
+:�^���%j}e
�V[�A���ۛۡ�Px;
�c��X0A+7�BX��X^]�-C�pum#�^�%S;Gǧ��=��XO�=���Ͽ��˯���?��
+Yߠt����~��ǟ<}��������G���v�Xj'����E�%������e�Yf�e�Yf���������
nD��������,K��p���Z��~E���Ȳ�H���� �)BK[X�:��rn^����+׮����/*�~#;�ҥs8B�{,a]  wLq�|������7nd��d�+����UZ^RA)Xh��)B����
+���HR�&E�ֲ�,mą����A!@�[)��޾�~���}@���"�A2�!�W�"VP��j�+���*+�K��n���.*�+*ȇh$կJ�H��#_с)�D�",���zro!VWiD�?8882:<�X��f����A�j#B�Cn�Ń�Dqd�zђ�;9��̈́3�z�������׎<@[����uo�`Tm�Ogp��ʴ�(;��(��]�>�Ѯ0Ǵ�c�aD#��hW;�q��LLc
+�S�5k�mI4�#Jظ3 �Y����;i�^�ӂx���{Gو��nJ
+�!:x?�j�F{�#'��yAϮU�̸h�UD���`mQ� �z��� �d�zB��z�y��_8<>��7��A�J�7����E���3��E�N��c�T,����Y*O.��A�7Ec}����4�L�����7ߺ�����I4��G�����r�^<�N�w��mln}L�m��*znm��!#NE ҷT�U$�'��J��WNf��VD���+QYoWY����e�	�OhWr�Pֲ.��z�dx;�\I.'�}n��D��+h�W�1�j�V�[���v ���VX���‘x$���3�C|�|�eP�B����z-@��W1�}uem}3�C�zg�����r��ɳg�>��/>��/��#�/���_}���>���O���އhct�����v�p,��`�#�T,�spt��?�����#���2�,��2�,�^���_���W_��K/���_k�,�$E�]X���XT�" �$�4B@����p��vtc
+�����,[��ge���^�v��ŋ�3.��ܹs.\���E�"�;��g�F�7+��6P����UV^R�+$,���� ������$l��!�#$ ,ً�\��Zq���Z��D,�s�M	[�zں{;��!E80�74�WC�r'�5b�ք������#�"�����tt6�X��*��K+*
+��U�WP���(�F�!,/�!V����T,pa�T���@�-�V��wu������~5��kzrfv�Z�@��,�ɗ���0|(K�-X��'�wh�o�'R��0S��N�SC���<�KM��xZ�Co��ؖt�t��-�s|���f��#K:D
��ν��;|�yC��F�5mvO�Kp���o �<���Y��Y�����F&V��:;�w��ڹ	��(�uJ}��FEA�����D�8��IA7OQ���7�
g��8!ԡ
+k��M&Paa��1�-,,-=y���~��R;��xb�nw��[������7�y��N�> ��c����ɃG�>z���w���#Q��s������o�J+��R"}����=|����4�H�,O���/�K6���s�7�2=��;!]H�d��%
+�KU�D�!(MNL�"�%��E7��,6��X��6%�Tv�hAl%H��J�`�[�
+J�Ϡ�p=+�<N��V��o$��U?6\��m�6�6�b���
+�����P$�UP��z���%n(�K���|���&�ڧ��8��[YE;
���������М��w��࣏>~��鳧�>{��g�~���O?���O�<��Ï�~���8:����x>�H<O�&v��c,��l2���(�G�믿6��1�,��2�,��2�����+���o����9-�K�`��B�B�M<Ka�C/B0�v���vt�64�������Kʲrr.^�|�t!�,,�E([��]�~�*���rnf�ܼ	�|!,)(-�{y%����U^SSQ[���1������4"�q��Ղ�W���oV���%�#�����"� ��N�`
�

��50J@�S$3H�Ă5<154>1�X�������*�k�*��KKI�(XEy����� ��Ҋ�Rl�����)X0@�")����roh����Z�;:��������������������4"$���n�p'ѮRb�`,|��>#RF�x@�q���R�2�yD����o���&�t`"�R%�x�Z�����Î�_��	S�M���V��o@t�j�T�{�a`�r(Ґ"h؍ZL��0$2�vK�߉3���&|�IԽ\T�Z�CyY�+H*F��)R�j�43W\@"��2��x�
+�KR�Hԧ&Y]ˆ[�W����J��&&�<�[J��a�N#�h1��F7�$�yvam#��?}��O$S;;G'w��֛��荷v�C�x8�
+I`}ss+"�,�:�swmc�j�@����‘DzĖ$؄��J$R�JE������6�v;k�c�W��S���������bQT�9o$֔%S�E�
PV�d��hS2�JRÃ��Kn)ȃ��l%9mX#۠��t{�pcÕǷ�jV�0V7kɾ�����B�XN84^�ƓQ8oi,�f������GW
+������^"�M`	+^l��nx�+.�Otމ�ۿ��h{;����{pr�ރ���A����G|��0>A������ƛo߻������C�XX�
+E��T"
�8z�xz;�=8|�ͷп���c��c�Yf�e�Yf�e�W-z��o~��+������������7"$�)�]��5YښZZ5DwBq����]�`��Wd�̹z����삒�[y�W3������Gfd�֥���\��%����7��sn޸�{�v^naa^qq^1�c�;�`ՔW�TTװ)B�EXO��h���j���-uM�"l�[�aV+�bQ�{[GKG'��!E8�;0,������F�ą5D��c�@'�`��������tЈ0?���܋J��aEy�����"�Šj�Dk@�V}}}cccss��b�`���
����O�MN�e����Qr-�DB��V��Ͱc�]#j�P�K%X��&'�H4�gu�w��Q�6���}��`�r2�QQQ6-I���<J��ace.�ük_"��Q����������e0+�NpӨUl��\1
+�&Q�E���4Gļs�"��D��KP�QR�'���AAd����;Qx�Ε�[�O����
�������V(M$�)�/һ�齃�ãdz7���n�_rB�;ܻS�zdok���X���K|s�w����˯�B�C0�HFbq�.��h`+�]^��^)�����s���"h�t:�J��c��@RC�x|��յ������ƃہ���F`em
�y�jCC	�)�M��1XuI=��Pd.N%��l���L�A����qTT�,.�(�
�f���K�@�]A����et)�~\[�� ����A�	�����B�t�A��'�qp[���٥��>{��0�����;8DwE"���B��fp�6�����G9^4��QA�h�G��w�����������򃇏��{przow��a3O������v$%m/�d*KE�ã����2�,��2�,�^�������`�˯��o���kYY�ER�m��|EY�*�����P�0�JXh����`�7���efg+?���4�fN��K�3($��/\�x�ҥKW�P�
+,X9�"�u�
+KX��UVR^A(�@������-X��a]}
P���b�{]S��"$��v���E������n������½�e�����&g��N,X��G�`MR���pw�@kwwS[[]c�[iEeQiiAq1�����QTX\\TRRRVZZ^VVQ����e;X��SUU�"������ml�kllljA��HX]=�@��!�ZJ,X8B8?���#�v��]�8H�G����DI��O�Y���m|#<
���Q�Y�:�P���F�=�6�[�9��'}�;�����Din�����q�"��/��«76��Ě�l:��3���D5(�:��_D�Z�1�ʦQo�7��c�5�{k�l���I|,Qи�X��a��x�8���X�j�SK�
+h��^ ���',t���V(K��{��Dj}c˷��È$��e���on#�������,��gE�	��uE�9��}�z#v9H^O�<y��;���N*��Ƽ>?�����M�e_��S������D�f�t:�Hn��ٶTaG$X ��F���iЏ�֝tV�1O�R"�{Y�ğJ_��-	T?�TSfU�IH�X�DQ`�������(�?�q���ˢ��t{������{�W}h���jucCF�C'AE�;f[�Պ�V�I�wST�:����Y��88:98>A�h���A"��%�Ͱ�\^[��W$�����ѱ��ܖWV7轣��̻�{�Gh'�G�Gh�98<Fk�;�hh����W=~�ȫ��BL�
+E����|H@Xf�e�Yf�e�Yf������o_z�4~��cc�E��Z��2�{+��+*ѯZ���Z��ۻ��:�[Zۋ�ʳsr���-X�W�_�p1�܅8�\ѯ.) �+��W2��g�Ȓ-X8EX�_RZXZ��V\N{�UU�W�@/��ZL�Vva�66c��"�ji��YկZ,� ,ڗ�ܱ����a�E826H)XD�R(X���֯
+VWcKkMCcyu5�vaI	X�p/¼�‚bƂU^^��ۉ��C�+�5��ՠ_�F��MM�-K[[[ggGwwwo_��@?���5>5=53;37�բu�jS(�j�.I�:H���HX@�՘�.�t]�x����$��9������ZgLP:���L$(���vI��&}tΡF������w�^2b��7�pY)*�(��d�T#��������|^��������kD�ƌ>v悁��9�.�L� �9���w7p�B��������O��7�D�saiiaq�j��+�(\���������(9�k�P$��ً���5�BǢ�Ę�$�	gޝ��o�#�|�?v��`��A�%zG6 �&���f�����ǤkaԌ$��9ղ���t*h]vX�sß6変��q^9l�()�
J�e�h��m&�:H)�JR=W2̊�M��KʄI�A�	I=����-�
+B���U�
+p=���IB�4!�U0
Ec8$H�V�"���~zW		�
++WG'X�:=89������;�'w�����݋Cg���v��oy
��+���d�[��-Z�lV�jt�}���յ�F ���I4�%#�d8Gk6���7��W�\n/:@����v8O�F"�%�����1�����g�Yf�e�Yf�e�Y/b�7"�я��+�������eK{�����	�#ה�
G�#�ZZ����I�`u�64��/���y����[��%%�7s.�+���Α�KX�"��_G�z�`��ɽM,X��K
+A�*S��R��c�J�`Ub���8�&�b������֬fP�H�P!�7�wZ:��a� ��FF��ǰ�E\X�
+kS��kx�op�����1��Uuu�Ј�4���vaanAAnA~^Q�b��{eE)�1�
+p��UU�\a�;֯�jj���A�-��l����������04"����	�D痬J@��~��%,�f����2����|��a�	�L*6I���ˎ,.�'o�CI\FO�X��Mg�Ѫ^����	��H�	���r�*����������΋K��ȡ�~���ݢR��9$>�u�p0�¡
+\�N$
�J	�9xALu[)�c�n	u��
+���4VL���D�K�Od1Jւ"�2����P9�9Q�����h���-,Y!['()6�=�(:]�����&8��+��ٹ�%����Eb����P$*H.��4L�*���ȳ�$KhW�<|��X�һhJ�O��	�N�v�������q8���xz'�Jo�$��$�3��JJ�!_��ĥ��iE�X�+Wv�m����:Un�<n]��8��J,�]�坊��,�k!�f��y(�
+LJ2�jx���-	nR�*�ae+��H`
+4+��fu�/��������4���;d
���!�`�w"�D0���򯮻�^4t��l3��{����֠��<HN7n����V�VV7�W�тϿ������e��uty}�����<%[�b�p<qz�����>3��1�,��2�,��2�����߾�ꫯ����~��V�\�	����C�`5���MQ�,M�ł���[����������7o^��D����vA���W.\���d	���W._��E�u�f�͛7��и]T ��Ң2*a���_U�R�`#�H�TۈAX`�<W	���h!ఀ��+�ba�{��������������^���Ê~ES�$B��(X�z;��Z;��U�@
+VaAna>:�8EXL����R칪�&�i���*Z��"*V
�7Ƚ
�ܻ����z D8J(XS�Ă5�0�d]�ٱ����%�����d�dez�Y��{�>Ȼ��k��q�uMC:��gYƔ6)�Qrt
�t~-Ѡ�F_D-��8n&�MD��)�66p�%�D��z~�|�>n~J�n#i���'X)/ϐ}H�K�8��`�}9T��!hN���TiT�7t{�%&�'9X����u*�F�5t�d���PD�~��6)���9��%���z$�X^]*i�'H�=&_n� ����|������������ʪ :�VA���G'���]��o�ۍΌ�BQ+9�3��������v����鹹��%���'�O�[߹� ����I����Aci�ѣ�V���$n�LV�ouB�����i�X>�CnW��4.b�Ҁ�eɋ��$��v2������py|D����}+ ����jcm�V�F0�i#l�H4�l+p[��ɝD
+�VX��ߡ������@�:šՑ,^)�1b���$wv��d0�!�W~��Z��֙������陉��I������<�mV;��%qHL	�����fG�����-��$�oe}3�&bI��G�p,���5�gF�2�,��2�,��zq�P�~���˯|�?8w!�����F%,�|��@�[.�-$H��6745�76���wt�����7ܺ}�zV��k�n޾]T
+�/]�r.#��܉+�2�b
+����kYY�97Ж7rso�����=�������@�%�eU�0�k�kjA��U�"l����H;��&Ņ�\G��P��K�_�� E����?�30�78<0 w�`	k�ѯ&�G&���'q#¾������������f�`�aVA	X�n�C#BB�*���ʊ���2��Dw�ȏtT�!�����)X]=�=��r�������"�����CnO���_�eN����
;��x��>�g�JR��Jx���k�m`gcMj[=-r�����S\�=�.�f�cN�Bv�S9l��'ؓtj�VRD3A�
��)�����I��%q�.IJb,RL�7UD5F�Xa��789K�OI�<9d͇��|����kLVl8�Vj����\�i��D����x�Jv7��9Q�x��p���,ɀ)���U�l�D*���P$L�{'w����V����;�{؝%8�l {��%�L�P�UНK$����{������������{�O��?:��t��4���s�=�6ے��ş&KI*����
P�.�sV>F؋%��!���TDu���D.H��dGT�Xh{��#:A�ry��2:ô� ���*������6��G�ِ`<��V���nrw/��������J���N��1�Uw�#^�+A�:�A£�}@`�; �B����E�m���������������(c��S����4��1���h����%���֠����i�.�~�ۿ��9X�n.�aV4NR�����ǏYf�e�Yf�e�Y/h��w���W^}��~��_�uv�!�~ծ�@VS�b�;��ꛚ[,m����h}qi鍛9W33�(*-�+,�r�څ��_̐^D?f����+؂u-;;�FN��[��U�[X�_)���r�_A#Bق.�!��k�d�X5
@�"F,$l�.,����~UO%,��+�nڋp@�`���,:H����VW_?�C��R��XYSSZQQTRB(���*�F����E(�e؂U����~U^UE)X55��55uuЋ���[�,��]�]��؂5482:26>>��y�"\�,�]���2��/��J%*h70\�Lu��7��iP��Ӝ���sgٴO	����sA<���N�D4��9�J�|�w����Q5��'.A�K@~��;bU)d����,��E-q���T��.h�%Arh�& i�Q���Te��<s�<�[���Fv���$��'�*��J�Ai|���
+l=>�����	٩>7��o޹wOr�<^��x�N��E�!��v8z�����
�LJA���Q�+����Ar��|��?�(��w�v�v���5�-D�����/;=nMԀ���x��]#7�7�z��f8UÕ���D�8qLvg����.d,U��Ƃ��v�L�RÃ�St�$��9A���,�jM��6���$��mEd�P4����#����0v[�`͊Z��Z�D�������az���h|k;��Z^]w{}����Y=37?9=;>9
������������ZFk�'�&��'&aLMϢ19=3	N��	��h�du�<~ �G�"L�p�0�6��,��2�,��2�,�^����~���_���+/����ϝ���Q5�v��"�YjGB����&��F}Sڦ���4"�+ȿ��u����������7��u���Ν��9�`���˗Ѹr���jf�W7o��ͽ	��",-�Š�
+hGXV]SF$,�a=�X�u�!�ܛp��)�C�����_AGBe�&t��"�i�������S�� a
�Kaa�jjD�`ɍ�k�~�[�����,��8���6:�‚|��Ƚ���ʕ.��s�(W$?H$������ں�`5Y,-�r��������% wb�
+�m�FIV*CF���Svg�А��Z����~F*P4L���+Ag��R��IW>A0tg��$&��Kx.!���Ǽ)>��CGwL�Jd�u�T%����n��B�:(k}1�A1�RM2�S�%;����T�����{���+��Aɲ󨝼ȋc
+�ۡ�X뚪�9؎x�Līg�Ƣӵ��3�@s{���UܛO�"��e%ja��[^��ÏbɄ
�Ik�;����6	�����Ç���%9�[s'_��9��.B����/�ܻ���ӻ�4Ӷ��������n�7*wQ�����T���O��$��<%;3mW�r�$'���v��N��d<�̭(P����8�^7��C�G\^ÝA�
+@Hp+H�VT���#�$���I*[AAʶ:���Z�v����]uȶ�c99x�X�D�:8��?D�M��v����ۑh ����[^uy}�i����q�P��O����1<:62
+��b�M]��Yc�0��Zc�����鹅%������C�#��~�%B�8z�}l�z㭷�?~�2�,��2�,��zq����W_����J���؂�I4+K�a!Ka�rei%�͖�F�"�-X]m`�j+)����� �넂u����p���!�`]�t�ʕKW��~��u=;;;(X�^�[X�_\L�����ʪRpa�b	�+WuhT�v����A�"B@�A�j�kV-Xʲ,dY�aWkWwg_g�@/�"!)�!4�'�&��'d�
+"���D���
+V?zy���������YmDXT��
+���KK����B,X���X��TW��T����^�`�jmm��h��V�@�� X�0kbz}��ɒu��Z��T�r�A�����"'���(����ڙ�D��ݮ�bi;�i�Vg�J�atN�F�L6��ܓ�mIE�����1M����(�����~=XT����+<�v�h&��q�h�,��LC�)��i�a(%9T�KRӾ�C�O�T_�/�L�C�;3lb�WxX����I)rHy�Mĝy�����e�H%�����v�~�����E�KI��QJ�ݱh�9����Vzw����v$"�����70y��w#���*mA��YvH���
+L�w(��{*������W����q0A���ä` lr�)Q�:v�x��%�du����d�p�:_�dg�XZ�;�s'#p9�Kh�Yt�Ֆ�X�x��	z�j�_��9��dl���V���
+�`$��"����8q[��v���`[��lu@�V�
+�
+KU���	<���Wu�e+��;8Fw���Az� �ދ�w1�*��6���[h�߲�B����d��[�����)0_�������(hy|��!c\~
+\ha��������݇�5r��d�U,��H�_c��c�Yf�e�Yf�e�Z��կ�
�`}���^�я��������H/���NKGղ�ݽ͂-X�^a�6���	�WͲ�m_��t�� �ƍKW�dߺU\V����q	7"�p
Я.^�
+��H��jf&z	P�n�B����vqq�EXTZN"��UU���~UW����� ��F4j��Шih��F,,X��Eī�&�\�*���Մ
�"l��)Bł%���DZk���
+��F�`�����R]__^�r�+,�a1D�JJ������
+�yUYM�+Y������jkѨ����;M�vt�S����70004D@��8HB"��̢�Nb�J↤���6�'+�E#+ٴ*��wl��^SR;��T,]��&��)`mM>
�ܡ�M�N|�;5���6��4N�t-�QѵT!K#��!
#H�<Z���iF�(�d$�#&�;����XI�_P]7|�9�.j��g4��+Qbϧ��_1�׆E�۝��ј��O��
+/�]��XH���$��+�~�����X,�� �=�?]haiIt�ԣ��l��^����}����4
+�
+G"�������E��G'w=~<�0��=�������=�h�F�a��������eu~	��a��<�{��)��Jn&(Iڄ&պ%��r��r����������
ɇö�x+�n�:��,�Jt��n/����˫��5�*�� '�C�D���d�Ul;�C��ۊ�w�m���`+j�:>8�	A&H�<��![�T��O�r��	���Ajg7�މ�����Ltī��Z��_v�=��(�}v~�W�`��Ě���`5AV#�ql�l�(W�#�Cx@�|rzfn�.J���!t����9�v�ѿ��oR��2�,��2�,��z��QVK{Gka�R�]�E��
+e��0�"l�o����n����2;'����`1�`aֹs��~$*X��]������"��_�[X$�W��!�`UՔ�@�����Ba�� nD��T�*k�-��r���N���hM���hQ,X=�=}�}�r�����NNN�R��iD�6��QVceMm)�`��F�y豰����R��VxU]͆�.�h��������ܛ,��B�wvu����a
+���0X��'��57���mLq�P�ѯ�.&�W
+��D�Q��9����1&�Y�Iϕ���G�r���Y���6B��쩳BR��I��f%�,$h}�Jg���&^�a��i�O����$m�No��F)6�e����Iԙ�t.N�P�E�1�y�!��f0]h�ۀ��IM5/g�b���j��5!���6��WO��_^['giem���4���^A��o��O���������>x�����������y���-�lV������ɳ��^"WN��~�����^߲�.�n4�;�����"����؜ ��N�
+�
+M�~�8U�}/�3�N�:AH���~�JKAAtr�Ŵ+�K肼14t{<�e̶Re+t�l����"m�����(�ڕe+lE�V�Ne+�:�ʕ"[���+�@���rE
WG;{�齃��^2�O�c�t$�G ������@pMM���w�.tW,,�f��fg'��~5J€T��P�+v��3�,�,^��������,ڭ���P$K�A�Jb�U�%��e�Yf�e�Yf�e֋[?��/��_��?x����?��?wS�_G�Z�T9�Wz���P�Zꛚ���ۺ��u�M��u��5�`��߸y+��%҈�X�:w�"�`]�|��+W33�	,X�n����."�K
+K�T�{5��Dk1��
+Y5�M�‚aN�!K1_)ABP�p��x�-Ԃ�����K-X}C#� a�}�aM���	L����������f�`U���7",����⢢R"a��VT���+
+ª���_U�TWT�~U�-XuĂ��������ݍS�`�B_a&&��53;�)Xj�����!��X^#ٴ�:�X%�\,ܡϦM��:K�һ��`ױ�:��hi��fylH�u�(=�d�6C�f��R�T��GqY?��E�a�y5I�OI�Ej�].vV�щN��ç�^ǀ�(N�Q�L3C���c�f:�I��'��}:
�K�4Zs6D5����Z�J���I�ʗ���;{��~φ7��b	�׷���_]�	��`(O޽��D:�t���ov9:ɯ��v?z�F"��]\p{|�S�'w���N�%�}w���������l�Q��D>�)JL�R��Ԡ+���d��,;����9-Kr2�u�.�<AݩjYd��K	��J��Y��+�o�J�ß?�qx��\���X����lE:	6��U0��nc�*��c�� �V�Dj7��i�[�)n�Ó��SE�­�*����(W8'HW��pup�v���O��w�'ӑxxS�X0�"��������چe��_���
+�!�V�������$�<85*ì0�j
+�V����e���XĚ%�W��X�EkН6;�d��-�`���U(G�6��Ï?1��1�,��2�,��2�E������g?�98�h/��V4E����������L(XD�V{�����[���������VRQy�������׮��]�~,X����ܹ�_8.�M^�L-X�@����ɾI��a	�����[������kji#B̿��� w0ba��Y��\+�"�#��z��Τ�Z�;-`�������a�"'��0ѯ�G҈p(X�a[wwSk[mc�`�����¼�BЯ�i#�r�V�
+G�xUM�W��
+��k���뚚�,t]�:������?0�~��L��L�AKub�"BF�´+��
+Y��vw�.7�HE
W��J0���p��*�����4I@>�ƶcc�`�4WQ�M�OUu�l�?�Ǐ�������W:�����"K%�n����t�J��e R=�D횳�N8kW��q�p��)ݜ�>�Cu�6�L�Z��g���{]�[o�{�����E��
+Gbo��njgo=��˯����{���{���Ņ�%��A�P�7O����յ'O��})�����_~�'��#�6?��3�ʪ�.02�h (iN�
+<wr�<
�\V�_Q�_;��	Q���,���6��i�B�t���������\X�ry�.������"[�n�677�h'��P�Va�Z�qH0�L�RiH��l����������N	�J	�=����]�S�eY�
����	g���lv�F`�6{*�����`(�f�
+�K���{�W��CC��y���Z�j��&g�H5�B�'��aL�ON�#^�U,j�����Q*a���153�dw�Ӹ�R+�W�����؂��'O�?~�2�,��2�,��zA�������~�������=���y�ūv�	ѽ����+ �7�4����������Q��t�����W�]˼�S\^q�֭��/���8�-X��a��ʕKW�^�̤ ��7��E(XE@�*(
+HX���U4E�Z����#�,H�9�a�
+:b�����Bq�oim@�������������)Bق560�-X�����r��
+X��[��d
+X��n���������������6"������
+�� �~USWW�)X
���@��F�ݽ}��4"$���D��P8Z(��
+��|%�	2�]�v�SAU��|WeS��%�D�Z��A�丙j���ɉ,��1�#N�QN���f����Z�4Z��p.���U]'�h�(zIG8[��pC��#A�IR�
+� �Pg�Oؑ(iE�������$8�|��s�lp��	�Zv��e���g�����.J����'O>�%R�~~����S�ϻd�A�Prtٓo6A���N��s{�vA������Ç��t�}З0���'O#����o�s�>4''@i�_�d�C4����~���ʳ�,k��sy'����{C�
+��j�E��Eg"�� 4���ʾ��Vkk$��F0G�m�UX		�w��j:	�lu���1�!xrzt��Vw��Q��l��suJ!W2�
+W̾���^G�`�ih+���X��Z�+���o��V��v�ve��/Y���g�prp�U�`yr�������rl�x�(� ��~504������}��W���v4��WA4�Ԏ��Yf�e�Yf�e�Y/�x����/���/��o��ڻ�@�����d	i�����ISB�bu4�
�h474��vv�ut5[Z�*�2s�!�y��0Ph�¥K�.\���V�f\�|���KW�A�0�R�rn����ܢₒҢ�������R���������B#^�7	@X
8?��X [�F��&U�R�,9Q�ʃ���58L{�+ �)Ղ5>E,X a
u�F�ԂU[[VYY\ZZ�whA�WHA�%4BX��W�����B��^�!d$,�`���a�{O_�`A/�ɩ	l���_X�����.�/��['(W Ua��%�(.�}����A��T�N6(���T~������5�I%j��\jO��b�wv��|F�������� �I���og��Π�2�]�n�|D#;��laM�vs���ܷ+QN#��pIj"z:Ss~���ɿG����?�⋵�-�Yr��;O�>����+��>�ܷ��`���V�x�0�������X<yz��ɝ{��=�ߏ~��WV<|��{�[���7�|������%�Y�:A�r�u7���N`Y�fũ��_K�vE+3���銜�&w��$P�|2��Q�V+�~��ZY�;	n7q'A�Ya{w��� ������;���N��� �Y�H+�ju�����0���˹b
W��p�s�`���S�x�Va����=�9�5����;�^)�{C��KV���mnaiv�W�����䌬\�H51=3=3G������<��Yb�R�Z��E�W�#C�c���U6�����+c�oǶ±��(Z��7��������?~�2�,��2�,��z�׿����P�~������'�`A6���[a�WD�R\X
+׽���҆U,�k�,�YmC����̬,�`�������^�r�\F��ϟ���s8��E��2._��%��2ȝZ���r�r�������Z�*I#Bl��]X���u�!�_�^����F,�am�j����J��4� ��nHv�t���~��/`	kh|J�`A#���!ق�?8�3��-�ԐF���!,*�-(�-�ˇa1P�0Ž�|V{�+5<��
+I�BЯ�����	c�����8��CC���@�t�fgg�˶h�|;#��`���+�N��9JaLq��@�	�OT��9|c5�θ�D%h�+'.��t\)�MH8�;Ī^�����b)نHp� �vVrP�H:�'	�ŧ�<cـ%��TFg�Q*�:���
Z��v�4H JN��Ę�����I,�����������HN��E����yglj���.��;{�'w�8$���GI%�oe-O��y��͓�{�p��@�q��≭�v<�~�����ĵ����)��_���]'��N�U\O�aC'�=w������UU�D1C�a�"��@Di(>�8<�������e\_^��������V`3	�mH�l�`�8�V�D
+��DzWv[����A��}�YB<���3V+P��ܣ�d�T�\�ʆ+%'xp��Os���N,����h<�9��� �6�<:
+���|8'�	���X����s��ٹ������YP��e����6\ML��������������"<.Xѧ7<š"dMNc���$&�O����,^
�126>93�`�Kn���F��I�_a��V(Ǣ���7�Yf�e�Yf�e�Y/t�������_���/��׿��o���n��+F�jg������A�jiml��75�76�wu�wv7YZK��o��dfg_�~=��%`����Å�;(�2�g\<O$�+W@��̼��E(�ԂE@��^^*S�ʪ�˪jʪ��� �EHXX��E2��yլ,��D�"BV=zlni��6��7��[:A���a/�`A�pT��WJ#���1�`
v��vu5���VEeQii^qQ^Qana�`�S�{y��_�N���m�P:Ƚ?USS__[__���D@�]�==�}}}C������ʟ��E_��KvALSs�_�HX�_Qѯ$�1h꧲��i,��Z�q�����O�q�Q�n�M����В�W�βE=G&�b��-��oI�:�t�'�AO�6�G)c�t�J�i�4Rޜgjk+��P���MS�g19A�*Q>	NU��'"��#HΉ��w�{�f�	�C� o��΢}afn�jw�<��>~�XG8���&��������N�܋���9;7���Xh������?������x+�H�[��]>�so3�ַ�u������XS��\Gu�&Mɫ���S�M:y9T{�	�Ǒ�$���΅��u�����w�XY��������vr���"[��*��V;���Ǿ`+�*0v���{���Z�D�"�+�.$����#�~�����C�x0�
+�[�Opm}s������ Y�%�c���V��3�৚��$���W [a�ZI�)��������9�V؃�.��d�/,a�mn�d��e����1<:615=�������fp+QīM4�p�و�,��2�,��2ˬ�����_��/���_��_����?��
�vt�*,�e))B�F�`5��6�����V=P��;�zЖ�afvֵ�̬��Ⲳ���yl���
+�:�j��~�jVv&�f
+V~Qn!�`����A��������Ꚋ�Z
+�	��6"TX�
�U���M$E�LYU�lQ$�:
+r'YB�C�����[�z{�0�}|(X aa��``	k������҈������8���v�"�/��������2u�� ,���z�1�A�

�--�-l�������������	�]i,X�؂euV��i�N�_9��
+��:)�o�<v�d�7
+��C_�8IJ
8�
+�!j�n�n����eC}�3�h(�*��Z��mr�F�1�b�3���:����p�uZ�o��sv.=�4���WXwا�5��
Ij(��r4''p�8^�C���~�q������[��ν��OO�<���x���[��Dr����ރ�ӻ�x��_	bq�j���n����w�{?���J�m�z��tݽ�H�ntg�|I~��l�Lяګ$��ip���$�iPLA���(1Og�Ð+"�9]T��!����Ipc��A�RB�X��G�dO�v�;�h�w�w�v����Ah�	A�{z�.�L�����8��y���qWAL�:R���̎s�al��G���Vh=��A�ZY��W�-!� �*(�l�d�ia}��05CsS���s53�(W ^��b��"���	8�
��j��^;�b��jq�>7�83;?5=;61=:N(��T�����[��E7:݁-|z�v��b	+�~<88F��?}�����Yf�e�Yf�e�Y/\��?�������_��~��۲ʪ��^��@�ꔵ,j�"Pw��R,XͭmM�ac��������������/���ʹ�L�`�+S��-���@k2��D�fe����۠_A#�’������
+�V�˽�������d	i/B��j�nh��k�xՈY�8K��+j��U��Ź7�u�a+X��d	�X��Ǩ��@��d,X#�hK��6B�jVieeQYi~q���B!,)B?���P��a�����X���UY]]US��:�6555�����uvvtww���
�X�fgf�F�����~JBՅE@X��(Y��H�������o�Fٞ�Q��Q+���.eg2MvC���)��9~���H��. cu�l9�y�A�4�S���<cb�N�7�i�5�gτetk�����w�.(V(�	k�&�T�2�c��Y:��NC����䓧�sv|/�<޻��ܹ���E������>���/��-X���lESr���~�_\����;8\^]'\w��Eb�X�*�������XurV+�K�q�.?���fKQ�D��G�e�3	AEO��9>F��t����]^񯐐 ���=���B
+I��b1�Zœ�D:��I��v�v�v�qH����+meي��l��3�l��
+�ٱr���x��+�Op?�ރ�`"�+�<��7�Ch�8'��	�W�J$�� -��	.Y	�
+���jff[�pNp�*W�h�������<�xn��`�-��x���g����.{���D�r�$�W����hs�w���',,@`��
����~528<::����-�6�Щ������f��,��2�,��2ˬ����~���W/��G��O������VTȢ8,��"m
+eVGK�_VK}s3X����USߘ���u#�Zffv�͢2�`]�r����?��ºp.#�<�E�q�4"�~�jf&�`��޼��[P�[T����"HV�Q����P�ʫ��ѯ�T�;�T���(��ua�(,l��tu�u�v��w��M��ua�~5����ᑞ���޾���������[�JJ�n����c�VUV�ժ���Y
+V���"Y��Z"a567Ƚ������@����#��Ј�*����"X�p#B�4����)By
+V�=�z��f�j*Pɔ�YB���!�Z�4G����3T������7)K��b�tV��yfX�����`M�Rkyr�=�)Uerje�U�Ӧ��_I���Jg)]N�@$Γ	�I�8&fJ0�˜�B��jE�%��a4�3�Z.��N���_\
+Gco����vIn�M�6�G�>L���_
����;�ƒ	��a�;�
��ǥ�l���/X�6�V��2�c,��@16b[�{��:+�ifx����P%��u���������W��n+�����l�������4H�h,M(H�Dj'��I��<8�Jm#xG�Z�U+춺{��3�+Bh��ս#�UWG��G'{���jN0��e�h0��
+��������wy��[v���A�}jY�l��e���Z��D�$6\M6�V���|5E��s�s�s��E�	 �D�����[�L�Ս<���ʺϿ
+^/�$,��#�T�8F`�~5B-X����’Up��������M�"#m�"��x����,��2�,��2ˬ���W�B�?���~����������]iyEWOo5_�hÃ,�v���-Xˢ�a5��6Z,��-
M�m�]h4YZ�*�nܼy-3���뷡�^񵬬�/�,a]�p���_	�:��s�o�n��~��(X5eU�؂ER��4EB‚a��x��T��,��Z�Mv@��"������b,X�r�������V[{]s3�[YeUQ)X� EX��Q!�`)�
+��,�r��-�����^����Ra[kGGG�`�k�P�ff����-XT����I�+Hb�Jva����#��¡rHv���IO���va5GS�Kg�J�٭�Ûⅈ3AO�wixgd��X�����Ig	MN��KFy:�2�d|Gz���\��i$�eC?�/}��S�O�fu��J�Q;�Mҩ+psR��^F�ӕ\�M�^#�d�D9�4�d��w��NOCѨ�r[��9��5���nl�һ���6Ap�|:3���lI"�h�啍�-��g�X�E��:�uN�MrvL�I����;�?'�_�qB�S�.�OF�CHpu�V���
+R�E��6��D4��'�L��>�Zb;�����~��d�Vw�?�Cd+y��<W8*����pEZ
+���^rg7�ܑs�19'���z��	.�y�+N8��l%Y!'h_X��-R�
+}3s�33�ʎ�N�xv�f�$�6\ᐩ
�԰����\y�+�� Z��fpcs;�
+l��
�������8]^���������G�� ֯�G�'���dG�������@0D�W�a�����п�����ǏYf�e�Yf�e�Y/h�����_��˯���k����o�!����{E,X����e��U{K+1bA#�&Kkc�Wh��������ge
+Vai��۷/_�J�?��wc�y���i-uuwuWb���V�(g�ig=g�Zc��;��w��%u��T�f�$�9�D�ȁ`s��չ���	>>���>����[������B�@���Ѕ����s��o�!D�D���ܜ�|�?�{i",/#X��B���H�D�[ܛ�!|�,�^54C��"&�Z�[�_���&J-��F�,�R�Ǥ�"��Y�S�rǏL@k"X�:�,�`�j�QF�JK����io0TVT� B�`)���(rG�E�B���z�_�E�����i�X�=������`�b�c�'��Ȃ,'Y�)Av�\�Z�P{��,��"����Ϛ'�%
�N�H	��7�te�iq >�Λ��N�;���Sr>����zS�>�Q^W�jj��4.w����BF��ّ��>-"�]��j~�U�������/��j�T4���h�O{5R��b����j�l^1�$�.�y�w��>{g����N��P$��L�<y�q���������B�R{�쇎�4��%�	(!:eɹ���|�t�K�m�H�y�?��E����%G�����<���I��qc�����@�U$��I��K��J��c�*)O��K��d�;8�?:>8�UJC���!ȭV�z�Ï�c���d~��Vl?����� �uxL���݃��݃͝=v`k���֗�'���*�����?���E��ff�msӀ���>!��(y5�U퐶����՜}~��`g���s���¡p4��X^[^]_]�XKn�'��%�ג[�#+��b�.��r���v�
[���?@#c�C#���G�F�����#���P*�+k��^�񽱽�[���/}�K_�җ�����������|�{o}���*���`���j��X rWܷ����(rV��Ԍ��֞N������"X�r��<(*{���ܛwn�}�Ư�]# �[7oކA�l� ���\��aY�+hB��"X�EXg��7VC��WT$d�����[��erՆ�+�E K�c5���$������A�`�����*�P$���;�����0�pp������ӆ���ƪ����Ҋ�������+ȂUUS�B���Y���E��(��\��������f2u�!�e���A�ã�4�p�f��� ����r�B�?�
+�Vl��D��X���T�1�iKy�ߡ��>��	����t��p��)��ɛ��I
Ҝ�Jyu���`�v��@�W��J�5�I�$0�
�	n����\["ӄ�4��Ӟ����5�)���ć���z��T>�Ӻ�>�|4�K�@LC)}�%�a���;ye�����g+k�������	���Dt)���-��x"
�_��Ɩ�{�S؏�<RP�uOSʓ��-c.A+N�
+�G��*�"n���{^�R2@��0AP��|�P 	G@�%�Ub��
+��6�67Al�%���=�´��V$�z����V���V�x�}�Y�~��Ω��w�eOb�'��������í��$Yٓ���Z�/��S��`+��b����0��;��C��[��V�(l'l�~�΀�
+�բs�}�8��G��! F�ѥ�8��\�olol�ln�mm���c���;��-vU��"ѥ@0��B&#X�c�SC#c"�bw�F�Ǧр���7k"����$�国������/���ۿ���ї���/}�K_�����z�K_�|�jf����/��V3䯤��Nh��:w�E���4��������������Un���
+
+�* �u��ݷт�BX7o^�u�mDx��ݜ�{���)�UXPX�-X����4TU��*�k+kk�EX_]W���D�EB�ҭh�j�"aK+ű���AV�d��� �#�{k�����d������#XC��#���
+,�`�kj,X��h����V��dln�VM���+��l�����*+ʫ�*�BXUWK�A\a#Xdq������Ɔz���]|�5-X������{/��m�������nw���"�RO7�+,�x��#B��3�v�#O�T	�§j�S�fA+n�߼�W��)�I�UҘ��榄4	.-2��N
+߸n���Gì$��7����<Jn��t>-:K���5"�dCMEܩ,N~Z�F)>.g���lMu)�`���-�OuqTA/�Ѧ|Ӱ>5��~��}�����fgo��0���p�a��Ӆ�u�rHL�N���������{���PX1�S��� 4]pN¡�����gp�q����G���Մ֨�)^�TXʞ�V��Ĵ`�Xb�O\__[�XO�A�VT�I�[Q�
+�씶z�Γ��i+���e�J�����*����U���P���	I�+��Cb���	��p,��c����)�����
+�8�p���c+t[��}f����m��jvv�fpl��	�����*F��X(�ŗ��*	�o��������������.ж�r��XJ���(�r���ئmsc��#�?80��j|ljffna�=�F�啥�V�x��������kG_�җ���/}�K_���?��`덷޺��������ʊ�;-V�迒�����b�ȯ�buv6���v�����e�X[��+kjr����<���AaIiiE�����n]�y��W�n�-Toݾu�."�anA����>*-+*��BX][QS[Q[[U[�-XF�`5"�"�{�܍�-p��˃F^$�WX$$���Jn�v�����m�����#��A��T!$ք8�D��0c���"Xuu���RDH-’R�����
+DH��1y%��9Ū�c����3�E����������ab_�����׋��ѱ��	��j�6k��*+�~,��J�`Q���{ߪ���:�����j�=�ӗN��*�J�JJ�8	Z��
+������)���#���o�6�M}�����\H�R6�<j(��I>�W�+��G	;-�DR�V�7���NM���ͩ��m�|_}��X�6O%����(�U�6_:5�bܞlߒЍ����^uT�E�kGLJ'O�v������f?P�vǢӉ!+�v�s�nwBF+�����ٻO�y7_����%�G�EG�X�L�I�8��e�-���Jq�����!4����Of���%�����$�n+1m���fEn�=�mEi���ORJ��=C�d�­aV��� Į���'��{O�p��WOO��;<��������������Fbe�$���*���݃׍�n���W����9��Fl51MUAt[��q� �+.f�[�����b��OS��g�D�e������Bm��������Ҫ�����>ه��G�;���{k����z4��E�3��`�8
+�	P`
c�������<����Xti%�����\ZYO�^�����B}�K_�җ���/}}�o�y��Ջ����o ye�6[�fK���MJv�b��li7�;h4a������X-�m��2���ji)*-���{����|�`߹�ƭ[o_���k�޾q�:"���a=xp7'�A^^n�"d�X\RXj(2�s�{M��j���+���� B�Xȯ���ZZ�^�!P,ҹ7�j�:!�,�Q�����v����e�a���,XC�C#\�>61<>5k�G�&&�FQ�N,��G��
b���
���*l�KbV���+bY5�r.65�k�����if_KwOO�����������"��}��F�=�#,_�ڂbKV`	��/���n��*M+�wjS�+�Ҫ��j!E%�ն���'o�֞G��f���S����UiZl^-�Q���a$���IeB
+��)�[���^
+/R<�/��rR*���r}/�5'+N��?���0*��O1��[3=Pq"�K{�=ڔэ⃵�(_��|E���O�����w���������gck{{o�F��O�yww� ��n�#N���dR;��SB'���b+��@A��-H�7U�%���Q\pw�l���
+���h��V���2��$l��*�
�j{gkwK��b�
+�V'ON���Ƕ�R`�f�Q
+��@I�������J�	�<����O���<�ݽ��]v��\��	�=�����N�@=A�W�s3���3��Ē ��&ygpb
+���[�-��/��1p�t+�n�x�4U0��U��ٗW�+��J�K��.�����Ó���Ьd�n������$7vVV���z���᚝[`�1:>�+��ȯF��&��g���}�@8��/�*"�u�^^��������/}�K_�җ���������~����_���7޸��������������m�������2�e�2��j2�;���lwu��Ooi飯����~^���E%%����`!���
+�
BX7n�����wsr@��*�Q�â�G%���e���� B�`�Ƚ�^�WdqG�4��W���:wJa�D��6J,�W�b� B����A�}��ã��B���	9�54"�������`��M����M�� ��Ң��b�qa5������X�q$Z�jh�oj�Z�f������;D�Ƨ�!���g�q��[�`ɪ+! Q����_y��㺐f��']�)ͬ7uAIÔ<�\LRwL3�Nz{��,�넠J��q��Q	���tz 2�H�'1��Y��9�R���J)�C���f�!
�Q`%_��U
+��)��k�&ɏ�P�+���T	.���
+
+�GN��:�%�<2��P��N\�\4�+��WU�:����)W
+) ˧���XޗF���Nׂ���WWג��ɝ�}DX SZZ^�v�.�V�=Av��߱�[E�ߊv~'�t	.e1P�P)�������j/5��b��$�i+R�ǖV���]<I>����$�����i�ャ�Cr[�@I�V����V(cG%7?��-J�E��\�b���ώ@�~�D��
+\%7��Po��z+�[��U(��h?��w�<�N��"�Io5�{��X�+���&y�
+�	�z+���v8=N���A�
+�1��a�V쥹l�`�D;w6�v7���!�:��������ұ�:9yw��=����U^!\�
+A���^������(W`��A�W�.��~�EB�D4�BK��K���l����җ���/}�K_�����z��7�\�z�ҥ���0uY�k�N�,t�\��[������aj5u���Z�;����^D��Rj0�a�0�a~YEţ����5N!�5��o޸~�֍۷oݹ-BD�G�����
 r�V�4����X��:�_A�D�0����v3��T��b�)�DV+"�"aS[G��fZ:����ZzA�-B�`�����I�"��j
+��w`���g�X�5ihn�5+��
����"4�,²�2�`U�TW��]�Wd�hB��b�ȯaaSkkK{{����������A���w48������!��,��#���-b�P�b��a�z:MP���V��),U�&Ua�����B*�Q���tB�y��}��������o~��?��7��rf����/^�x)��Ō�W����������/~�+CE%{��lF M�IM]4x*bJ�C���Tȓʲ|�v>%�J��T4�:ludK���������>����Sa.d���C����Ti�[jBLe�JwYR�O.?*������dϓZ#������Aϕ��60a��72�T}�SxQJ+S>H�K�dS�I�JI�rgPF�nmOQ&����A��ARh�����d_^__Mn������
+�V��7;�;<�?:'	>9y��1�� j��V��4!d�����r��\AU
W
+1�ɓ#�	����
+W;��y�I�'��/�"�@(*B8O��ؗl�V������������m|bz��$�¿�Br�E�d+��	�_���V�p0z+hYƗ�K��ؖ�Ur�0n�nA��Ǯ�^�2W��}��j��dg�}���&{�P8�
+,;vT�p������(:gfl����P4KD��_)�Z�[�?u��/}�K_�җ���9X�ӟ^�z5#3����^M}�����
-B�Vf����e�,X|"!�+t�#���������N���TU[���aNn��`��W<�ͽy���7�BHSX샷���;X��r���������`�A���j��ja!����)��4���ݧ�	y��#lmkD��G�R,BX�Ƚ����
-B+�zaakp|�N�A,�W�Rk`���������^��T]_o��4T`��\����
+
W5��u��k0Bm��5�(����2�������]s�������A��<��-X���UADX~K�
+�YT!�KŠR'�yO��{����M.ET�#�RieS��Z�;����_�}�����ʾr��Yٗ�7sFf&�������K�6����g�z��3/����~�}׍�Ox�Ȋ��ZQ� -����(5��Ƞ<�p�_Mf��jR[�R��	��%�LL�,�+�)�y�ԓu��dJ�$�v��藊&����z�bT2~���V�\�Oi\��)~b
+�R�bR�,M�PI8��NWx[~9�O�ULW�������QA����=RPy�r
+��H�sG�(�Ul)�%A�δ	�e�c�M#�
+J���w;<99>y|����S�����8F��A�!�����d��,rr�Ξ�=����Q���ɳ��'��::�=�y��{(f_Þ`bem��V�x0�È�����t�SIWs3��)"WS6�d�����+�	N�l�o�ͱϚ�_\��l�bO���h(�k�����ե��Ԥ�&� p�)a�������Ý}�Ch����!$��(����S�W�'��b'���U��|A��3;�853;2>5H������ё��q���/:����ᨖт��W˫��
+�:�
+,}�K_�җ���/}��������ͷ޺|����߸�!�nP`q���o�aY��N),bu�,��6ئ������765�������{p?� ���޻��뿺)����q�֝�=���ˇ�G����U�K**p! ,�V��W�k�
�

b�
+DXu$‚"a�b����ը�W�"�,
%4���inc�h�6uC���?�38�74<0<J,>(�g�'��_���Y��L��VS������PY[k��(1`������,X� �:����A#��kExU��c�,Bn��A��2[�{�a���������$"���]��A�n�T!��+ڒK
+e��!�P�K���(�SM����؁�",U.(M/��Ig���
U?�ɟ���뀧2�����\eefe��vFF!,�Y/]�p��s�_{�ܫ����_z�3����1���/�U)M�I��i+��K����BM�I�R~�~��	�_�W2_�<^�}R=�����Y.U�Q�r�{��G����VC!�7�q��5Q(eS�B���*�䖹���(%�©d�NS��i2r���Vu0e����K��RP=fQ5SR1.��ߕ¸�V����gyIy���!�V�(�/-/-��	�B�$�V� �B%;�VT�?:><z|DI���ۊ��T��d0�̊6��5� g�h���w�}��J�~t�{p�s�b��]�'��ʾO���\o��7�2\o�d?���Yne�����D;�N�̊��i+��cO�V.�� 4�y��wcWa�	Fb�X|�����������͝�&��b��w��v���\Q�
+n(|����W���qx">�}���^r�{	vv�G{����'�l�c
+~526:>51m���.! �#���q�`���Y^�6��*����.��%0��W��/}�K_�җ�������g?�|�Jfv�7�����F����,qC
+���o^�[�.wsW����"4��K�ށ�
+-M��U5��=�VNaiYYe僼���o_�q�7ׯ��n�Bx�����a�+�[��K �U�JCeeyu
ە��`���؈����1�
+�A(�����_��������`"as�	*����,žޮ>�"����"��8�P������eק���"X�UU���ņ2H���"��X�x����)�U�#X�ڽ���������]j��V�����������${_6=�-Xv'��,)���L'�
+�?����I/�J���W	*1�D���*U�[��|��^R��P3s�����׾v���323��ٺ��'++;S�/ed���Zp�R��K.^:w��믟{��k�I����E���?�������E�+���S����̄��-�Rd�R2HBD�	���W�Q���h>1�W���	)F��IcR�ؚ���(bQ�4(L:x�P���iD�x]J�ҭl�	�0:��Օ�NV/i���t����`%w�H��6�e�n��R'9�Բz���h~EnMJ[E��R��V++�\]_]Gl��
cw�6���(mERzP�CL���S�Dl��y��Շʆ V~��Ï��/>��\}$��El��g"�l���!����;�������&���[Z���[B`�c���[�=��¢S
+\��
+���\ML�Ƨf� ye�y�SH���j��Qo�tS�[�!\�e���t�`�!)��-���	���x��]\!�:�������c@��O1�uH��o�'nA�jgu
ʃ��r qy��0�����ۇ��i�36����_��H|%��E�K �J��/�����O}�K_�җ���/}����|�{���_���Wٛ�k7o���V�+BX�",������(�ej5� Bs}cs���W����܂��������>Y��ݸ����׹�֭;w�Ex�"� �¢GE���*/G~UE.�������W��qam#D�j�_Ջ
+���&�a[Zq.��"D�Q��r��;�;Lh��D�{�}���}��D����'��5<��Q��b�wp��7`�������G�J�ˋpa����7TVT@Mr�
+�P"X��l����F��
+aK�`��Kw/
""����c��r�<T>�B�_�+@S��l{�����f�i]��k>��?O����R��O�L'>����jim��w�����.a�*+W��������`���FaFF�įؓ�z���W^}��/|(�����?4DD(�A}��J)�H��Y��*i��#HGi:3d����ԓ|�'"?����L	K�4K×�g�Q��|:)�ݝ������&Ɩ�~��w�'�����o���_q��__EQѯ�Z>�G�OQ�DN���1��,؏�/E j]J�ˀ�`��
+�VP������`�����݃�=(	>9z������0I�>�b�w�_�V�z ��>z!b+is��4�K�+�V�A���;��<<恫m�V��7�W��˫ɥ��xb�	���/���F���~'����>z+\M۸̊�+0���V|� b�م�y�¢���n�V_z�����#K��	B�
+����ފ��ۀ��vŞ `+�]a�
+��<��pL���l#�;��އ���fbe��/�"
+���坷;fl��F�&�F�G�Gdž�&Ʀ���Y,,���~u��x0���rd	)e������kG_�җ���/}�K_������}P�}㛍--]��(����?v�F,���),3T���a�X:��0�#X9�yw����<'?-X7~}�گ�_{���k@�`��;���"XA�^X������"X���UՆjقŶj!�F��7���-��j1"ȒX��Y,�p�aG3;>�"X1��78202*��Aގ.,�'�V�F��{ۻ,���0(�U�2�`ʊ
��rCEe��
+���A�_��ЖT!d�`�o�"�v���b������}htltbbbzf�f���S,.��������$�B�F�Bn��\M�)��<5Ń���^��d%h"X*��plb��kh�]�H%����ٗ��-#,beq���,����d�d�}�����/�~��k��{�ճ�_~啗_~�������j��4�)��ꌐ�ȱ(mDJ4<�P�,Y��.	���/���_��ꠗۛ>���E��������%��RA�R�T")���% �<Bձ	
+~��7S���XIsI5F
���RAe�ri�NZt�V���)�/M�R�U��� =����A��ja�PT��]jS�\Q*�EbKT�/��u�[� <�!��J�[��1��[�`��)w[�>v�Պ��^(BV�M�/ԝ���\=W��{�λ��z���S�?�y�������;lv���jt)��p��ӄ���o3�V��L[��gf��}Z&81=�bvv+��f�[�q+�ݹ��r8=��<魨k�BOpy)�������\�0����������;��'f%���#�,vg�G� ���
.��}�76w��^-�D"K�@��D/��A�_�ML��M���=<:1215>m��e�ޝ�.�[�p ŖB�p|9"n�X����ދO�I������/}�K_�җ�~��~��?�V��+�/\��o�6[���{�V+��;�Ȭx������sV'*����;�����[J
����<���7TV=,.�s��
hސ^�u�����nN�}D���D�JJ
+K!�U�#X|!�"4A�nD�{W`����i1b�������W���v�b���|!�+�`��6YA�n�����4��,XS�%dQ
"�v�vv6���64T��*+K���n(-.++�,DH	�Z�\����Q�_�Pº����b5������vt�V_�yk�6�ެ�"Xn�`�����A��
+�s	�_��b���i�G��}�j����M�J� ���J���Ǿ������7l��	��"�����bg��^�\�%�W��u���_y�5_�}�ՙ�_f�����/<*d�&@�җ6U�R�m�O��|��z��4qU�0JF4n�I�">�&	()�y~O�X�ĩ@{�ҹhs_�P��Ro)��)�3�+>-�Q���9�j��G�Z����	5�F�t���)Y��y*
��+Ck�3�f
+\��[���H-E����{}�n��X<O�D���X��������[� �:<><>Al%��>��V<WE�>�4V�VZrE�+U���{Oq���S�VO�y��'�������H(z��H�s��WXty��¢svaqv�.�'�g�[M��j��V�S��$l53�}j�[�'q8=N����3>�/��*[b/��V��Z�\O"�����ޣy�h�:�VGr��P�V{<����"w(�bO�I{swckw����Fb�U("!�r�]���!����x5696939=��v������h ƠE�6�Xbkie�����}�K_�җ���/}}>V4;|��/}��mm]=�"��N�i:!R��.��bm��j7C���������a2�-�0������!X�r�ܿ�++)�����a_�v
,�7o��փwssa� ‡�ŏЂUl(/�!"��������M.����"�ZN���� `���6cK/��ԽMDX\���
+)���`��-®^�`
�B�DX�"$~E���'Gy�{`����C�`��׳c.+//1 UZ��U��WU� š�_�aª��]X
���"��,*6`,X�"�V�����`� �y�DZ�p�AZ���x0j%�VHJa�
+w��.����욁��T�OmhOq��MTR j��N$	V�����Ʌ��������-�+ W"�"~%",e�0CD^T*~u��_���+�����3g^:s�/��/~�}��KǮ�ljJ��ä�̎d£�N���2��F����#	^I��Q���ԖGI�� �/�a���W���%d�"��|FrJ�#���Ҡ6-�Is�~�R^C5�����n�_�aS<@�<ʓ�*Чyr_��H�S$�҈뵑0�1L�LS��Ԏz�,��;^_��U
+n�X<���rl�*a+h����͝���=h����Hi��0I�4IP!��
A�(�����)�J������.�D1������;8��?���cǙl����Nb�H|)��Che��VN�[���s��Y\M��Ռ8I�V�g��>Mi+`��Y��¢}ѹ�p��/`+�[EB�J��*z���Y��ַ�7�a��&�����+���h����}`V'��'Ĭ�1{�\��������Kn�&7v�7v�6�`#�b/�^:���p$�"�r{]��Evc�P��jt|z|�6c���;�.vF_�`��#~��K"�J�:a|���������˿���ї���/}�K_������я�n���_��ξx��?���޾��sw7E�8Ȳt���G�`�t�3�N��l!�Պ"�6�,XfsCSsqiYn~����r�*+��yp�x)D�a�D��#Xd�*��E�"Cyqy�"X��55�d�����UCc�����^�.!E����J��B
+�VA����.�,)���e�a�CE�#c rg�,P�><1M-����������Ak_?�\�&�`�56V�֖C-Xee�e(r�����D�{
�z#«���B4�7
�V[���l6[�ݽ}�� �5>6	�ߙٹ9��v����T*D��aK@n�LU��wJ�JzW�w�:�O�Zr���1�_ �i������+�W ��&���寰HHȕȯ�6+�rF&�W���u�Wg_�B��μ�2�μ�������ŁH��)A,��ȼE�dT��/���
+!�:��Y��)q���BQ��R�Sd>J������h��$�t�x��ӗbW�s�����s�#���Zs	>
�r)�-�O!q-���R�~ړRb1U&ͣ�u�>EQ��c�����d��S�X~��_�oŒ�������"�n[��U<]IpK�ۻ�n����������b���OK%�w	[��J[)�Ջ����G/>�?�H��zO�	��>b�w!p��\���z�[RO0���B7��
+�������u{[��ʎn+\I=A�������Br5�z��Y�Zt����}^�[[��bn-��
+������&�d�y��<Rd�(XE�v�#�`?�ٓ�V�<d�
+�8?��Z2���^qiy-���/Gb�P$�.b�cN����,�+v�c�ӣ�S���&G'��&m����v�[��Tm��7D$����R�XKR+�^rsG������/}�K_�җ�>O+3;;���/}���m����_������N���c�Dmr��Ƚ>b���aᣜ��;��=*))+���Ͽu����7s����]!�۷o��{99h�*�VQ�⒢2C�*�e��B(Z��_�A��Ej�k�[�W����1����f"�E�m��P¦v",)�����g�V��p?Z�0�%*��a
�O��� ¡��`Y �el�VEuuYE����J)��r~E�+v[�h��.wa�"!�W���
MM4���d"��1�51�Y�`-�,t���*����{�(��+�W�PX���J��4!u$Ip	���FU��3�R#(�F����~�!���=W�Y�2�b�2�+DXR�JY!D�u�RF��_���E~uV�W��^z	�KgΝ?o���Ė\^_:*�����r-%�ID>5k�+��:[��k�MA�T�)U�IE���{ԁ1��Hgi_K��O����b#R����J�C҉H3��+Mx,5�&5�R���$���)�J�%���V �~{�Gqx)�Q�6q���S�M��•�A(	���(w[�K|-��L�.��ݭݽ���#��
�}L[�������$���Hb+�!�!+�V���!�~��ODr���>�ق/��(p=�g�zz���!��Ş��`��
�[-�Ė�ñ��������!m��8;g���i+�S�
����?1=��v�V���y"W�v���^t�8��#�Oz��R4���W‭֩*(b+\�(l{�	RUp�T<d�J�0��\�>���[Pf���绹���� ���U4�G��v�1v`���^<}�g�����鐂~tbzd|��Wc��|�|5;�8�p-����r�*
+��(n0bA+]:<z������?r��/}�K_�җ���9X?�я��׿���,x��?���yOOWO/l�W]��J�T!]�ѽ���dnm7�w�;��춡����4���>��r�U�JJ�ܿw��-�_�A�h��u]�`�"�\�`�aI!�+��*+˪��kd�UUW_S���U�8��������ro�",��HuB�YAu���f¢Z��a��������kh�B��df�Y��XYSc`_^^XVF��Pf��+����kl@�OaQ�������a�Fc}�ܛ[�Z��!�e�Z{{A�N���	т5,�d����B��w0�%�{_��	��[ã�5@ͼ9�XLǯ�E_���M��+W� �u)��W<}�%b+��\�,X�"y;�I�
��,�W�οz���gq��g_9���"���"X/��=��o|cxt��.EH�JL)��G��4�"���I�����J[���*�fk����<���
+H���T���N��x�br�O�|�3cT����oO�'��e@'F��Sp�k�̰�|�|���Rz��
쑚�>͓��ɬ��t�z��P8���1���jyu2Br�
+����`���xI��ɳ�O�b+�A�j�>v"T~��ǿ���í�=A�
+*��bO����y��v��ml�^Mn��gg��`$G$����E+�s�Ղmvz����i>C����<�i"Z��z�Ǽݱ��Z$���]���������y�0��z�ɭ���$Qw����J����V��H[�@�jk�V[��;딶�z`ry�U�U$�G��H�(�`��B����_tx���/�f�f�^�qx5�6���i�&3s�v���pį���s���a�����?����/}�K_�җ������ʾr%��巾����6KO«^�E(ű��bwL]��[��C��V��l�nm7U��<*�+(����â���܂���o_�u�W׮��)�7nܺy���Ww��}���*,�/,zXRR�(CiEX���_�p~E,�_5��X-�[�����w>����h�jk~��[:�)c��"X�"����8��Ckb�Y#��1=(r�0[Z:L�fDH�b��,����r�BXK=A�l�3B{M}]5>������E��f2��]������ᑑ���i�`���A��V�$Z� +�JuBv�W�}�����L�Þ��B%���ZE'D���UN�`lh�ַ��$��W�4[�ʃ��\�UDXW%��|��+ W��22�.^�����ߎ
+��8ł֫R�#X_|��K��v�o~���RB>rMJJ}GC�4wR�ԧ�+u��-����K�`�K�I05tR0(_��OÚ�4��됁4N�y��>M%SkS?��x)������/�,�42��p��Xd�k�Z�Ԅ	ӁD��^�9=�l�DyI0���±�
+/	Bڊcr[�$�]t[?�V��zn+hj�V�����K!+�V��؈�T�������h��y��zL��	����<A� �`��2�D(���?�^��z�y��c�9�	NaO8�4�*���������<A
+\��j~qn�z+H[yٕth	��'�E��H����b�s��E�jskO�[�SŶ�T���W������
u�l��XMR�
+�VX���������g��[��.v
+�Dff���mS��	�W��S�"�������v��m<~�?�F~��J(�g��X@
+b!�Z^M������/}�K_�җ��������?�v��o|#��ۿr�o��aKO��c+N�,�oM]�r�XL]Ve��݌	����n����[�� 7�^�CeUai�{��ߺ���׮�@���"�%Z�rH"��b�`�V5�`�Ƚ��@+�b�E�b�P�E��������(��J���WȲ�E�{�Z��^s��G�GF��&�'&q#��d��#c�������NsSk;;$�`UU�V�����a��PQ��ka�½��U}�#l�A��rG�{�ȵ[Z(��7���ۋ"���QD8i�ּ}��X�
+!ŨH�.��09�U�P$�[+��:k:A��J��2�R�p�n�i�P�*�����?�|�jf��+j���W�œW�"~E�C�Wx���W�_���뀰^~����WϪ�F�^>�o|���G����H��)�f�
+�Ӹ���h�HO��}�Ҿ���H�I�:��>��i����4���ӄ�$��xN�8�s�������,Q���:Btkj��������_�T��Q����>��~pԄ����!,	ʓŒ���چ�$�ãV�����'	S�
+�ճ��K��؊7S���\a�WK#U��� f'r���V�'��ˎv}ckeW��j$������'���^p8��̡�jv�V�0IPjN�����A�j�65
��f��=���sQ�'�.����`�P$�y�+qne_g�z��-�[m�Bzmko{�V�{\r��w���[�b�sr%��Hɾ��`J�|��
+�Wp�"`+hG��>���r{���[���cn�a3|��O´������F�$�&�����0|���8݂K`��_y�a�`�;�"�������b�����W�_;�җ���/}�K_��ܬ�W���/7��Y{���)�dV==�`Y�D�ܭݘ�b�]��L��`�[�;�k��>�+ȿs�^AQ���*'/����nܐ^�
+���"X���r���>*(,�A�%8�����B�`Up���W�ȯpK,Ha5�HB�`!Ѣ� t���X'�A,E���]7o�@�P�`���O�k|jEXC�S���1���t��[j���R�PVT��B(F��-X�#X
u���b������

��l�/V[g'F��{���50L��i��-X`qe��E���_I[�(�+�|=)���F���
*�>m�E�$J�N������o;���̬,2���*�ʃT�rUBXW%;񫋗2^��r~��}X�.f�;��s�_���%|�D�/��ʙ3/#��u��3�/���_�"�XN�2)y$!}0)�f�K
�|f�I�y�b)��|��RHZ����e���O+�3�����6"��i�.%�R��R/��E��g�P\@���=J#����"Z
+ѽ**���Q��Ĝ!��|~!��U,l�XZ^YZY�i����L;�{b:J�|� ���<{��ݧ8FP�V������%A1gţV�tږTW���c
+\����;(f���?%+;;�m�	nn�orl��XE��;A�[�Po嵻��<ƍf�Dnc���V��	��,kr�W3�Y�	.bOW.�����_�Ao�"�J��˱�����������q���&ې�1�6��#�B�J���n�V��f��GcW��8<J��c_��S�.���P8F}�D�<~v��he�_p�-8g��4��Y�S��p�3P`526�����	�AT�c��6�h�;�]v�Ay��?�a/�.2",�b7�bJ.����Ʀ��}�K_�җ���/}}n�7��-v��� #3��o������G,��� ���vY�bu����,+�+@X��0D��Ⲳ�G$r�_VQ���7nݺv�Ư�]���ºu���{�������}��O��9
+,X���ʪ
+�`U֢�����

r������[ꚰ6(���~Ʈ0�Պ�V�_�A�m���VW����ν��"X�"�-�A�W�E(E���E��?�,��V�թ"X���<�UUY]U�,2�ד�]Xx�ë��:�KX_��A���J,�C�phhtltbrrfff,X���><����W~EP*�AP������(��
�Z��Z�x��W����|�����wo��fVv����K���������R�+*�"������2"�;�9���ϱ�sxtz�W@�N�+�BH�?��?e���9�5�"�T��Z�S�/�+!a�JP~n@
+by���RZ��NaM�_��JwjF�CY��U��@��^K>?��~�H��y՜G�@���/�<§5+%n�.Z0�cr�j5��������&������?���1*ُ�mu��V �z�Fl%5	Fi�V����ؕBr�&WR��ٻ(fvx�d���	���	.��/��Fˑ�R(��z���P�s۝��EQoe��������i+hR��V|� <���������v�Cz+7X�}�` �Vv���/�+�z./��ి�$HԓheG1����+@R;��^Wx�df���vt[�0AP�o�$�T�X]�@���c	L[-�q�Va�7����^tz�7D�����`+�uS\�5�%AJ[��M�N���p�i����4$��y_-8݋n/ȯ �p�������	� tXR
++]�g�����җ���/}�K_����+W�f_���~��������+K/�E��U�ND�;�#����:��j��xݝ]֖���z��G�9yyw���/,,���{����߾q��MHa���Ν�w�R�*��y=*-E�{yqyE�A�UY[���7TA�^mVmZܛZ ���\/�+�b!���"w(6b�J���ȝ,X-
+��
+-®��ni!��)�5����Ak_?�\v5[Zj���55e����*6J��
������
+��(�+�����V��qR!܂#����D�m�N��l�X�����`�b���X܁_d~�+x�R�V`"4.MQz�&����L׶sk�B�z}찿���^��FV�����(��3WJ�i��$(�!|E��6� <w�(��\Ȃ,�����˯@��*��_}�k_���
Gc��}���5����R�	�H�Z�����KTWU�Eyl��G�t^�_���Ӻ�҂�t<*�r����j*_|vn!=���k�5eO3���SH��|)��f�x�F��[E��W+��k�ɍu`,���Dlb���=�$�i��V���\�|�C�������Te�^|��l�`+�]A@�\ �%�١'����񓃓��<Av��-�'��+vF`e���@oEu9;t�(g�Vvp[�d=�'8=N��	�\���67�z����;`� @!/���WV$�CQ�'Hz����X���vrs'��
+��ږ�젗?��j���վ[��
+�	&�Wנ$��K���(�#Q�V�`�{}8F�-8܀��aK�1g�n�U#cS#�l�oa�Mbm�WT�����.�s��y����,��K��^	ȯP��R,�%�q�{,����sp���F_�җ���/}�K_��������������̫o��ӿ����Q�V�B���X��K�K�wkG������)��v��[{ ���\b0<,,�������ʢ��;�\�u�m����"~u-X9y�y��?*,(,,,)-.�()�(��D~U]QSC��zc5��Y�s�.a]��cm���|�6��{C���NH��FQ��b�X�:����Y��a���A�OL��Ck`�g`��������ƪ�Zv����dqG~e0TV`�����rV4���������V]C��"���A�FzE�Z�VOO?D�FF�&�h�܂����A�^�`��a�f%E��+a�S]�H���R��_�t�g��)+�x�/]�ra.�WY�Ĭ^�S��+�p��WY�Whg˼x1����P!<w��yv{�(�Y�z������+W
+>b��S��)a*-�#�<%#���4	+#�'Q�����im��B�HyX@C̴�/_��Uzچ)�(%|;�c���[P]d�8�iH-UA�µ��R[�i�>8�H
tI����0>Ez��o�B᠈�‭�m��n�M	[��s��<IK�OO��[�G��?�f~��VD��
���?��'*x��\�BÕ$f��ٟ�s����ɓ���}�l���uv:���8
������Ʌ�z�3�;��䎰$HVv\M��}jfbrF����<��E��V0u�	z�>�[AO0�$
l�=���frc�	����mF����hGQ$�EDK$W�[;�Ȭ8�B����*/	����J8�Ny)�C1_ ��*�v��.��V�s\�Ni+L��H52�� ������C���W�X!���N���y�$x�_	A�_I�(�7[��H�#XKK�o}C�G����/}�K_�җ�>O�������U,p}�k_�5{�,����)%��8BQ�9+�_Y�V(B����v��ba��������ѣ����9��>2TU�ܺs��M@X��-��n�},X�o߻w-X�*(�}��������K**�*@�NB�HXm4b�����i�Vi� ��؂�V����-��#|"!N'�,X����1A�����P��H����!yE"X�"���A�&��,X��1�U^TVRd()Q"�B�W��_�
+,.��B��h4655������e�vw����
���2`�Zt�n�����Iwi�`Dra�a("",h���ӌ��z��Q�4No5�a{~��w��W�˃�D��+J[I�A��g��y�J�W��L
+_ee_ɾ|��ȅ���_<w�a�³���Y��SϜ}��_��?F�	��9%������R�TtsZ�/��R��)8��Y�49+����8�%"H˗��.�6~��R�Tv ���DN��J}d@Q0L��
+���l���8�d�ٝ�US��'���B�h,���-A�-�������h�V|����1��"�:~��1���m�*	BC}���Cy� �)@U�V���*p��Oh���P��{Fz+\)�	b�j�V�I�V0O�\O����<���^p����y��,a+���x�jZ��G�_I�g����9\�������/�]�P8��P�������jr�z��"�=�ف\��������>����#lJ����q��>Ml�܂��j�V�����x(���x�B�#]n�������~fnۑc�b ���с���[�Wbsp�bW2�����^�-��9��.B��fV��
+R,
+b�V'b�0Onn������ї���/}�K_����o��|)3���?~����Q+�^Ko��� ��*(��W]��"�B��ei7��L��@T:�]Ʀ�Ⲳ���`ݻWR^^TZz�޽�n���޸A,BX4��^n�=D���a��‡�ŏJ�
+�%�8���
+\�55�u�u�ʺ�L^�`����ŝ����B�R��B�WĬ���Z�0���ֆ��_�:�;:���vv^��=�>K��!,���}p|E��r��4�P�`���ghjm'�����``����������PQQ^UUUSM`��7�_q���Ԣ������u�1�,X��B��d��-X4��gK$����"��B�0�VZ��ZI�,M��S�D�,<�?7o�˿��W�x##���2�у��߮�3�I-1v��/\$~�P�k�$~�����u�O!�p��ya�>{�5�`����<���|����G9�R"#��'R#~��O)D����P�TH�s${񧤰4�AՓp�%��&
+P��W�6SWZ��~
�:��qf%��)2��>#<F ��r��8^�47WzA�?pʈF�<B ��bK��e�VI��R���w����%l����S���%AIl�1Y�>R��>���?����ٖ��'�ق������\=������<<y�wx�g�	&���66�Y$VVc��H<����t�<��l����y�\�DbvJ[M��<�ٹ���=A�������
+@�}�HW1rL�<�����$�@�ֱz�����P������
+���
+�J;>x���x�*���������@o%���� LQ�A�Gp�`��¢kv���Æ�+vF�a
���BZ�
+����1
+bAsH�D[�m
+�[��^9\N�݅�
+�Wȯ2��)(����"�/
� ��+���/}�K_�җ����\?����_�RFV�����������G���8ȢV�����P
+������nB�{ggWw������QYS[X\���?7'���PY����ͻ��݄A�o߸q]�B�Z�b+'??>,V����,X��5`����)�u��uF(@���� B�`�Y�ͭu�Ūkji���b���W�T'$�;D�L$roG~թ�`
�gB
+kr"X����Qv
-}����VSgCKK
F�%�K�
�e�������9�)�F*6i
+! ,�0#���1��--�mm�f��j"��fog����t9�4�Я�B���`SX�h�#1�`���	q�w�Bz���TݷAH����~��?�|�JFF&��_������.)
+��/�-R�I�~����Wa_����u�W`�����Bx��+��z���H�̙W^}����/"K	e$If;��)���XPP�����n�"�/I�IM���XS*R1ZPy0��,� g�� ��Rڤ��H���05U�Mg)N_��O{��JM�|2�K�[;	���O��[E�wa�����Zr
�V�d������n�J[q��b�Lj����.#ȣV\ɮh*K���U�7�])WT$7�Z�N=�g��N����}�V;[������Ɖ��B ,魠.��+;a��Y��Bl5=6�{b
+�Vb�j��6�`�������y���t/:=���A�����
+`�*�'H=A
+\ml����n�2 �k�� w[�z u		s�Od{}c{m}�D^	(	��+��@DOJv ,�1m��;\(���v�mn�6�z�iL[M̐�
+�VcC�k��Df�7���+Qx5��A�W �bO>�h[p���	�+�<���hc���)�/%��"�h0Db��{_W��K_�җ���/}���~�����,Xo��ӿ�����B�n),�W`q�?���a[�T$���VgW�����e��i7��Mͥ���ܽ��H�X�0��6"�,X��ܥ��ܜ������G���E��K��_A���������`W�ד�
+*�^5�6Q����E���8V+!,1�ժpaA
+Ka����.+��{�a�
��[�`���Z�C8��Z�}CC��r�����ۍ�MUu��UU%���CQi��CyeEyUeeM56�I�nlj�o4�76�;�?���Ű�l�2uB�������hNML�������N�`y}�B��W��H&�;�+��'��1q�;Mv;]v���F:,����׿�
0��bn�B���\]�x71(�s�WY���ξ
+����6+�rffv� �>E�т��+��}��W���Ͻ~��M�>Z.R�%��*��,���)�)�D+*���۠�u��ϟ���A��*�.������gS���UǮ��MqqTׇ}�OuU��
q�%�R��rS3c^E�Q�%PB0�v�!������{|�` ����ե*	&Iɾ��#��v�$xp�w@�������cp[�$���Ĵ1���!���f%c�S6z��U�>&7;7\����(f����	;���C�	n���*��q�[�Iod��&u��y&���T��m(	N@�jvf�P0Lp��~
-,���{�^! �C\o���rlieye�Vk��ַ�9����n�J���$�#J�A[p瀛�w����vE�ۛ���L��ji��/��1H[��E����m呔쐶�A+�4`�����[�%A�#�*w�9��560,��)T�sx5i��"[;«�E��5�L����W>�+���[�pI[�cq�,�U0gW�}W���ї���/}�K_����o�={�ͷ������7�UV^�?4l���K��hB�c����f�r�Y��;;[;L��Ų����ѣ܂��99���W� »w�݀�a!D�P�~��DX|aAA������*4��+J+�EXSSQ][UW�SX�
�r����m�_�����4��n���N؊f*�Vۚ;:[L4�v��
+��^BX�c�bkJBX��h�����0����Z+F����-+/�-X5���3�aa�����_Չ�����F@X--���f��j����#X6�mn~޾��t-��.�@o���2W(��y+�n��<�\�+Xҙ��������̀lե���(�Ew(��>αҪ�2�"u�RX �R�)���H	E~u��$��P�ES�
+��2�2��Fy�Jm�&��H��rP��,)�P�#z�D�T>~<��aj>&?^�Iy��)e�I��I��P���=ΔC
�������,*�Ӡ6�Y���2?&�8oʓ���1z����3“�|�E$�O���B%��ٶ��Ʊ�����!`+�:9l���V�d����X�V�3�j����,2+��g-�z�Ju��+>R�]�V��;�"lu|Bbv\��on�&!p%�����;��Zp��'837?3;�J�[ML����IT�O��}zfr
+��4��gg��v�{�=A�G�x�r�U$�&�q4�%p��*�����!1;0��Cms�41ju(O�;;�v��{[{It[A�j}�&�$�?��3���<���m�F3�ی��$��$.��,�v;99�9N_�ZKT��I�`'���^�;щB��T�(Q}4�"i��)i�W�����{c�q&��Y�]�`� �n� E\s��#�t��	bI��s8=�Y��� �2��:�E�5�h
���ChjFp[�C�����9�a	�e{b��1>E�+R�O���M��Π�hѢ��`��+
+_��9�v)�D�E),�#�����������w�?���T�G^򒗼�%/y�K^�����~�+_���#G~��10<��?�#�+v��o�u���1%�"��Z�-$roV{wOK{�����D������s)+"X��._�<{��ȯ(�u�̙s�N�;w�ҥYY�`aV^^n~A^QqA�Bl�V�,����ZLa�,B��Ujί��X�"l$V��)VC�c��i7S�VsGgkW��`O� �܇I����IBXIJ�a���W�`5�(��jk�*+Kpaa	Z�JKK�� �j��0y�V��.�Įx�
+�Z�R)�_�75��g����������M�K��"�YN�L��
+��oO�% ,��'aS;��%1�t�p�tV�O���7�ܻ7###Ư(��.���ȕ��{�V�:��‚����{� ��9~��1�R�\ց��p���y��'B���]��,X�����U�`Hy�/��3!D�����#
�/I�gi�."I�$>s�MĊq�x��@�$w�XLx��P+1%�-9��\n�2�z��d��2d�bt#?�D��MxJ��x��ܛF��qz`(�?�Ga��w[Aڊ��B���M�Œ��-t[I�U�$�X������V�j�"d�T�\u�L�\Iz�����=��y�7o��ܺ}��-vxk�n�^^�X\^�,��Io�y�+��aBl�7`OP�z+ Wq�'&�q���a�3Z=��`�p me5[�	:f�N�[�������<A�	�F�ʾ��ʞX�Z�y��x��W趒���Ík8F�O\�
+�jy
W��%;ہ`$��υ�1��s.�o��;أv�-��f0��Jo���cAR��z�C8I0�!��j ����&�ǡ-8:1-DU�n�lW¨A��,���_!š5!�2���P$t[�Hh�l��ng/~��雃)���/8�������ؿ���o�&��#/y�K^򒗼�%�O��ï}���8q����������KKGF���>�K�O�H����Ƚ���gB�"X]=0�����VYp�JnA��l�`�S�B�3T!�A�g�d�>M"��`���� �"D��~UV����V�8�*�uj�`�Td��"$�{�#l"�����6K��4�P<S����چ"�NBX�}��"�%�'A��+���
+�8D��$6���-X5uu�55��`�*U*J�(�rh�WUR�V��9�R��8vP	�AL^��}V]��[���]]]�q������VG,���ޙB�����+hR�
+��=^R��
+�w.����WI��D('r'�f���_�z�*rx=��={��
�J�ڞW`t�(`~Ů@���?x�W�<J
+��e�;�������)���b.wv�/�K�`}�����U�Թac
+X��I�㈁w�lR
+�����Дp���I�f%d�RA�8�p'�\:�P�J�`��.Or�K��%D�һ’�dqm�xF���ъI)��A��?�`�Kt�J��˫K���m����z���7�[ݼ��V�P�*��V�3c�@�S�ET�>��l'$�(p%��%=�����՝�[�won�ƞ�Mv�쀗�6�VV���'�����|��f����`es��}����I,	Nk�f�3݌�譌f��j�ج�Y�}��V���Up.	�"�����<��e�V f�JU�Ut��e@�7DՕ��+@Cp���*�[!�Z��Z
+�/���`(2����t{�\n?$�f�VH7͂��d��4LpZ���֒|��V�BIph�������b+�	N�NL�NN��
+RjZiapFg�@�D�+��Wz^��b�*���b�bK�c�vš��+�s�p���l�_����q���9򒗼�%/y�K^��������<p�С#G��G?���UOe��\a
+k��UM$���
������UD�:���u`�*�����͹��u���XQz���gΜ��[�’X��C�RX�hq��-,�+,*(.)RP��Ui����(V��jA�.�+.r�*��N�+e����9+&o�3u<��Z�҆�Nn�B�{� r�Y���A�ÓSb�PD��������ܪ�o�R*˫�J��E~U\Z�(/+������z�&�������+%"`U�T�)��������Ɩ���6�|� ��A��jttbrJ��� B��j��zt��xKL[0��
+-���/���8a0Yi%B��j4D��;R/go���|��_���9�Bf�ۈ�^{���v�~��Wv����=��W�_������	aQ0#�����س'C�pg����/����������HRQN��k&aoR�N�;).OJ1����J`�!�_������I�@oB>*��œ����$�W�a�K����8+Mw2m�M|����?���yr[	i+�$��v��Z,m+	��V�w[=xx������	/	���V�S�����Ϟ���y2���9�z��G���}Ż(f��z���on��������2�Ao�,���=A�[��2�[�u��b�/xOpFCUA� ML�HA���=A0\ح��n1�m��j��9����V�	�/�
+шF�VK�K�k��Z]�����TD~u�F�8C�]WW �������ŵ��Jdqy�J���b+?`���n+���13["����ft���&�[M�RC����X���\a.���8�������)\���MA�
+bW�:�\Qg��W���W�<(F�8Ų��a���:ȋ��X�H�Xį���Htq{�>��}}�����%/y�K^򒗼>��G��+��;�_"X��{���Ccc�"�"!�n<���������ˍX<�u��nj�j�q��]=�=��-������9y8�0?�"XgΟ�<{�g�c����=օ�VAAnaa~ѕ���+1�{9E����jHaq�;���|
+!��8B�W0PGH�+�B�AV}KZ�(��	a��
A����^aN�_�kp��6�u�56���UTהVT�������J)X��*�т���B�l
+*��յuu��R��R���"X
�jniikV_�Gػ�qD���&��j��)��(lR��Ů0�E�A",�`��}6�6(��y��%i���>�%�jo��	+�ڍ�j�+�w��
+�����_ٵ��X��F�%���W����
+ᡘ�
+>��,�
+�*��ݤp���_����K�+�B�t�Ƒ�[v��ç"5�J`M��TU2���t^��ô��#9��K�"[	q���W�3�`������%�`��q�A�)���I���AlDl%A�$������K��0mu�f��j������V�����w�Õ�1;o�����p'«8�
W�Dr����'�K���	n߃���	n�#��V�˫챀�
+�OaR��cw����f��Yg0iu��ҡ�J\M%Z٧f4�3`ngW��:�Q�{���b�X�'�g_�U0��pF4�WP�#r��n��5�Z�@2\qZ��W�Dl��N�
+J��D��*�IɎ؊���r��'��mN�m�l��E��i+P��#�����ۃ#��i���� ߢ�] W8RP�	j[����|�ؕ0gТ5Xu&���q3�ȯ�-F��6��tBa(�����]�X�H�=�K+[[�ٿ�����,��#/y�K^򒗼�%�O�z�K_:p�Ё���~���n�W�,V?�(�Շ	q�ȝ��a�8���vv���κ�EYyn^^6"����+%��/�9w�����y
+DX��į؅g(�u9�RN�����܂��"DX�P��������V%�"�R�tX$oW�7���&���Aq�	�� -X��:Z:�Z��I����>�`�����aLa����q0�
��=
-���U�UV�Ƚ�=ȯJ���*** �U��*�+eo��hB�|F,b�R������L,n���bo� �e4-VD蘅L!����a��+R`B����Iu���nw�}I��XF��
�W?��翰w/%\����ˀ��+�B����v�L{׫�^A��
+P�ݯ�y
Z�y����Ľ���}0|p��0(Z���W��z�^|��o����7������)�U��xP��CO��o'�OHƒ���ܹ�?v���/o�]����$��#v<…�TLZ~L"{�h��+����*@%A	��VkW���M*	��j�6���D��$m����O�p����D����Y������+>XP4\!�z����0O���m���ھC��޸�~M�	.�!��U��V�����n���[AOЀ#y���gV�$f�%A�[��
+��z�ŀ=A�[AOp��^���@o5��o�a�(�Vh����V�y��'���,�V%�jiy],	�´|�Pt.������J�Y��V�u4LP������V���� ��/	I�՘�r5��af�=o<p���`�J0��"re0�mD�Ѫ3	�+����?h��XfdI�XB(�)(tQ,�^����U��:�^^Y�������%/y�K^�קi}�{�c�_��7��8���o�����?�I��;0@�ž�Q��^,��K��;)�-B�b�4��T�*!���w9';'/���<'/�̹s�Μ��2OA�`q�p���K��ae�B�`������[�˫k�BH�
+-X�"�V}�RP`!�j�:��fJa�l���R��b�����Z�]���;����Fc-B��fg ��1�����ޡnj���������S����*/�����0��!
"����T*:��
Q�Ů@,��4X�#�4��"XfE��.��"X>!�~5��AN�B�&�� �E�P�^X��]2���р��*�^z��ݻ_�
��ݘ�څi+�/���/����d�+��k�&Yh��V�����!��
�j���}^8ƭY��S�?���/���={�7��W�PUJl�?�L<��!h�����}H5:�g��H�{�˯��T)��'>d�w�{���Vj��{VS��kJ��LѣL�}I�e���H��V�$���kW�S�j���k<m�E��$x��m1m��0I��V�z/�������b�Xa�c+�
+R�����f_����w�'x���u�	�Z]�.AO0�؊=F�/��-�l��o�`��`����&�<����i�W��]J��4n��8�2[�۬��ͺf��ٯ�'EB0Op��aP���Ձ
����u
+\I�V�D��J�je�&	�ZX��B%{0��>[y��.&%A�2-�2NcOp�&ƹ�`��l`V#�Ū�0f��R���VӸQo�5���j�l���	�J��ȯ�T!4�3V	�[%ıBY��bV¯@����C�`��1���Gi���[�:򒗼�%/y�K^��4�㯿~�ȑ����7?���#lՋ�#,*
+^������b�Ƚ�������v",�`u��4;/7;'�rvvQII�Bq�ҥ�3��:�����~v
+�X`q?{��s�A�~�bv�圜l�])(.��]���+ʪ�˪�˫��+�uUJ�֊�v�]��u=ʯ����B��E��B,u3�
+�ɂ-B�`���p����}b"XӔ���X���Zg_?�`54��-X�y(�A��R�`UVV�B~�D������,pa�Q��Fa!�R���VE��ٷ-Xc���3
Z��X��nw8���#�9>p0����A�F�
+y�����T��#�<"3��v^g4�����3���ݻ_�9�]�z�P/�L�/�����^~Y�c��w	_{-c���2�Exd��C��ܷ�5Ѧ�g7��b�����o�/��K/�~�տ��I/�^O�DO	�hG��g<�jI��|\J*ŧ$W�$\�.��hU�t�t�:0���'�)���M��(ާ݉�����m]6�d_Y$l���~�J��7[�ܺ~�N�Flu��ս��V����`�Y�+F��0�x�>p��A�=��no�es���뛷�^��~����ե���%Qo��ϯ��g��pY��f����Z�aF���y�(`'%�����1���[�5:
��F3�����	:����`� �V���|tiaq%�$�p�����*H��qf��W��8�Z��c����u
+\�Lj�jq��$�6`+�輜��‡�4Y�F�MoD���Io��:��,Q�%AάxOP���	���'8���Lht��yUPg 7{\�J�W0m��"��Wz܀��&~A,<�ʚ�&�,�Š�H����lh>����.���=�������#��#/y�K^򒗼�%�O���w��N����=vl����������
�������+jvRw�W��a���ں�autv���
+#X��y���r��K��s
+Ξ?�y��[��?;u����\��)���Ν�x�F��{a��b���Q�^YE,����N�`���A���FA��(R,�<X� ����ۤ"����`q�����:��x�{r�+P���S��\�VS�BQ�(f��2DXYQYS]�����:@X�j�b�8B@X��5�B������A�������� F��N��S�s�%�+v���P���yGӸ7�R�aI+i�r�������o~�3�yy�+�z���/��i#��P,�N��^���k����"X�"<����ތ�V����h|!��`᫯���/�_�ڵ�k_�������	DőDE��������#U)�WbJ	����*땈��n�Iy�	_1%K��$�� ���ѓ���M�r�A��_��rCI&	����]L[��$A�V�nܼ�	i+)�ڒ(��?$��;BI��w���λ<m���j��?��C:G���ȕ f��1pz���������M
+\aOpu�������*�����\(�~Z�>�[�.�}�b�SO�Vz�X$%;b�),	rC��4|v
+J���L���h���o��fG+�������@h.8���q�!m�O2�\�
+Cׯ�{]�r�l)���cIp%]���
+�V�H 8�+�}gّ��J�VfL[�MV�ތi+=<^|�cde�B;�)g%«�!�Wc�� o�
Vv[Mrl51��	Nj9��z�Z��ʂ�̕ɪ�m#m;�&������H��©���*Ư�3���+R`���9��������G���%/y�K^򒗼>}���㇎ٳo������=}��B��w`��X�%��u�>�K��ɍ�==���� �E�[�;��**s��r�/ee�\))�p�r�3�N�~��ɷa���l��A�Yh�"�{QA1��J�J+@�^Z�iK+��*5�!�8�����Z>��I��X�$�"l�t�+�	^Q���M�`�,B�`uCkh`x-XB�pz�[�&Ђ"��>D�ڪjh��VYٕR�_�{�����������-XT!T���^� �+u��A�BvZC�zuCSSskkk{�{z(�5�ٻ-a��,X��ry}^���*�_���-�W��A~�ȍ'M�(�P<vu
�G����>�‹/~����c�^䴊p�_`�z�μ��K/�:�.2�C%[�{�f��ؗ�q`Ϟ}��zu/�,�w�fW�k�����W�����'�����|<YJV��7N������UB6Iz.oj�t�t+�r�yˊ�C���<���Jt�`�WKfq����,i�Г�XL�n����p�S��%h����f%�͍�4F����[׷n�j����[w�߽����"�z�^Ĵ��O���[���U���\=OA�������>�|������<Ĵ�����=ؾ{����ۛ[��ABO������`e_Z�_X�G�B *��XG�[���HV�-X�AɎ{|rz3WlCI�`+��2�
&��l4z+X�ٳ
������@x�V�P$�y�������E��Z���ȬL%�1g/�;��V6Hɾ�
+�jai>���`��� �"���酒�z�� �f��h��[�ۊ�	NΠ�}
+�V���^��E+;��	V��1(	��j����Y	�
+���ε�4� ���M3	�+nh�i+~�d�R,a�c-B����P�ł^��z��x�E"w�r�;T�
+��W���v�&���}�?r�%/y�K^򒗼��)Xo����3�N:|x߁'�����bpd�w`P�b
+��Wb
+�(V?�`u�8��ND��م�	!��T\������Eyy."<�y��[����)I����g/�?w	#X�9Y9y9y����%�W���(r~���B),%��������Z�v5�#T�7��W�Š�_�B!E�)�jhmol�!D�`a��E�F�kb�Z�<�5>546>8
+-B>�P�*��(~�(,a��"XUU�(r'�a+v��
"�{-�ZGX��^��(����98442>>65=�ѱ����l�[ ��%�X!�X��k�W�Ba�;n��G�.���_Q]}������g���/~�/� �+�W_|�%�WT*�;�v��{�����*�������w�~��w㆛P��l��*��ǎMku.�//J���~֛x���GJ	�)%��!j������M���\���'u�*�q��Q�Hq'�b�a2(Kfh��Cg|���l%�(�#�KK+˫�d߸�~��V�W�o^������[�[�Pɾ
J�;��܇�`\�
+�>�/	ƢV������i��X��#���?|�.�Dl�����`����5�VK+k���'HV�9�[�����tF�Vo�h�3T���[��i�\M�bW@��N�5�tF����+��j�:�`ewz�3���y����68�����B4ʭ�˫��(f_1;����T�����W�t��
+7Ē`�V�>#�d_
+��=F|��΅�m��;ax����lb+�ެՙ�[itS`�Ł���� /	#�F���U�����6�Ƨ(mz+
+\i�<A\bbv�Q+m�z���Y�3p�S,:�7��d�bE�8�E�B�b�Y���d��
+,�W�[����vFCaL��/�؄Y���/�"��#/y�K^򒗼�%�O�:r�ء#G������m[gW���	aa��Kݻ�d!��]B>��[�-�m�=}�]*�`����e��^�ɹ�P��|����'�B�Vf&;s�t&�sgiaVF�r�Va��+܂���ʪr�W� �j�P!�� F��,�X�SX0�Xp�f�c!�j�%)��VD(�;�C�!",X4�-X�)#XMmm�+V� �� ��D�",/���B�{��ʃ<�UO�Bv*L!$��Y,������Ʀ�ֶ������~�X� r�h�u:WXl|����@X����m����A�`���b!���1O,�N�v<��xiyž��?����W\{���z��!s������ٳ�Uƾ�������A�<�6����ތ}����
+���� �B���_1Z�1���IYP2w�����󅳩rPb�K�]R�dK�J��{��X��K�K�(�M�a��B\�<1��jD#��������L\�*`+(	�;�$i��w[�lEi�ǔ�Bl�^jl��J�V&WI�.�[=x����G��C�
+{���z�+�W�W��V#�P���`0�~$#�PQnw��v����n+�	Ŭ��R+�V���5:=����h1!��PO�	t{�ʎ�C���/G��)�� j��*�W��F�*�Y��)q-L[����|ay5���؊��Q��$n+�/����$AH[�[a�ʪ�[�Q��6���'�Ǡ���?�[��@�V���08:�'(�+n������j�[�'��I&�V&���2���K�Y���	q���A��D5�hX��(U`9\6�d��c 4�؊�x��p$<���*�"����%/y�K^�קm��<x����_��jk���%�J��qY,�b��Wȯ����������� B�������`,Xg���:u��fR
++�g�_8��E��+�,XW
+K�B�+x,X���E���a��Fw�V�pay�H�s	����W8��"�o�!���������>h���}dt-X N�����4�1��`ut� Bu=;�R�`��A���R�`UV�T��F��W��H�B��k~�.w�`544677���uvv	��ѱ��i���
z��d�[�����/�+�_�;%/�V 4�,O��g��X��=9\^�f������c���g�$�
+��vcI��]��f��`'l�7##c߾}[ fu��aq:|��#G9�����]��nw���g?��?�<	i�Jɠ&�J�Z%# 8/)&g�DFWH�V)�q��yWJ`�xT���O.O�dW��Jz�xN=;�%wx\�ir8-	pa�*fo�#4Ip���V�$�q�(ٯ#�������wom���.���$��1���#�����d`�L�;�+�f'r��wcb��o�{�����"���{�7�@o���"��sО�1�dw���n���6�ɢ���I�>�9���I�'�ѱ��3:���&\��&�'��f����r�=���n�s�U0L�[��}FROIT,j�A�ꚔbQrVk����$A��"�U8�
+GٞC�����`���
=A��m��Z�03Y�$�����a#rftbzxl{B�
+�U���ٯe��.���yA^kb��	�y������
+�0���VҶ O^Yya��$��(t	c��WF�e%ű����,K���+>����*�f~E
+wz��N�"������������ԑ���%/y�K^�ׯ����|��?q,X��?����f��������R�^au��+@X`no��a{ggO_[gw]}C��47??;7����WJ z�Ϟ=���V�)����+�g�R-X�<����+%`�*+/A�UVYCX���a��]��DX�V�]�z<��U���0��R,��pa\��=|��� B��.�����0���������ayu5",-TC��T�(/+�!"�V�T7���zU"Dy;�"�xEB�b�����#X�}}}h�gom53d�����v�,�WTN)�����P�9������fB8��(#Q|$���l�_����ط{��XQ���� m��j{M�ݷo���D�b��02�#G�����#��=|���#ǎ�}�����&ǎ������I	(�^��ƗS��&J�\�Ğ�l�1N
+2�M���#W�@�/��q_EzI���Kpd%�/)ps}�Ow\Z,�n���C������Vӧ�n��b���۷no߾sw���;���$��V�؊���}���d�z��Ϟ'`�gI+n���%�J�|������w�AO�֝ͭ[�6�6p��
+�\[X\��.�"�@h�=�����,6�z�[i��� p���iؓp�\Mkh� �t��d0��&��V�7���p9��Y�����|Ab�`���K��}5���W���#�sE�
+T���8��51�Jv�^��`��Rx~�V�Q?a+��
�=~�V���ظ�Ko��
v��H�����F'xIphL�Z��)�+�V�ґ����'8��J\M�>�d_]'1\ImWҞ��pI
+�FK\�PY���XVm�tB�%�cF,�]Gh�
+!(�Q�%�+T�υ|��vx���
��i�X��nݑ�Α���%/y�K^�קl8th���G��Q�����a��K�P��#X����+T{:zzȂ��8���������('/�RVl�9�`�}+��ߋw��}�����.�����<D�v�BQTZVR^^����
+D���A�*Ha�����;���jT�)M!lդlD�{��so�ɯ�M.���v�#�����"X#ȯ�FƆ��5�+����V��`{O/{6ꛛ�1T�ԖUT������TQ\ZZZQVQUYU��,X�z���^�Ѐ�^�~U[�b��pW�˝��Ս��(ro������������d����X��`9<Wl
+a�'(�|Aj�;"��<��N�&(�Ҏ�s��/��sv?��E������{�f�޻7#C�[!�ž���:����G�=F!�#ǎe�8�'�>v�u��?�.?�Ɨ~���z�R֬��pP2 r%#o"����q�I�t�H�,%� �MR�s��H�;���J��	��ħ›���?L�T�u�t��*�?�ΐ�I0��؋0�`�ji��q� ���Ɣ�[�D%��;���޿{�J���ޑ`+�C�����~������G���p��z���CB�J�	�}�����nݹ��}g��[W�'x�z�K+de��ʇ$��6���f��h��Qo5Cz+&8>53	�)1jE�A�V�0O{��2����D��'h��y�^���~��ss�
+s1;`+\�R�j���uArE�@��"��˱!ȣY<m����a�V�d�&	z}!m�9�6;�+��'�
-(�
�����cn��1(	�K���%�����O[�W����AOP0\��]�	j�p�Gl�ٔ9U���J��!ᳰ1�%�K�i�Y���xͻ�_I-�q��+�|N+�BT`q�{�������/�K�O���-��y�K^򒗼�%/y���o�ɟ��o�q���?��O�zz�"X�3X$DX]h����l��n���VW]C���,�� ;7�RVV�BqEQz�����Ν<}Z�`�:�	Sϟg���
+��.A+"X��
+�`���-X�-B�`��B��V�kTpF�`		!|%�#l�#[����X�vW,�W��"~�I,D(��Q�%L!D~%X��z�[�0���X��R�`���D��Ua��!ª���;���uu��b����~E-¦���v!��kdd|����hu:��h���Xa��G���+ί(�V������=o�E<6N���q�T��fә��.�B��Z巿��/��o<�^�"�:p��A�'���#� au�ĉ�Ǐ?�����x���'^?��l���/�����7���S��Nit~p��R�꾥TN�h�y%�+o<�Ih��8I9��5��=%Ƿv�f�M�/L�L�K�E��R	]”�4�>]�l�ً��O[AI�VX�q
�VȬn������w�$x��JL[�#i����?|���Y"����+�VO�%�>~����Ď�W�[�7(pu��*�VI
+G��0e�3`?\�G��tY��&+���&3��t���'8e����1��J��S3�B��i W:v}�ވ�-8O��ʋ�缈8�'��o H[����	
+�
+%W�\3�z �V�A`VKK�KkK+�ŕa+���
+�i+_��s!��;�i����d���g�[��C#l5L��iIpd`��VC������섭�\��
+�������f���	r�iĞ�^���5�����AJ�̱gVVa�O���*��W�ҙmZܱ�96�������"D~�G�z�B��ٯ� V�O �|��O�9�����O�y�K^򒗼�%/y}:�[>t�J]��� �+	��t	I�E	;{z;{�H���	.�������ʚڂ�+9�����r��aaAY�Nb��`A[��+/;/?��,X%�`�*�P�Ƚ��RX���lW֪��*�`Պ
+�����1��B�XP$��J��˃R"����6�`�tv�v�`�����[��A�kP�W����p��pO�`{O�9D����ڲ�J!�UR�P�������UVTVW�lA���C1�Wu�)�-�+ʯjkkj��(侬������֎Xkhtllr�����z��f���#Xs��
+�[���Ba�W�M�o.�ޏi�%J��r>	�$q�,���}}CS���w������׿��7�����C�u����G���:v����ǎ�8�
+�ձ'����o�+_��7���~�ӿ����F�50?���b E<�8�"�M혀JɅ���QBw/kJ��Jw��&%�K��R&��`)�<eL+�<?b�*U���Wc�}��KKZZ]�V�յ�� muc��&�o`�j���b%A1mc%n+�!ȱ����4?z������c���|��D���t��=�'���	�C���Ƶ͵
��Q�.]�C����	:�&��h��M��1;��N��{���$H�j��frJ���Q�Þ��VkpX�N�Å�}�y}(f'l�d�W@��V�p��jI��V9�B����!�����m���ƥ����<��ˍ�];*��m�z$9X�O�hǧ�ȡ�j}��I������0U�aa�`������(p���tP{�Z��p*s������T���+���"&�D�$���R�&D�1�+�����C#E�;�+���P�*��M0�����r�P^򒗼�%/y�K^���'��.;��o���Ç3������W�
+-B"Z4�����B~���vO �(������o��T��KJ�r���0�U���P\��>s����̷NA�P�W� ��_�t!;�"X����\~UTVVRQ��A���Z�J�W��RS
+�Vb�-:��&B���+�"�:w@X
�$r�,DX} �b���P��E� �5194!������6�`�c�����A#R��RZR\�(�(�������U)�B�",�T|��t�<�%X��;������GF��[ޙ�X�n�u���.���C�;2+?�+4_���W r����U"zJDzҍ�K�n�0���Ѩ������+(�����?��w����z����_����W��~���k��ƛ��?}�����_����?����w�9�-m&�$�(�w�g��}�Q������V)ˌIۗ.�%\ߗ����J�׊U�����}һudz���F�� �o.�^`8Ip�V��dGlu�V����`+�$H�����N*	������i[%欀Y�����ю#WR���ϓ(p���HW��@�����on]���vz�K�k(�Z
+bO��d��$V��6���Lf�]O��Oa�
+2HqJ�i/�=A����A�3ꍖ���>k'������'H=A2PAOpq9������+�Vkҩ��`�X]������
+�V��A��[��=�g_��඲Ϻm���;*�9��K��3��S�c�Bl5*����"�‘���}pl2��&q� ��4����bOPi+�'h���Dle�3\�a*C��J��T�ʐ������"�b	�+��]/i�2����B�����^��p
+�Hl�G�kW�>}�kr�P^򒗼�%/y�K^��EY���+��Xk �L/��H80����V����nC������VYPX�q��-X�/^<}���@��3�`e�=+"<����K4�0??��0����Dا-X���U��U�*���X���g�������ԍ<�%N$T77�K�"�A��=`���,j�O��*�"�A��)���CV�R]_�,EYY�"Xť������!O;���
� ��NY��SX�ZD�.a�ihn�VD��klbjJ�-Xf��jw�g]�����+�dt�
+,h��z����*gz���6�3<����H$�wy|Z��wp���Užqu�:�K��ww���7�.7*�#s����w��?l�fJ��h�����>a�Oz�;M�0�Y���|�������k;SQ�Y�Dž%A�\`���$J�5P�c�JP�o��������wn��V�IK�OD%;���b+�g���?z.aVx�?���{�W�=}������bv�V��f�=������͎��V�`e__X^�,@�.����}�����uZl4\Ϣ3�4z&i+-��f�'�������[AIpfjF35i+Qoe0Y���
+�'`+����y����H�����@�j��ٹ�JL[�n}�bW��@���VV6�x�
+�VRl%������[��j���쐶�� ��1�K�SR�O��j����� 'WC����7\�oZv��!�'8>9��G'gF[��}�=�Zݔ������:��q@��T��
+))ibjgZ�
+[}"�%�1�W4���!6���+c�_�k�B����΁+)� 2+La	�Q%���A"���?�������%/y�K^򒗼~���Cv���[��w�������#Ȭ@V�b	Fw@X���:zz;{�;�{т����[�J��r�s��.f]{y��rv��sg3a����΀˝�չ��_�|-X��
+`a~�’���R������J���^GX��W64���so�;	aaG�K��V��V{O_g�`�Y��X�����h��PW?D�����W�Q�UTW�VT\����REyYYU��������Vub��[�`��RXյ5��Tʚ:®����v�`u�� B$X���&E�B��G��	,��|��"X��DG$����}q�roj�x���Q8JOz������|��)�qña�1�����I�<�Tt%�nrJ��x��sJ��Q��n������D��N�Ȋ�4
�e�|);�;s��Mj%��v�TR�OH[E�K��Z^]'	���(ٷ j%b�m�V�%i��o'+�El�<[}H����w����
+{�0�Pj�z�Γ�o?���=�[�nl�_���quymcae5Bz�p�V�*�Ϻ�v��b�5�0A��	��0p�$�V����=	mA��V2OШC���V6���~����Y���b�����qz�pd��d������م���`�ӵ�e^�V��ZEf�<]L�V^ȃuH1me��1[M��&�������D���$8<:�CV���	B�J�������0Oprf��VӀ��$�
W�$k
��"%;��L)z|K\�j��2([%��t��L쌑��y��^Š���4�P¯0��#c
+,'�@X�V���B�*�,kai�����:򒗼�%/y�K^��4�����v���"Fq�O
+��H8��uX�HH)���^�`uv�� ���`���g�dg�喔����x,X�O�b;��i��;�F��������-‚�+�",+-)/WTT(**˪$"���*���,XD��U�p�V}�����y��O!��W��E�Z�����ى�{�"w��5e����@�Hw�`G/"l������,X
+�`���V��WVV�TW+k�(l���U}c#wa!�R��_�T������U�DBDXϮ�������������?04<��)�V���"XN!�`�+����$Bx��K�e�IM3>֧��a*E�'�9ӄ����:��١��sY���`�;��p'�<�S����4��x��cw#��v��O}�g�j��c.��
���l�,@Ipe�	�ׯŰ����ھ+(�1m�v�ۊc��bC�6A�.ʬ�M}�������(%���m.f���R1��G�����]�Vw�ݼ
��onm\�\�z}ymcqeua	�W�����`Hܬ�
+�'��Q�V��i��!m%������h�'h �b+۬�6ks �r������p 8��=Bz+0\E�V �&��(«u.c_Y�N$��+jb�*<�H�j.�
+/�?��ι�s��fݐ��:�f�	�2���V?5�%l���ؤ�dG*+	�	�J8�O
��}��4O�	N�y�S��),	�� fgO��ȕ0L0]w/^E%䬒�~ɨJ+f�65��J�V�i�\MKNg�C�ۦ�W<�%P, W�p7��R~e��r �r����d�y>��ڣa�X�k76�?x��������%/y�K^򒗼~�ן~���������<p�з��ݑ�q�Wl�J\X�Y�d����T!�M"wDحnh,.�VA>D��K�KK/��>{��̷2O�<
����΁���9��_��~���[P�WX�v������Vieeyu� B�E���R�ȽJU�z�Ƚ!>�ŃXu��j���,:���Z��m�Ƚ����Z����PKhB�p�WǸ�=?m�=<�U�#X�eP!�A�
+DXYA���fR������bK�V����Zv�j�X�jl�V[[g'�.��� D8��k
F�V�G���͆&�o.H�j���_a�)D�噛�$źOƝ|�D;�E���s$�˗��EX��35J�J�H	�&^��M�;�9PcTqWv'm�W���/
ג���I)����)_:�&)6z�(X#l�D��0Ip&	n�l\]��%��7)m����ͭmP��$���w�ݹw�����D%�;O?y�����b�*6C�V��l��/$;�_	�,q����a����<y��	>A1;ꭨ'z�;��n�C�@������
+݋,,�E|s!�o����׳9Lf�	���aOpZ39
�jl�����'9��NCOР��F�	�mf��j��ς��	=A�'��Q��~<Ñ�\E��bOp3T�*���T��
+�����\l:�hBIp+�q%����.b+��V��i+��h`{
+{���щ���Ip[
�	n+Q��j [���������0���>���$���Io��Mbڊ���ii���Sjx%�Y%���T5@�S"�J�S���u�0��u|��3솜q�]Bs*����H��(Q`�mN�_Yn�,�+����P��� ��~�g/�����=b����� ��#/y�K^򒗼�%�O�:|�
"��U���.�$V�����듌#�[��X�ZZ�0��WP���});���<�����K�Ϟ=y:�'��3g؇�:��l^�Į��������_�WTTP�(R��RH*����U��W�jr�"w���.w���.�fj����@�gZ�,Xmݽ�0��#X��拽A���0��\����x�]���������U��P]�,��*)//R(
+%E%%%�����rDX5P!�S5ԫ����P�nl�olD~UW˶J�X`q~U�ʬ���Ɩ�����w�������{95��,�}��t�<X�����+dV�:!U�h ;D�|�SO;���Tʒݿ��HCD�1�;)Ԕ��O)/w�
+;%��܉H*�+	s�wbA����X!��;�>]q�+�i�_b�˝��\;�>ԋaO�;����W�����o����V��n���oJ�V��$������$�����[�1�ϞŰՇRl�������N#?$1��|�ɻ��y�ّ��	��js�Z�WAol'�@T��sy|�.��ᄞ����`�¨;������մ����va��fzF;=�c?�Z�/��0peu�lNǬ��y�Aq� ����b4�DnvP8Rz�¸��ի"�Z�˗c
A؈�"�h�Zc-���趚c_Z���.�m�lu9�3�;-0+���& %��j���������hz��El��c���͌M�0A�5�I W���#5������?�(LiUjl%6)d�.�x
+�+��C�S�pC1��"�����b-B��p����aF�e�#�B������
+s~���a�XhĊDWV؏���%/y�K^򒗼�%�_��g?�;�֛o�ۿ�Б#��oOLN��+��D�aA��������;�������т���I����܂��/�)�*.eq�I��D�g(�u����B�sE�W�KJ��VeY%���P�P	wDX�F�,Xj"W"��m66��Mj�E��1����zHa�5��7w��j��n����q=���a>����Ђ5�=0�����ޮn-X�WJK�A�$r�T)�j��"~�"X�u���a���*�B���
��M��������go�G�ƹ�h�A�D�F�;V���įh�`0����������ZZ�Sr�	89��K��KU��R��v�
��w��^\�)����Ku�1r去øH�;�qy����������L�&˛
+��}rR«���b��7��Ñhdqiaie��V趺~�V�d�q���֭������w[=z���HɎ>v^�i��rlE�8l����\���
+
W8U�����z�yO�	޹���6�ol�f��~u�����"�GaT?͡���!+;���~J����Ĕf�դ���$=A��b?�`eכ�F��l5#���R��ݿ��R�	��UA��bv��3W�-
+�je���\#5V4���*Y`?�b���{�A��ې��;�v'`+P�[[a�lJp[AIp|j���!F5(��b=�xr�i�!�[��1	����f����m5o��
>J�d��>��J���V�.�f$!��A���"�JyF�1Va��9��	�+E�,V|�"L!�9�R��?�ψ@x�Vd�
+�
+ap�DX�e�����ln��ڑ���%/y�K^�קfQ�����5��������$�{w��)����X�=0��*Ud���˽��UR^�_Xt���S�O�:��ә�gy��D���.pV^nA! ��b�*//%VM
�����UY���;�+bA�RX����z�r������J��+�_�n���[Zpa[S{���[�{�{{A�-�>�`�q��"F��G�uؕ[;�[�T�
UJ�`��'��N�EX��֩ �U�V�s~����.A�-X5�r���,uSSSk+�ܻ��w��aE�,XF��f�90��I�`�0�� �S`Ꮈ|isS�cG��I�x��MLJ�Bz��K��QR2*
��W����N�|ɌN��tw��)蕘1s'=pw�'����$�1w���W���T�1m���J�u[]������7I�~�Vwn�J���=|����������$H؊|�O��?��<q�ȕh�"l�UA
+\=y��*����{�0O��Ğ�����[W�'��s�'�U�����=p���js��v#`+ 9&��D+�8X�!j%�������f4��"1��`���i+�	����uz�'腞 �
�<A����W�P�[\�&���.P,:���]$�2+�Z��}!��`0��ٷ���9�V^��CI����F���q�,b+��S�jd�O[�`_�y����ȠheǴ��&�Y!�"f{F7��#�2�9J��tR����>��*��](��D�T�<g5�J`SS��U�nŏ\�Ɋ�߹���_�lZSL�. ,R`�2
+,T`�c#�B���_qVD��#���TF�7�n��?����?u�%/y�K^򒗼��+�Ȃ�N3��?|�����Ƨ���1s%�IJaqVw���.������֎NuC����l_���/,*.+���u��9aa��ӧi��g�_�}�҅˗/e�A�y���W��\)+/.+/A ,�`���J���@���P~E�A�X���¹�M�R�7�q��r� ,��ַ�nl�-�֮�A��7���!������"�� ���1�`�wC����V]WYSSVYQ��K��%��Ҳ��ʚ�*�Za���D�u

h�j�K�H�rU][��P(K�V�������ʞm����H"X:���7Y��5��}8��+���D��R䃽����_�s}�v���\;�v�t�;v�P�xޒ�j�S>w�0]�w%����'CI)�;�u|;3(:��ʕs�V�D��O�JC���
+�o2sz<`e��m�jiuML[��j�V���6N�}���{��l��>(��y��ݷ�$+١��L#�!�@*BU�����W~�G
+>}�� fg_��|��1�d�tk���m�[�dau����ztie>
+�$�#�@���V�Bl�z+�D�a�\i��+N��Qo=A
��j
Z0\��F���Vv���Ϻ"��[�a��	.��B�5��Y��J���ȬHlE>vv�H[��m�?0���m%�q���b�5�қ�:<X�VSڱ	�Vc�èd���/	���`�*84��h�r%����Ia��(��g1�V7���������K�W)��4g�C�*��b���cb+�q:�VMIv��IsY�ExW!���k�J#XF��$X�-4�PT�KXD;C�f����r�,P�������I�kG^򒗼�%/y�K^��u���������~!��O�����,��E����������-X=M-m�Je~QQn^^vn���EyE~ѕ�/�>{�g�N���S�*���A��,U�_A+'?��������BE ,a� �Q�U�"�*�8�DXT$���`+d�BR`ayP��,�U���Z@�����������V[D���	a
�����"w���wp�='�]�-m��`UV�`�",~UQUUYS�,u���х��>T��j1+aaK�$�;D�ZZZ�;:���za����hl��$X�Fa;)g��fg�s�
+���F��v��ʛ�hK��ܩU2{I�:w�:w
+�ו*�>k�C�ʟ2��b��;�I<�w�WR�З*��n�N�4��Zq������؋$�@gmiyquUZ�z��[��lm�Elu�.���[=|�1�V��z���O����qi��b�*U�*[�<�*(	\=CÕ���ՃG���y� f߼�͎������W�Qo!��	[yg]�[�0_Ok0ņ	j�$8.&HmA�	Bk
+j���Qg�=A��f���m�
e^�[�[�Cl��
+S4�����'�n��cW�Z_���q���
+�|>J�0b����G�
+����fwYmN�V�����Fk�i+|��c�BIpK��I��1�{�#�'8Lb�����J��Br�����1m%�+��G�)s%aA����R����@^�JU��T�@�SU��>�<(
n%«x�&��$�ʜ��b�+i�.Q`y��'��U���E�t�G8�b��_�A�w�?u�%/y�K^򒗼��+�~���N��g����cǾ���SR~E+��E8K����za���V[G�,X��/,����_�,D��w�`�A�u�,����c�0+'�rNNNAAnaa~QqaIiQY�2�`a�������55�JUU�
+�毠<H��W!��B~�j�Sk1ō�迪kj�F�f��pa;
"���{z����K�j�M�D8A���A�`�u����SW�֖VV�g�V���+��**����`��V}#�������F�P!d���T�Z%n�>�
���mm��==�C�ãc�S�m�^k0��n�;]dq�� B�B$`E{����PBA�o <�L��ǧ��I�*�0j��RBjȝ&_����D���� y����i��41��\'���
+~�������tC��0)1s�H���\ 8fEJ������[aI���6o	������8I������B����$������b�����1lE���CV��>�E�̕�f��
+���El����=���������c��u�ꍛ������jdq)]"����\^?���:�v�ɂ�r�[i��G�+jύK��$fG���V��Z��t f�������>�u�J��
H��u�/PU0�#�*��$VWx�
+�V�\�!ڂkBI0��n�V�
+���!�
+�ctym7W�[�l�ۊ2N:�������%A�{lpxThK끄����`eǪ ��\��P�)�b�����>%�!jS�J���,=#�]�'�L;(������Đ�^��9+��|B"+�c(	tI2c���U2���u����W&A�e�;-��X>�WX!����b�p>��^�����~H
�B��G^򒗼�%/y�K^�����;=���z�K_�+,�����H�W�4�P�����������}���Z�R������]̺\RV^X\|�ҥ̳g�
+��ә�g�`
+�[�pa��lb-X�+X!T�W�",!�U[�TU��H����U
��܎�+^�)��<��y%��ԼK�"EX�]l�������"w@Xc�BkxbJ�����pVWWc[,���� ��+���������,�u���� Z��aճ�l�j�T8�P�:,�l�ͮ������,�`
��krF����F��f�:b,��J���ګ��?��BaE��ݽ�"���S�Z_*r��tK�lJ��ߕ*z$�#z
+���OII��pe�4�����K�鮓
+g��?�O��r���)<�.X��[��������
+���q���M��c��:�V�[ݹu�����w�=���὇����VO[�D�.b�T�
+�G	�JR�[�/����	��
+�	�z���7V�7�V֢K+�^��ԽsA��?����+4�m(*7j`� �&�A��i+ړ���P�������2�b���LV��N��BO�c+�υ���� ű���z�%�W+|t��*��jx�eJ[����\h�쁰�����I��'	�D%���e��a+P��%��1R��?�}��Ng��G
+r+;��!�
+UAt[!��z�i�M�/��!�aO�Q�[IJ��6�F��Vf)�ⴊ3+��[I-UB�*���d���S�0���ر�%��i<���8���ƦZp!!,�e��_q�2�/
+�G�E��*�A^�1�0d��̿�뿲�om�),y�K^򒗼�%/y�ʯ��/�e�����Ʒ�5:1504Ķ 3��_�Fw�Y���������B���m���M͊��������KY�s
+���e��9w����o�:���ӧ�_�A�/��t�bV���lί �UTP�(*-�R^^���A��5J���,B�W�*���j��E�
������$=��"���A���[�-��l���u��w�lhd`dtpl�M!�5:����ڻ{��1��V�������m��}o����-��L;3v��q9��V�Jrm�K]燛��r��%j��}�$Ap�wb%n�� A��D�%Q�.uKj��3�{\v����<�{�{�P=��Tu�:�:��x>�~?OUuy��Wee�ȯ���j���j!�����b6C
+��X$lnTըD�j��"��`���Z�������7884:::a�:��IvT
�g���Ȏ�1��-���V�S�+�?����\::��Q�[�Qo�B*�9J'�^
�砢?_j�pPs�ʭEe�tt�*��n(�J��hF1z�Ų<�%���13�e|K��]=������ڼ����#������d��K�l�
������i+.�b���R����m����+~��L\��]	\=��s�[!��˱���=��k[Wv`����$Y�WV"�e��Qo��_�E+�g
+�t�n���C�b���W������ozv�����Y���K!�u����s�U2E��5�T�Z����JaV�T�1����Fg
+��Dl�+�$K$#��Che�_�.���L��
�PoEn+'�M�9&�m�Bu\ql5<2Ɠ�C#���YU����&pc�v�	�ފ���V,	� pE�+r[�&�/�����;-g�U�UzC�%E�$lſTLVi�*��Jk��$����6��=�r�(����O!S�5���"��� �B��Z�/(��X	R`-c�*���ŝ� $�Y���E��?�L��G_�җ���/}�K_����?�Cv�ݏ>z�ر�����OX�D0ae�%�[�����Y������SaI1��
+.\�Xf0�֩Sį>�V��`�A�����/^,(�+(�+�{X�*J�F�EXe��!;xUo�X����E¦�&>��ji��
+r�
+7�$ookjmmR,Xm0�P�w��"X�"���� �&\�܂5��/�[jL����+��JcU-Z����jenn�
+�����\��&�o��d��C�E"w�]h��w��������4�P�`!�P�f�V 
��Sra�A�*�_-��"�D�қ��o�/ip�.��`�g;E��xT"9��3ZY�N��P�������34ʀE��_e���QE�Y�f��P+�`�����"�p4�{W�R���Mi+��߽�L�i���H�~������`�����%A𱋴�sH[�J�!(hU���7R�J�����[=��i������;�A���cgw���.`+�	��bheGA�4��/,��S��N����Vv'�D���vƭ�rZ�*=A�V�n����)��C�*�0�V���p0�^p�'[�&V��0ɵ��j*��.�������W�E%pCl�Jm^Ƌm�U���؍�CUJ���b��%B�{���R�V�$���ip[��is�մ�8��[a�jX%W���bv$WX���‘q��Bleu@�J2\��\y\��m�LC���M1P��8���:�j;v	I94�*�rj;�N�W�9�P}0ٞ l�saA��s��}ZQ`!�"�;TC�E�k�
+wA��'���-����d%i�����?���g����/}�K_�җ����D~�������?�������ddD�Xʄt^*�'�
#���`wo_Wo_/~��b)7�
+
+�
+/��������0�"X�~Lw��N�ṋ/��]�/�TP�O�+*J���\�� B���64Vכ�9H�����fl��+����"y�a�,+ma[wo{/"���528264��	ۈ���-B��`�m���75W����ʌFDXQ^\^^f4T�TW��@7���+���f���l6���I����Ʈ�h6�A������^���A�`A˅�)���\`޿�Ȏ����w@Xį����RX�Ht�m������0[�
+�Ov0%+���'���'}��HR,�qk�HL��.SR�]&��k�W�.�T$���^ J�kE2/�59
j�{LV��p�r�1&��t���E���k�����.o���I���!m�/+�o�D%��;��v�ރ;���?|�%A1F���?}�*�!m%��CV�J�]Q@F
+
+1���R���Gw�� b+�h������_��ݼ����geu=��d��P���!��Ҭ�s��Y���$Z��Ii� ��fC��V@� m���f|S3S�s3s�[�/��$1{l9�i�f��ƥ8�bL	Dr%+��s���'�
+�j��� m%���p|1HJ�P��V��$��Yt[M;'�va��9�$HVv�$���Q�aq:"W쒰AI�]q�::a'��a��������p���}���D�@��U.��v���jؕS�33V��#AZő����V�,ɫ̀�#��Jݤ�Zu�L!�"��M!�H�J�`q~5
+,�BH
+�%T`�w{K�+��\Q�	q�&��w<|��������ͣ/}�K_�җ����wz��_��`���Z^a��Z���;<42��,Rc)F,���z��E�-B�Y}�l���
����t��`()/?��OO��EX4����S4��4"dFVA^a�Kˊ+�Fc���PUe��;���iMC#�ܩE�X|
+!%�p���̖F���B(RX&��;M�VDX���F������Ş�:�[����E�ba��`GO/F�����U�UYi��PQYYY]]SW[oj��W-���_5�Ƚ���mu&�B�",��s�a�vttvw�������ѱq�#������"XKA�`�S�~"(֊�J#�bG@���[bN�,ZrSѬI�4آ�4��NJJ�*5z��2"c���K�JI� �+~]�VX�^xN$vT�I��|�!7E4_�_W��+���t��+$�Z%Wҫl�`?�������/�\+���ͯ����P�luK��i���G�p��St[�I��[!tR'	�z�6	U���+<� W/yU��K�'��ؽ+=A\ݺ�����mm_E��&譒����
+,���%�[AO�ˇ	b{0
�Q+*	Z��V;�,'�&.�k��~�&%��̬�	b�jq)L�*MDc+$f&"�m��js-�տ�͔2UpW[�
+�† 쬮#�Z���
+�$Ȟ��
+��"�!�|p�U`zF	\Aڊ�����@�j�Ƈ	�h}PìFԒ ĮF���\q��u��΄}�(l�!W.�Y�� ꭀ\�))���I*�`Vi��w�(x%��
�K���d6���3��cWr(ˡ�[v�3��r_:,�8��be�W�B�_i�WSb
+!� \�	��}��B��*���	�r����",Y�"�X��Zj}����?��?�\��G_�җ���/}�K_�������?v�������������2yjhxX�`ɣ	������P�����;0�N��-�ʂbD�¢r�`A듓'?>qⓓ���֩�ӧO�>�#X�����^P�_T\XRZ\^^b0+�Ž�V�`U�7pVY�pa#�rx� �S,�K(�Z�fx�&"X�v%�"��>h��kU0V>(fچǭ��VWkW�5�`(�e�()//5T��ƪ����R����Fs3����+aA���	,��xEE†FB^J�,X##cV���t���)���,;�^X��A�hqO$����)��Q���V������M������6:�)�I,+LO"���vJ�CJ�/#�;��(T4�5���]�qΚbj+"�I�riB\=���G1�(�I�m�t���_A���]B�V�F!��R8�N#Qh�.����oR�j�컚��̓�c��8I��g�?%���$l���Lo�z-+[}�:3s�W$1��1p��sv�r�
+���ܻ��	���=���k�m\������	&���B0X��@7=뛚q��H�dwMڰ'��5�+H[�=A�[M{0m5=;G=A�<X��'?�`+\ŰɅb����Fru���R�*����e�X��a��Ɩ�ص��Q+h��c"�CI0$a+H[-���s�8I�Ki+T�;&A�5a��f߄}�����"���ª }����>�q� ���$����Q)peu��r
A���"��\	7�[L�|�?C�ʣ�W�̤SfP*#F�!Q2��Hd�W������[���$�%{�5S1�E�������]ï�B8�+�VD� ���@̊���"�\�`����v���?�����ͣ/}�K_�җ����wq���G������w>��[������/^�ڝ��FĆ�6܅5"v�-X�����;�E�Ͼ�����,Xy��� }TVv-X���
+�99�r?s�ٳgΝ;{�¹�s��/������ȽDja�։A��8���N-��]Q��A,raQ��Ԣ�+<GaQ�Kiv�Z��E���!�,v���x��p��`{OoKGGc����XU[K��u(/+3ʍ���*��74������b6�Z`C�ž4577R�������U=�<Y� ������`


�����A����e��`���������?ȯ�� h��a�'V�B�`���7��D2��ג[x�P�
+I�%�A����7UX$����`D�W	��DӪ�*�R�]��h�4[B,����ƞQD<Z
%E4/EXI�i"d�
+��/�������+[�;����ٽ�%��{J�
+���nߖ���I������R���䨕Y}��˯r�Z�\AU��󗯏�V[=�y��q���0O���V{�WHo�yy�U&�-�`Pfd~1�_X���O����g[a�ʁ�9��7a��R,��V�I�s�9�Ar�s{��'8=���������DO���Z��/��+k�)�Y��6I�N�*��*��O�ea=pc5�'	bCp=���+v�%�)�
+�V�9rl%A&8O-^V����1�����(V��G�ئ8� O^!ע���'1��� f�+�í�	�R���Ց�*
[��\���H[�����*��x��>Y~%�|o�X�Kq��SU�%U�+M�.��B��/�wx"Xp�I��3d�a@@R�O�aA���)�q�\K!�J���7n����������/}�K_�җ����/�տz���o�������c6p�3"ű�T������^(�
+agOo��;m4�
UU�E�EEd�*��rh
+�'a�֩�gϒ�]DXRPRZT^Ql0p�;�k�5���Z-�"V3;%�;T��(r�Щ4��D�Y��� �e]B�`� �v>����"X]�����A��aYi!V��h���V[gwsk[Y����Gi��WZ"wcuUummmC�`�@%PAX�4�����	�B������UZZ���;;�z{��Ogd����n�`���`�<"��sQ!T�vO�h�*'���mu-�g�JI��l5:M�("y��wӵQ�L����%�S������I*�Q�QX������RnP�
+N��xKy��a�i�H������*�kKy�a��
+
+L'�W�F���0a���jjcc������;�X�&&	���J��nܾ{�Jvt[=D%{��J�ع���K�V�Y}�JVo�z�%b�/Ux�PWD�^}���|.�<�\`��w�#�:ܧ����흽�+;�[W�d���+{����C���V>�[Mz�lE�'+�Ǹ�>�q�W��[��N�����X٧ٍ���Vs���B��B앏G@̾���`���`r�`�uN���	+��39�B����T2�N�m#���D��d���
+&	.��>�4;7?#�V�0M9)W� ��"R��H[�C���Ƞ"c[�а�����c�$8�>�l���J����	�����g�O$r�����T�S����hL�i�
+�V��2ᕬO��Ri0�g?L�<�J�]�������Gf���d���'O!�S�z4�J�p���B(�"��+A�W�Ru��%�`-)ܓ��k��[�_�`�ܳ�z�o}�K_�җ���/}����������o|��_��{��W~%7/��pQ�L�P$�Թ+[��p��������lik��o(*--(**(,�ͻTZQ��<{���3�?�;=���驜��O�>sf�?�…����;�nI	X�4�hr�{}5Dh"	���N��&�Wf%y%a+��"l�.w�6��;E������"X�"��Q�`�[�q
+�b��֐b��l4[�(�UYI��
+h*+�jjL!wn�B#�	EX��`���.��:�W�"��,D84:,X�<d��_,�E�V�+IU۞��7���Z�C�;D��R�$J��SI��G�-JU3E(�-[�M=)	��H7�Ө��(y-A��ZJ��	��H�Ip��UH�eI�/�G�2&#8�hK�/#;q;�tr�wθe��C�%V�[���o^�� `�������[�߸�>��Ȭ�v��.`���z���#J[=I�V�3��Yɜ�K�V��W_Ra�͋7_��+)������bO�����Ս�{�ۻ�Ho�Z�\Y['�U(g���R(��j����7��������I4Y�bv+�.��r���=A�w�V3s3��Y`ο��`p1�W	�'V�����ĖZ���21+2����&]�V�*Bl����=���U0J�
+J�R����GOs�5�u��D�L�i���
�تP3(V)R�jhxT�[QO�	�HA�8�ٽ`OІz+5p�!l%F��T��v����V�f`_6Z�%Eެ٪���s�+y��D��g�����(!,5��Cf�W~5������)��Z�%�b�m�����~��?�@��EHS�<|E-Bҹ+᫕5�c]�����_������K_�җ���/}���]�����}��/�������u����O����0gYT')GX��]���E�7���Ǿ���355*�
+��
+��.�����O�={�T�'(r?!�U��X!�=�{#X�*).,))B~U&R*��0�����X����"4!����5���WMD��҈��ik[E�Z���B����������yE������܇'��c�#�h�R#X��5$r/�(+7*�FcuUUMuM]Llnjn���xjiikE~e6555"�b��q��B�؈�CsKkkE�Ђ,�,X����9vl�_X\���D≨�Rd�b|F��x����h<!BP���tp��PkR���*����zR�QXË�A)a�וH�L��Qm�.�yי\K	_Ɉ)��.�|���D�P����br�K}M4�G�XR�*�&x�j}���^�I�����i+ᶺu��ᝃ�යu��^l%�V[�c[�L�Vo�i���Tx��+>R�RD1��ϟ}���g"p%�ս��n߻yx���[�n��j7Mo�_IFb��Z��}�V`e�!lE�9�$i�	L[����b�xX�y�j���+\MM�Q���V����UJ|q\�%�U
+�V��J�UA�T|t �`�Q��BCpm����W�������_��/���s��0m��V.��ᆴ�U`+(	N�|�1r��U�)��&ÕleǞ�0��0p5�n�>iuLڨ'�b+8U�쪞]���!��
$U�{ʩ��'���;�l��c�&f����2�������5A,��J��_�e���I��XP!\�
+!*�qa"K����>�)����,
+_!�Z]c�� ������7����/}�K_�җ���E������"��{��+,����xgttX�`a
+�z�)��A��haWoWo_w��D�LE%%EE��*.//*-;���s���99`��u�ĩ�OO�:��3h����w� �=���DXl0�a���`��(���-XR���	[H���b�M��N��RId��۩HHB!r�,BX �WE����`������tt6��,C�������Pa��A���~E��K�������ji��Ž	[�
���U�E���0�������D�؏pҍ�gf�p�X
+.A�,��
+"Xp@�hۓki
+w8�Im��p4. U,(��r\f͍���h�BG��
+p�J�6��T�W�^8,c����"��(�ND��ꚻGer��P�L������yW�݈����g`+dIy�H8O$W�)H[m^��i��k;{趂�����՝�mu�����ql�DS���H[�~-�_f���|�#�\)؊W/^)�����}����>������}������:�s��p�ƭ=Eou�V[��}9�/���T�@���=8Lp�c+�d�I�R��9awR��9���J�	B�jΏz�����#���?�%b��#R"���*(��D��M���Ǟ�0+��"mE%;���Pt��~i.�8�i+�$8
+/J[9�6;M���$A�V�[Pe�jڪ�F
+�z+�	�������Vv���	Z]�\��+N�	x����u�鴴�7*��䜗 ��F��Xi��ϊ���ۏ���y�Y���Bȣer�ЭL!$�OAX~MK�W~�_�+ *��8�0^��(���6+�+a�>Ů�����c�R%<�y���Ϟ���ܽ���/}�K_�җ����ww}�˿|���������?��Ξ�ѱ��Q:�S\��TS$�׈��Q���A�`�TTV��^��vJ+y�gΟ���O?�+��)a�>}����‚UP����ʠEXf�,��4���k*k�EXY��+���*��"l�Ʈ�[��J���݂s	�_�
+��:H�e��j����܇т��C�
+[�8�"X�C��h��6��74�k�#/3ˌ�RHa�W��"��k�G�wK�+E��uB�W치L�B��y�������������-X0����V XXZ��$Ȃ����B��_ё8��y[PK�"��LTX�'E�kP����$yGK��p��Qߍ�2sS��[�����3.�
a��ߴ�ɱ�o�w��+z�"1�ܬ�6�1'ܹ���%���|����7o^�	�����$x������������xI|��_�R�V߲٘�+m�
+��^<yF=�'8O����xx������Ս�����mn�or�U|e5���V�%�V��s~ae�:�Ǥdž�r�'��+�a+5pbv0\y|�ojfjfnz60�G���<��Ë�H0��0P1;��H��*��̕J��VQΊ��+�Z�ފ���bH&���(m�D�ja�/���l��V�?wNB�k�Q�>:J��	p[a�[UZ
j��
+���]X���y��F�m��胞 `�I4\�m��`���.�N�ɴ6�<.P:_6�Ü-)Z?Ly��v�ge�_e1L�Y}C�J�n�E�I�_M��+�?�Z�fq! ,)%O!D~��iXP�K�jOa%�d�DKƮ :����/_�-¿�ۿ���ї���/}�K_���;����7v��>��w�{�؇}TTVƎ	^q����)���rG"�~au��w���Y�;j��K��
+��.���啔����9�O�b�'sr`�֙3gΝ;��{����.��+,nq��1��� BaU��(� B.r'�{s�������+��R�Xł�����ήV�W��}�}���=���D��
+��a�2��b��tt5[,���2TU�a!Z�ˍȯ�B�`�A��ȯ�m��V�Z,����f�7��,B�`5�L�d����wtu�A�����fs�#xD83�`�R(���D,�U`))��B�#X��~ZK�"��'�����Ҫ07���h�������pVXN?G���*a���b�p:��gER�W���یj�WT9G[�f�r�ӭ\�X���7�	[m_%%;w[]���>����Α�1m������x��Z�Q�Vi�JeV��n<p�.wI����s���c�	�x�.b��;���N=�����[W��7����-'�1��/���0L�����\����D���Vv�	��ڝd�BlE�+�`����������
+,��=�pW��'�lv��NHJIU�	+>C��+�V+�c�ߝ��5�m]��/b���CI0�4`O005��N͹!�#J�N7��l��	����&�i� b+���������VT�Fl�=��q��7\���%��qS��+��N��,�ʣaV�����"��"�o�Hi�@p�L�}7�Ž�'��К۵�+����>y�f@��w �Fz��Be~5�L!\K�Eί���{Ǯ$�?�38ШF؊���ӛ>�!��\C�N������]�/�o������/}�K_�җ����ww}�/�D���������3:nE���jT1�#׹�����>���Z܇�z��-�*�ͻ�_TTZ^q)/�̹s'�B�	�N�:u��i��:s�4X�.º������bDXb�,3+*�
�Օ5�_q�U�,ؚ������
f3R,��˲4bK(�H�e�;F����
+B�wc��W�W�,Haq��ux|bpt,X}��=�mm
��58���h(5 ���XUUSWW�P�-B��������v�a�Ђ��
M�lCVC�Ʉ�M��4���������҄��p�=�)D蟧"LD5���U�"�j�¯oB0F$���QR�*����fKi��ʙ����R8*���4hH�$��E��UQG�x:��[��bE�ʒע{�k@4�a˯���yA�E����`��+W��j��U(	�$�k4I�V
+��wxGq[�c+���Ջ/����|���~������2W�\�a����SOW��z��V0O��M�	��j����������۠�lE=�{�{����F�L�����a�6T9������p��HA魴=���i�[����ZX/�"K�R�8�`� ���@�[ɒ+ά�S�Zhb�� ��#�*ٓ��TH\X��/�q����d~�4��<D�<��[퓐����M��0�@ɮ���Yi�հB�p��8%�[�0A�ۜ�v܅J��I�nN����p;�+Y��6P/mt �=>�Ґ��S-)�J��<�m�C�jR�]e�_y��`�:�P;�PæҚ��3ߢ��J��$~�� ,��
+��+��B���W|
+��l�//'Sq�_��}�$�t��
+��U%IK�+��s����[�ٿ���D��G_�җ���/}�K_��������o���Ǐ�w�xi��'���Fkt�X0�
+g����`�PEXl�w`��W�"������Q��PT�����yy��Ee`�:u�̧9 r'���ɓX!T#Xl��˃!",�`U�"���ܫ����k8�R�AX�#Xf��2�S��WB��AHa�6��&RX���Ζ�b�P�`aU3��Qjr���u�,X܂�die��G��RVqaeMuM}]]C��,X�lik���!�ji2�!�enn��{#��_��׳/����!���~�`��AKD�,C�X�i
+�P`a�JFXb
+�:;rg_FT�"�P!~k/��K<I�g�p4RI�)�Ʃ��65�A��h<K�*�=ՠ'��(d���2 ��0�H���3x��*�OU��L�ߺ�yK���lu�:4�mu������޺

AL[=���c��0I�d����$�������Y}��Z}3�z
z+�
+�z��	
+1��?�y��a@O���û��������+;���6/������2X�Che�_��X>;癚�){���&mv�[�9���’��a�;�0O�mw�����M{� p53z+p���B8O0���D�m��hb��
+�L��ފ$W��J-	r{rM`+�Zŗ�j�*�`�mvG`�%;=;�b��V�I|�N7/	N��
+�Vc[��$A�RȕR��j�J��$���
B�ʉ��I�[�\J�ʍ#Q�H�7����fbW�q4�P0�)��w��֖�)Xq6e�J|9��Q(���Y9�^I0ʫ�\��J�@v��|�\���l�v�_���ӦB��,MPU`E�?��co��r|,�a�+XD{�	S�r�7-�O� k����/ؿ��7����/}�K_�җ����wt����G��������;�D^)��"r�s�G�x
+kD�X�P$�����ED�����
+��.\��NˌƼ‚�3�sN�����??q��O�8q
+SX�N��Y�gΜ?��Eł�Ϯ^RRTV��sc���LX�!�%fB��ޔ�p�oBx��RA,۩on1�� ���,\��h���&�‚V���,X�C�@�F�E8���:l�)��Z�� ��AvEsk�	"X
�55���*/5TTT�U�U�5u�zSS#T[�؂��
SX-0��]���E�jɂe2)��ήΞ��~�`�C;��x�|����y���B0��^)���m?��mM(�R�p؞�;J
+e�����Bj�..ў��[���hLԣii�t�\2*"Oj�*
��Ci**S�xz�/��Q�-k�Wĸ4,���bqMiQܸ���[E����ۘ�’ b��R�
+K��nߕJ��=��V�?��:I���_�|�B��^�c��m�S����bw���V�?y���}v��'x�=��7��]����y����#�V+�ʾ��_���f��X��������VV����m`e�:�6����	:&�\o��M�
�	�ۜ�/��6�^�	[��;�Ǒm���Zb���l�$�S�*�"�U����p[-c�J!W��b����ZX�K��Z����N��x�!�j�J����:U%�0#�؊g����L�[
c�j|X�[��{��	��*ف\M�&�V�\i��j
pJ�R5�{�咠䶚J�*�'�2=�_��
+ȕ[:Ui����}�[��?���g�&�䜕]��l%5
���2�+)篔VZ�P�����i�-�E�5@~�
+��{��#�h��Z!�,ȯV`� ۇ	�F�* ��k멍�k׮���K_�җ���/}��]_�?������o�kF'���(���O��/tX�4	kD�H����1�"� V��PkGgM}}QII~aA~a��K���`��ܜ3gT�+����A��"�ͅ)��y�
+
+�
+�_��a���XY^UUQYe�������5hq�"w�c������Uv	��<���[��"��PB�b�5�a'�"��!�������8oZE
+k$6ã�C�����]<�UWg��*7�y�VuU
"��Bs+�`5���-P!lljjl�{-Taa}#����j���o�
��Y���Rka~)�>v��PK;��&������#��V0�RU�-?�}�"R=	X$C!����h�]*��Eia��������O1e_z0�~L|�N�M���-��(��Ώ����\�	�6.om��jJ��m�/��M���$x��������%�
+���󧘶��Ջ�/^�z���-�z}��7[���WJOWJO�����ɃG��G��nݾ~px��ͫ׮_��ۺ���u%���LAO�b��'���3st���	:&!Fe�� ������A,���y�ʅ���s{�=�i����q� �C�a���`�U\�R��\�e]��	[��@�%i����[!@f�AfűU$��,���Ű!8�_��[��՜�7���3���h������՘uddu����V�&
+�D�s�
*�
+YV�t�<A�
+:ݴA�Jk�J3�O��J�Vx:-���L��~ZC���2 gM�ȓWj�J=6᳒�YZ��Q�{~.��h��J���/��B�</Eʲ,�G�_�+)�W
+����tK
+,5���W<�5+)���B�{�{2I�ALa�
+��V�v�!łH-v	W�k��w��9��˿�+�/}�K_�җ���/}�[�O��O�Z��}���������t������[���]B�x
+���]������������Z,�ʪ������/��+�
+
+Μ;G"��O��!�ٙ�Ϟ�A�$r�˿TP�_T���Rce	L񫬨�2�
+aeo����-�����Bh�X�Z��N.�F�܅ŝ�Z�⎃A�N�֮���^1�"X}(rb/���`����-X#���#��jkk4���� ����CEiyyiE���XYUU][Skjhhj4575�4SK��V������dn���`�5ԣ�*��f����������g`��P�y����+�,��A�p\�$S��Wk
+���������V,��El�p*Axh��Q�@9��h�Qr��Q,��R���Dr�JEX
+��KW�iHTT͊e��h�"�'�x�[�)-�Z��˸uY`+J[�_�ۿ!�V�7n���6��/�V�Ĵ��$����z������Bl�Z���h�V��~,N�--p��$f#�dwG�
+z���z��������GV������	�Z��[n��V��7T�<F�=A'��q�m�jk�f�����&'�DOЇ�jz6��/��*�8�B1{���(�I�.�Cx�Q�)�+^D�զ�ط�x����D2ƣV��0���>�Ğb+?*�g����θ��	z]�(��l5<<�6��U�	���M,��v�kq+��8`+�����8�&mN�
G
+ڑ�8`�6 O��Xq~�	by�咠¬d����}��}2�H�n�9(%��:! /%ae˘9��ׂ[���W2�ʂ�ڮ��"a�kJX�Tu��7�Ma�[�i"!(��_i+���Ks���
+a0O��[4��d�|
+�*e���J��'��;��q��EB�qe���{��|��/}�K_�җ���N�>�����/�RUm�ʯ�(�����(%�(E Kչ�Ƚo���"Xu&S1",�/,<��[\Vξ<w���3gN��|�駟��+�$"$��ٳg.\8w��a�*(.),)-b��V寪kiaU=
"DV�Z,�)�\��#1��+3Ů�&O!lU�X�E�i���`�Ƚ�4�"��	GH�1@X��܂���Z��#XeFc){"e8������D�͖6�W@��_˲��jjb!,Ja��Y���0����������9']������R"Xh����_�h۹KA�� �Ŷ�"�
+��5J6)OOXE$�������i�3Z�jˀNj؉S�X��i���
I��Kܠr�J�J�\�[c��y\N��ol\�ry�Vۻ��R'	�A��:�i+�Zݽ��.b��>Gl��J�O�x���Z��9Z�_��U��&a���-[�J�@������ϸ���c�'xx��n�Ϟ���}��6[��[��=����p��Vvh����	�w#�h� ��&�[!�r�����dW����,��g�s��y�VA���=E��
+z�P�Zr%$W`��v��3Il�X,�t�P1�U&	#�K�Ő~iο83���g�7�W��&=��
+%A�$H%A�	b�j��V�sR���j
�_6\�Ah%�b��EO�[�[�<A�'hô��W^�;�9�\�s8��+ySsN�X��i�J%PP&��y�n�Z�,�A���ܞq�#J)���eەב-�����R���`�*�&	^M�eZ�)囥V�,X<�5�����T`��_a�5�1ʖX��m"��W�%TX��%W)�����q����_��ͣ/}�K_�җ����wq�1F�����;��������'^�kL��`(!�܅kt@˯��z8����kn������JJ.������
+
+N�=s�ԩOO����O�H�O�-B�`]�p��ż�K��y�*()E�����"X���A�8��WX$4՚@�^KBN��&�Y�Z�?؂Dv�V��	[�^5Yښa�� B�`����'V�����a�@"���l��ii�0�Xj*kk
܂UQ���G���M���XH� �����UKKc3 ,���7P
+����utttw����IQ���� B���EñD,X�B��S��jm"X�b�4$�%���B�v�%�8�ƣ�T�;�l�Ŵ#�#�l�HOa��b��*�G�\��Zl��V����]Ǩ����mupx����ݿ�'	j�VX�
A��^�~���#��WӱՏpӒ+[�y������`+vפ�Rz���z��흽��;\o����$#�e��Ao5KV�ae�a$���j\r[��`�U�ʎ���I'�[�f�S�ӳ���y��X\\��۠ID�+1�/� 
+��SI����8@�OĴ�:Ϩ��
+�V�c��D��*�Oj~)4��i���,(��S[����q��>����`� w[���ld����R=�O��f�0�5��+�
+��ը�bv,	N�''Ԓ 2)#�Q+���+�+�j�V5d�R:�Y�Y����@�Tϕ¯�D�l�,7?�����A�W(߅����W�4��!rOgV���eu���U��i5���f�Ha��)�Y+��K�X!��%�q��>�7��p�A�ve"XI�b�Πh�D����DO7���]�gz�P_�җ���/}�K_�����������X][�j|bd\�+dY\�5�R�ѱA�E8L-‘��!�"$����U�`*.-�/,,(*<�{���PB�aa���S9'rT�E�������r��/��Ƚ��,��0���X�BT`A
+��4�����aS��p��X��� &�j!�j�:a�,�X��"������������?�;D"����1�E(�� �5�.,�2�VIEE����j1�<W͖�V�Wm"�E��ٷ���U������!���o�����g/;�ьNج�ˍ�9����|,X�[���XQ�Rs��X�_Q�j�(�Li^�X��]$�^���R"R�@�b��Q�i�{lY�Ui>��ģ��[Y�X,������[�/��^i��׮k�V�nݾux��$H�<��*ٟ}���s�V�_�B%���߼zͣVi+�VɛL��Z��|%z���� �/��\�'x��[�a� �V���Iq���Vrm���heϓ��?�`����V.���
+VV�l5a�v������q��z��V��f��f����E0\AO0J0a�`�W��"��rخ��謦sf�A+�ъC�J�c�P8ǖ±� ��[�03��7��΀K�$�:�$ȱ�W�Ç!��y=�o��>�W��>�G
+rl�!���� p�j�=A
��=N�<jCpR�UJ��O;:��oAr�O�Ln��J�*����b������ߒ���l
+,�[ꄊ�*�L��i�w�ey�*�]Yf",�ŝ��\��!�9�B��E��ۻWvvC�g�҆^%W���	)��k-���z���㝝e��җ���/}�K_���;����v���Ϳ!�����d=0��� ��c�:�!4��5,�a����v��7�-���EE�������K�ϝ=��C��,X���
+-X�"��_@-¢��bDX�h�2TUk4�
+Z�
�l�&��,B�ª���Es�v(|��J�M ,�W�mݽ�=4�p���³�"�	�EHEB���k�g`�����������d���%�;Y�ˍcUUUmMmC=�qaKK+� l�:���&�EhV*�u&�0Vk{GgwOO?;:�'ݾ)��ܬ?�_XZ�`���+"�"j�
+��T77W��DaP�Q�0�D:ʌcE3BP1��9/JdAO�H*������#oAF^�L�y�	��§�#��Jmnm���j'	���:�n޺}��V��ܽ}��5m����Ǩd���gO�}��N$l����ׯ_J�
+uU�
��~[6r%��=Ai��i=���!ݽ����V��@ou}{����Սˈ���=�/q+���A�;6g��ءsM�0A�)L[�`� `+��	B��	:'=����7=73���<���a�bh�z�ax{D� Q��y�
+7H[	C{�<Wj�
+�?)�	El���4�p)]�I�J�j�=���oz�%z�����Xy��1���H�>4"7�Y��cO���
+��$��i+���a��i+���4RPXٕ���47���&�� �l��d'��P9�7�������<G�(��W�]��]BO� B�7���{��J����3�W�gL愂_i�<���,?��T~�Bn�b���X�Cl[��a���͇��s�-�.�Y���V��:;�*F,�WT�E�`�qp���߿~C��G_�җ���/}�K_��:��l�?~��յ#�"r5��+�����
��+DH),h�
�uv���������ŋ%�l;w��)1��S�W��r�_��K���ЂU�,cEe5��5��Z
ª�U',X(r���+e�
+!�Um;R,e���EX����M,��u�v*-±an���,h���
u���vu5��645W�����)�e�A�FceuUu]-E�� BT`����b�Y�*��Q,�V2��ή���AD8:a�9�܂E�E+���#��&��_a�0J"�h���,��b٫|6�H?3�/eP	�gL�-��'�,
��irY��VL��8�l��d��������{0I��>���߼v�`��-�	�9�}����mŕ��I�
+�R�V�!m%|�_fb+5j���Ɂ�/3W�^+��jWBo�{�7n���sgo������m�C��jy%K#���p`z����a���������B�����	���pql"w/��Ny}3��9�	�<���|���0�񍁆��J<!a+��q]��6�.�Vk����G�ɨ�$�$�p�����[�f��A�N%A�@^��KJ�	���96�i��	HLA�j�����]V}ZÕ���\!�RWN4\9Ao�P�	�y��g��J���x�J�X)UA��d0+�1����Ƹ�֞�\[F[P��R���]Mdi0�$�&3�W߬�z���:�j�����B���R�mRPV�+��7�SX�-�y�E8k�*��H$����~������ ������ZY�'!��H�A����:���B"q�}�ݾs�������_>�җ���/}�K_�z�֟�韲����;������?�0_)B�kL5��D���P)f�Z��P!�Ӿ�fKkEeU~QQaqqnޥK���ʼ�BD���W������^�x�ҥ���",,,().,)-��(�A�U�����U}CM�	,�&�`��+5|��ʬ*�D�"����E��ڮ��;�"d�np�E�p@����Cc�#c}0�p���"X���,3K�`
U r����7����!m#[�ۨBH-�Fj���B�`ՙL
hw7�Ƚ�������,�h��p�ܓ4�p.X.� �x"����S��LZK�Wk���KM�/zD�)�&�:�YE�cQ�$!)u'[0*c�Dz�0��h"ۍK_���<NQ�V�[�$�k7�QI�����Cr[�:̜$�K������ϟ=G�Ջ��zCi�W<m��/�T��ʩ~�?9��"Wo~�Vy�J�'�Z��[}��	>x�ٽ���>xx���[w��ٿy�w��������[Wv�7�V�7�WS����*<���_$��wj����`ew���[�YU`E%A�Y!mz+���@o����^�gJ�Q�>�#yO0�Ca�	��ˢ*�T
W+B�.2Wp�s1a��u�Tby-�,�V�d���`� (كr[A��V����}�x^�w�]VN+;|���\}htp&	r\�K�C�	�En+���A#��iE1��V�1!f��b�I�;.7+e���и@Xi�lY��2�Q�V{��d��P�=^��Kzm�]�bZ~E#����w��i赧7
+v֑�´ǡQc�U�$j~"b���;�E�囅-�E(!,�,
"�"X��b�|0a����g_���O�6���&��:m2��W�Wo�D�����U�E�sU��G_�җ���/}�K_�����;~���{���l�j),9�%*�įF�H�6jr�;��z���]['X��JJ
+��
+K���斔������=��?�"!!���O�9��9)���WP�_��HTˡB"�J�"D��	,�
��FBXMȯ̰57+���f^�P�
+K�4��X��]D��a�vuS��U��"rđa0�Pc���ᮾ�����ֶ������`�*0�e��4VB���������l�� F��Z�Y���4,��C�������::�z{�0�5�,����A�����F��rBX��ZWZ�~�����˦���{R�pP,�aVr�J&H*�R�I�ǫ��JQ����x���G�+�]�VlXM�0�mR�_�FJv^$�N�{�%��i�G�d��c+L[�|��V��RK��H�J�+�UD�~%�4��Tz�ϞcO��3.f���G��>xt�ރC�V��������������z�8魀���g����Y/��&��dw�Z��!,*	���)p�+��3��N��'����\`�X����Rx�U8o!vd���Õ80��ȯV����oN��
+J���L��� ����ٽ�� )���a�
+[���� ����
+�U/��^�WR�
+�B�
+>'G'�*�J�'�wL�M*	�a��r% ����N�:��ʩ5�gmfd�$ݺ�BV�o�W�7���J/f`4��8m���Ʒ!,���"T3ii�B�F�F��r�J�"�K�WP$���jF �9M�Pa�fX$TE�d�
+,�ߌ�Xb���G_�������X$� V\�����W	a{Cr��1E��[K��o�a�}����K_�җ���/}���Z���N�~�����?��_��;aw ��j��(��P¡::�EB?�?<��9����7�������KK/��]�ϯ0V���ٓ�N��ɡ�Ia��9s"X�Ν�p��ŋ��م��KJ
+��e(5V����P]-šZa�D�x��H���� �3GX0���bB�K(@ߚ�ڛ�:�E�������V��0��т5��"T;�x"X�}��35���h(�(/�(/3U��5�5u�jn2�j���[��	a�s��&�ªm���,v�f(�wtu��}xll�f��a�
+������(�A�_�#E�_�0��!��V��8B$�EO�̘S<_���4��I������\>���o��B7{t���߼�}ygw�*w[�c�}�V�$x����H�~�b�G�>&�U&��1�/_c�J����r1����i����DO�K�	�l�R�	�y��'�����ފ=����l_���&l������+�
+{�B��V�'��ʅVv���tY�N��`� W���=u� �م0OP�|3S��)�V"m5�Z�lU�P8#��Gbvl�������
��<��m�y�*��a��_��/΀�j~z��,��$H�	[�Q�6����jbxd|p�}���k}����ت�W�����
+������0�[��qlE�+�CO��r���.�RCP���\R103m��D�|��@ٚ�veueVַ�-W���,^,�>�ؕ,��*�+��ͮmf��7�+�ʯ#�O�N���.�)�.��ǟ>��d��.,�W�š��"�
+!��_
+,�C�D(�`;_��?��O��݀+d����ԙ���%��<��sfq�����փǏٿ�?���?���/}�K_�җ���.����c|���c�%%�6�脍���udl�z���}���GFT�;	Q�E¾�����:ScqiIAqQaiɅK�K�J�+�_�x��i�`�8���)���P��,E�.��+,�/�A���h��,������U�� ��`��),�"D�įZaY��+8m0s������V�P���"X�}��C=쨖=��!zqaY�į���(DH,a��a���=���r�`���kkj����0���
Z�|!���fea���a�75������`uv���W��D��n��py<��in�Z
+� B_�m�B�SX�<��,�_���J#?�Z���x${�)��L�Z�^}9[yp9��"�JÎ@[�x�=�-bv�[�ڸ�}e��6W��P�V�o޺ypx�����L[ݿͱգ��(m����O>{n�'����D�Ul��՗Y��^iF
+~���
+�z�m� �!pEV���oݾ{��v�o��]��su�V�络L��_���ʾ�8 +���73�eG�`e�9]vDŽ��Vr��&�	:1�s�����)���=A�>-,�����V�D1;;�'VyU0)g�R��ZY�6W@�i�x���[�/��"l�Œ����.���i+X�	[��W�V������UAU̎�XG0p��\PO��leuBO���H���V��(��E�*�P92P�Tf�e�=^�z�4VGJ׭.ί���t�"X�pu5c
+��z��+�;n�Ia���+�7 ,���]�Z�OJg�����Bܙ����&e֔�b�Y����(�۴~[�sh.Eb�嵽������믿��O�6���1ŕ�Jr*�IDX���$̻&'�x+�SX[����y��/}�K_�җ���.���v����o����o������ud�Wx�A,밬sW��c���8Bl�Q����4�X*��
+K��/\�T^Y���O�>��4�,Xg���6�`��B+#X�E����ee�b!F���UU]Cu}CU}}M���d"�{��W�b����X*�j��7�plE"w�W&��*���w�A�܂�
,�W�"U#X#����m"X#=d���hji�k��2#X�K*��`!X�j��M��"4�Z����f�"a��bA�{K�h�5@�P���^�pGwwO?���B�5�������ɂ��8ґ,X8�m]U�op�ED�Y
+�G�����l�c�l�K�.A�x�"�2�W�D$�F�9�e�t-�/�i4��ev8��i���;�׶w��^�%�����ux@�o�;�I�w�$�Gb� ��>+��g_�����/_���+����D�ނ��\��/%��+�Vop���_�x���?Q�	~v���{he�u������ܿz���M�[]fO�Ʋ�{4�V�`d~)4X��
x�'HVv��V��l�1+�q+'WV�&l f�;]�
��=A�oƇz��?{���������G�A)S��0R0�pŷ���r�"fW�"���ۉ��+���Rx~�V��¬a���S�^ߴNj�
+��Ǧb+���V4L��Հ¬T`%a+4\
���!��}���G&@oű'W\�.PX�S��\��U�̡�NA���L��䨕�v�IQeu�i�5
ae\����f']�v����R����VU�'�{��:�ܮ�#��V��ݧu�{剄N%�Z�%l�u��� ���"wHa�
+,��}�}l���7������������/_�f��X"!Z� �Br%&@�*��_�Z[]� ��Jm^�z�����"ԗ���/}�K_���;�����?�������� �+��\Q���B8<��!�@�+�
�
�uu՛L������ �UTVF�s(�u��ǔ��"<{�<F�.�b�0�������������h,��4�ª&Ve]]�*ba���"�'V��^��[-�D��{!,atV�:��"Xlk��i�����!����*"wDX�H�ƠE�;�#X���fsMC�����VT�F������VSc��ٌRX���v�X$‚!�+����DSن��K����:\.7�`����;������'
�ZMmЎ̯(��LmH�D�fJ{�["Ox��+-K�+@R�5I�:
+F�}⊫��\/�z�D�ԭo��a����R�
+���H�~����?�+�V[��S%m�B���(>����G5��̕\�|���z�/>{Jz���?z��ܺ}���������߼�w��U�V���b��	��Z������y|Sn/���d�<�Z���]��/`���N�[��֤n���M�N��gf[�[��}1��U$�$�8%�*ȱUB�\ii�UŅ�*��a�*���;Q��p��V���%�J��X��NOz����t��	�s�ꀨ�q� ~j
s%;���Y��!�aڊ�=A�[��z+
�r*VvN����C"'��R�f�8�#ی�4
���p∉�$�:Q�*�K%v�~u4��(6x��H_j��S)���ň�~Kry��.���
+�YY^�nye�(+� y�),y�dqWN�,�ܧP�N����g��į٧���������_�����?}�ӟ���}�1G�{b9��ߑ�$��sOa�b���I%��b���J�6>x������Ǐ���/}�K_�җ�ޡ���N�������?������''G�C�J	b�K),R`�q;���bP��78��?`nm3TU�����]*V��gsN�>y�
"�-BDX�Ξe۹�\���`��������Pl0��V����Um��Lp
+z�F�_5*S���-Xf2+j�B2b5a�*�&���Ki
+�@� �܇F�Q- ,l�X5"w�������~E���U�,c	��*ʌ�"�������D�į�:�[��-�Ehij17��
�h���
���ȝ���;;{��(�e��]��/�`-@V|�[�T���ZjgT��\!\߼,"X��������@�9R�O�TĴL|IMUŖl�Jމ�{�7ѐ+����
+�
+�������&�AɎ�
+�V���u�&L�����[w�QC����i��m�D��^�T���7Ȭ�!�0(mI�G?�:U�����pz�W��=��V����C�[!�:�{������]?`Og{�����뗯�6�����h�Ide����{�g�[��
+PN\ـPa��:6aW$WH���ns�HA�W�	�`� ��)pűUz� �b�H��xO��X{y�o�5%jŝ��Y�V(a�S�j1�����s~pvͰ�~,	����^*	R�j�� r�yxlh�Θ��*����4O3W
+��ٯ9�D��0b��	;��q`+�Ý���L��������y9�d2�r�Ȝ�-I)����\��Օ���"Tڂ�������r��-S)�6N��f�ޞ�zۤ��
+���f��Rg3�PHQ$B�_�>���9�_M�),��D�9�;��ۋ��7xe}��r2���g���?��O������0��q����C[�u�
+�+�ֱJ#;�6x[|N7�����k��}�K_�җ���/}����~�ޱc��裳�/�]n�\!˲�(R�1i�(pF���0C�"�"!���VQQQiIn^^aIiY��|n.X�N�||��'�"<A+�4X�O�={67Z��.�� B.r/+/6�
ƲJί@�E-B�`�V��+�`�8Ba5��Js��������tNSk+���!�e�Z�(r�Tƈ��
+���� B�`u��w�*�J�`U�T��ʩEXY]
�������fa�jmmo���[�_5[ZaA��D�
�
��P�N�����`
�����8F�����
".*��X!$���,Mp��+(��mpg�G�jb�C'���
+���~�r$��I��Z�(���P.̭�˔��`YZ�%ӳ8~��
v��(ٯ^����%At[� ��m[��9�z���x���V�A��Ԅ�_h7�eeJ��[a���7�����?���V��Gu��C�8Io���ۻ׶�wAo��z��;��������{>7��w��acb�RwWfVWu�F��B#���̎4��?Ҫ�dzC���=ὥ���$�2���Tu������{ν�`V��KW�=qq	�,���O�~��������B$)��
�*�Vv&�`��G�+\R[J��
+�������`,��%�	���䊝hc�jbt{�3㓳�������\��A�Y�3n~>��7�ǟ�}9��Q�J���[
��q����/p[��
+$0��K��N'%����L؝�(a+Ir�h��+'�Ttz5����	*Vv?)�5�
+�
+�JE���-�R1��v�`l;{��*X%_�����J��W�@VT.�O�ߘ\R�H�8¨ӊ�Sq��;�a%�j��RPS'��+5v�n�3(Kݩ`ȃX�RX�j
+�\��̂�c�3K+0sae���Wo(�u��á�1�Gl���<e��\��!����Y�.�^^^�8q�������G_�җ���/}�K_?���_��]����صsǮ]���?vy}l�}�d�G:wQ$�B�`�A_�"�;���<�h��mvE�J��3����r�33��UT������Aj�޻w7�LK��Oc�:x���t�`ee��d��e���Ƚ����*�BX�vYuu9Ue�e��+��B�֚D�����5IJp�U�`���Kj�KD�~?|!�]��`h���76����,�`���� �b>�����>+5��j@�ՠ��k���nY��`Mu%�k
�:�`Y��Z���mv���#Xq��'F�&g�aQ��ȕ�`��+�E8=7/1+�;MK�=+͒�JA^�\�PS�-囩mA
+Yin�~C�c�������������$���ܙs����$A(	^��u��+<m�6/	B��ޭ��`��}1IP�Vl�
�d�Ъ׸�	\�H�z��V
+�B�՝��Dlu}�2�<wa��9����8�r|��i�W��qj�@���y�G��z���=�مz�X0�a�<�=
+�����>0\E������8��ƻ�]���zٙ� `��������1\�O�M�<A�A9;9�SgypzF��f9ŚSu=$c�/A���F&������F�
v��ۊ�V�h��E}����(Qlǒ y�yI��ނ=A����3�+i�`�]�+xj��'�}!7���>��|
+��K�U�N��:��x�T
��3��!cW��U)mA_�m��7���~� ���	�+�Wq)m%�G�B�룱���w3��Y�_%�CE�H�Ҵ���b��w$Wt��,�,A-i!�.h������,�_X�8q���m]���7�������o���2���<{�S���Qsp�@�:�k���#�<ݗV֮]�������.H_�җ���/}�K_?��{���
��cLJ��՞}�ٹ%�\^�]�Ј%��b"�[�%#�`Qz,Xp2�lhl�6r��E��s���������G��ݿϾ}��}Ϟ��ڗ����<��СCǎ��E��9Y�y���م��*.-~UN,�W�‚ �����Z�4�������WFS�	]X�!gVxPSϧ��7�
4����(D��į�xD�N7�60y�E��b��nojk�4�P���������8��0�� ������t^e��3B��d�aCB��h2��V
��b�b���כ-Vks3�`�=�@(�F;�zh�����8Y��)G���!,v,�WJkqyUFU�Y�DJ0%�� N3Z<��)�	8�(�=W	�J�����,�;+��X<s�ԙ�g���yt[qlu�VWx�Ju[�R�V )�ql��|�(ٓ�V�5�*���%\!�����<A����z���+��s�O�9�~����[�/-O��jtbjxt|px惝X��q{8L0� p��� m��(p=A_0��Q!f�uv�A��O��~��6��
+WC� U=J�x�jf�U�T��jZ�,1CJ������k[��3<:i�avwƐ\
����ʏHҺ#��p$�����^ݵ���CfQ+[�(j������$�b� �+;��\D�Aj���a����i�`���
��G@)���N���!��R�~`7P!Q�N�&um0�
�
+�N+��i+��c����Ի���	�ޑ�zGL+A�.˲B��;�V�,/*F��²�ҕ ł.aw_g/Q��n��=2>;���qzaquvn�ŋW������e��0�a�k^�W r�_�჊���+���ZY=N-����� }�K_�җ���/}��֡�w����Ν�W���*�����<�����\���;��|.�`��)ak���^�`�e�d9v,��(#+{��C{��߽7���"TDX{��u� ������{zvNfn^vAX�!�E
+���
+�`a��-�5��� L!��AA�:��2rx�#��¯̂_�!Z�Z�[��m`�갵��1�,�`�;�����Z��d0���*.�A����ŅŅE�%�eģjx�����"�m�7Q�Uk4V���,���J�`a��dj�VSkk����(.�?,e�����������;ߙ_ �����`/��j}eu}y���¢bhx*EtJ!Tbz�&j%�*)a�AR){���@����
+ĭN�<�������:�<�7/l]��Bl�)	���֝{w�=�r�%���<�I�Ϟ?y�%A�ZIi��UJx��J�|���+�'��n�ފ�Aou����#�Qo��qrem��p�/.��ə9��O��j��q�z�b4L#Iae����
+��F�Dl�B���[Żc]���$���`�����#8OpD�ف;M�NL�!���R9�������,Y��$�؊}���)��F�}��I��#}0I�����"lEwM�����{!�p�������V��R��m�vP`ٸኽd!�b����8�����`�l�Uz�a�f����f�'��D1���'�V�w��'�+�M)x*�J�U	�	 럕���@m��"$O�9��wM�P��Dž)+�Y)�r�0U�J����8�Q(��]�K�_�"��k��5Kt	٣��7����^�����7N�?1:>y��������~��w�e�#�e� ��4o���:
+w�%d/�ł������"{�_[]������җ���/}�K_��׏e�ٳ����?����c�/~�����`$F-B8���C���K��e�����hln����+(����-�?|�XVnn~Q��G���K���Gii��`/ ,�� �Ç=��QD����������ST�W\\�"��r�`�TT��B�W�8��6GX��B�K���ɃJaP���cί��*�KKkc�`�9N�`�]���-Xn�`9�-!�e����U��������y�y�*--�����‘�uu����`�����H���j*Vs�;�`�)���"wZ�B!D��G�GЂ5���f�k�D��W��"�Vր_�4S͌o�Z~2�JВ��D��5�j�6�fnz$��7N�8u��i��:}��V!mu	�V[��n)i+��ߔ�V�� �z��[�!m��+�_�H[%0�Wۑ����+�J�	>�{�����ލ[�����ՙ����8}���S+k�`e}���<�ۍ�O�ު���/�����v�*�RP��bOa�'ȶ?�V�@(��<�X�=Jbq������1�����džFǑ\M���Uqc�JLT�Vt%��繌f����i,	N��jbp(�o��(*����;��y�
+�$F��da���{."W@�l��J�W^��1W`q7�3)p=Aa+���p%��[�B�M�N���I�
+hZ29Q��)}V�5���jY�W�Q
+��'���W)!XJ��2v%ѭ���h�HD���b:��%$�=W�`��	�Rc�R�R2�T��ģBQ�
+���x}���ʡ�zE�g�X�=�����!�d9�qzeu�=��W_���շ�}��� 3��E�
���r�(f.-,,��y$W�Ǣ���ZY;~q�+����������/}�K_�җ�~D�����sǮ]?}�����/v2T��NdYJˉ",'way!��t�P����^�v��"D��
%�������:���[P�������B�ў�w���8m�}��A�
+�:�-B�B�����]X���K�
+paIe%Y�(UV,����HX�la��\��{�
+������+��26P����-Xm�m�����A���������ľgU����������8� ��E��%%���UՆZC����dj��G��"�2�K�`)
+,�UU5�5$rGVSKk��fw��^��`�A�fhxht|lbjO|D�pIm
+�E�+%����>����Pms�~vf{05�}�jɕJ��f�痖��Ol�<}RQ��Ò����[p� �!p�i��W!mu��mT��S'	>x%AH[=}�A�¬���Z	l�*�b����3[=}�{��z��JO�ʵ���^ۺ|����6��aw���S��7�/���bwt|�������*�@ڊ��0I�#��+/�+���A�h`7�+�V0O���	"����1��������$��s�
�����=O��%R�i�&c8I��������#���V]��bg�p�cw
'	F<� ����/5�H[�0A��+J+�����FD��[���R��>Qz�a�?�	��+�����#S����VJ�,�BiO�����m�IO�Rr�^�
�+
��*�6,K�c�6�w$��X��=��(fFZ��R������~�8+��?a��P;Rv�%"Ǻ�#XZ�&vF_��'�C5��c����w`htrm����ѱ�7o��w�}��o�������ã��g�g��	��>+��؇^A�X����W�����?11��җ���/}�K_��׏h�����?,v����"!�+JaIEB�_yh��"��p��E{��ns���-U������YY9yyGҏedg�B��{��k��"�"�}�?t����`�J�A�P!��.(�)�VIIaiYQYE��Vy5�*k ª%xUA,�@X��2�0��Jt	1�e�),i�E�`� �ƶ�`a���,�į|$u�9��Ĺ��fmn55Xk�L5��8�Z�E0���������������Pk�7�Ճ�
+D��`���^g���U�5��U�@��5��:n�jjnm����
C�h�����,X#c����<�@kyU���+k��7������f��[~���%)��+�oM���y�C���[�9񬂭 mu��ի��'xC�5���}��"�b��O���s[�L�Z)��՛�����
+��*Qo���O=A�[]+�����.BO�ݩ
�[�$����� �[�M��ü�o ������.��Y��� +�����|�[Bڞ`g7`�ށ�^������GƇF'FF�G!p5�Tq�$�����y�]�a�
+�"a+p[aIz���$�`��~#8�؊ݣ�. W}Qt[�#��@��
+l�a�|�)ԓI�n��qۚ�;8�jC~�Y,��.������0A�'��=>�	��(V��=��Uv�B
+_��z`�N �y��V��%�xE
A�Ĭ�� ]/�,�V��a�$c�w��o!GO�JV�+aL��Z����
+����?�F~T��6b��W���UW8�_�v����A.�B1d��X8���]^�����"{=\Y����π_}��W_}=37?E�'b�\X�B~E�"X<|�D�A(�,�2���֎o���G�� }�K_�җ���/}��֟����c׮���g����6����2�У�x���)N$t�D�SXv@�w����̜��\vy$�XnAAfN��C�h!���ˎ�WH�:x�[��fd��
+s
+��BXT",DXQYR����
+�BH�v�����2ԑSX^��\Beaw�b�26X��L�&�W�V�6�3e��"X\���q������� ¦�vsS�#X���A���**-.�;"��3�L&����j�o�~e�Y�X!����;����������-X��A��x���Akr�EpF�w�?��ʧ"�Z��������
�`Q%Pn�;a5�"R�MU����a�b0L�������[���V7/ln]Dl�)�업��ڍ[7nݾy�ޭ;��mu������$A[=!a�W��^��V��*�*!p��	>l�����<z���u����wQou�ʵ�[W�^ܺr������ʾ�~���� �465=:������+;�!��B��IRǞ�n����\yAr�!s�3�8��SO����g��o�o`���!5<:�z������i�V�����D�j��:��&��%A0���O��O��M��}|xd|ph}��=}��dG�U�R�h`��__�Vl{NND$�+�S;FP��6ߤg������r���ʼ7�-�T+{ʞ�Ĭ={����*�oRg�bI�F�mV)�R���UJ$��R,L%(���ہ)��N(3.��z�R۽b�n`2��")T��ӱ,
�Vx��&ߠSr�wjq�4e[��ŽK�XJ�� ���m#q���pL�_��j���{����/�-,���������䃇�����o���믿��,9���gf�P��y�B8#�Ȃ�SntG���	�+��D���o�wA�җ���/}�K_���_{��a�������>�կv�����:w8m2B-ta�8¢Y�I��p��emn�6�Yeg��������c�`!�س磴={���x�^�W�S��ѣ\䞙����*� ��(��$��"X܂U�������W�bx���j��ȋ���B�R�Z�d���T!�*�f�@XN�`I���؜n�`u�ؗ�,��:SyUuiEE","V~QQQiIYE��&����-�����X&3�`�Ѡ�"�"!��� B��������!"X�X������8ۇ,�񊹝�Q��$XJkzna\����h�H{Z�q�/��%�iv΅�����$x�쩳�Μ%A�$�uy�+ٯ+J�k7o]l%�V[=l���c�$����d��VD�49+e�~�$���+�	"�z���<�����Vhe߼t��թ��O�:s��ɕ��K��"+;����
+���H�K���[��ȕ:R���	��!b+�'�Gb�h�+��þ[gw_w�@O� ;5�Cl�+�	��G
+N�M�LL�LL�� ��Hߑ̊����j5136>=6652�Q�Q#Jv�"�U2+���b�Qvv��b
b�'	:=P��Dl�b+r[�Us�Z��f�z+N��'�Bl�7�����p��|!i�`�'q�����\R�'!,>IP)�)7��5Z�x
+xۮ��G�%��-��4)�������T�
G�{,1��b�b���/:�sɿ����7V�U<Y����v��Ժ�5�*9�E�~�	dE���
+�c��R�j>q�7��ؗ���܅��ᑉ����/}���T!���/�k5{�BLaAZU�!�5G�v�c-�R�""����������W��7��+k�{!}�K_�җ���/}�(���/�%��������?����������O�
+�~�q,��ܠs'E�N<�t��E�N<��d��fj��VTfdg���ede9v,'?�G�0v�{O��=��� ��+���a� Œ������@l�8�`�����VV�UW�U�Tp�e��
+!�X��H(�����IT�K� �+�l[�0�Pm
+����1�e�#�|�%�`���`�2�*kk�*+�O�
+VA^aAQIqqiIyUE�paC����h5[�
H�L
f���:v�Z��TC�������d6[��M-�r�}>(��ޞ������	�`��R�$+J�
+��+J���W��b{ay%ɦ�9��ٖ_��kZb_3�H�`~�<b��'O��
+�)�/n��x��֥�-H[��������b+,	>x�6N|L�����Oq��s��Tf��V<^��*
�R3WjO
WOi���瀭?��������y�.�y�ݼ=��׶.]��y�܅�Sg8�Z=~��n�Io537153:1542604��?���*��Nx�ފ�쾀[�\��Sȕ����B�@��#�p�}!��Gc��xw���z�{��\
\���8{0��@���<pųpĩ8���!+UƎ�
+}�S#�'l%��v��M�9�"%;L��t�/d��s8y���mvJ[qf���UG{�qϕ��Vlw�K���
+��� ��<�� m�z��Vjn=W!���Sh؃��G4���'ٵ�CS��>��C�$�:��]�*�Iir_͊��%[�����䲒�Xq�Q�;��Ăa4!�%�&�_)q�@$yd����.v&]���`���u�<��ڠأ�/��_���{p�G)�;�Fb]=�)6��208Be^v����ߢ���/�b�u��ós�X�Mq,�`�Z�Cr=�y>�PBXp���r���'O�7�w����/}�K_�җ���#X���g��������cǮ>؝�7��]������N���.���=d��a4X[���TB�֐WP�	+�hFzF��`��X8�p��4h����8rD�`�g� B�`�痔�Ž����RX r��aMYu
�+,�*),cU-������D�8��c��t�3\��ZgmD�;Dhmm�ˮZ��n��X��r{m.7�l3D�ZLK��TQSSZQQ("X9��%�E%�e�ȽF
+�BxE)�z���M�� �US�"��j�EȮ4b�������`�4,�`͒K(����T���������	!�I-��lj&1���Y0���`�ji��<}J-	^�i��˛���]I[�������Jvm�
+��$��%��[�I�To���$WP�F
+���	�AoE��<��0O�V7@o�y��ŭ��^�9{���렷�����*�����Z�������U,����|�(6�p�S���n��(��‘X��sl�7#��}`h��	B�j|j\1\M�R[���WM�r�$���W��0�V���d�e��o���c���V`���Ba�V~8Ogw*���넒 a+G�
�D�ڔ�U�+�.1��.���ܹ�N&�|<p��!p=A_P��PUP�O�$�Q\�	��x@;O��ѷMְ����6e��x��R6�K�]��_?|"aʟ\tc	�}?,�%�YD�ۂd}��TQ*���b��|��ʟ(��~x��Eة��v&	���F�¯�^�`4��˺�V��;@�R��ƞ �h������2{������������o���}����������,�igp� %��., WsK�������Z�q���ڥ�W��W_}��җ���/}�K_��׏`���.~��_�z��?��O��������
+��� �`Y�K��Hhwq������f�k�A�Y��9yyY�9G32r�Q�s��=���NK�
+��=��o�^�`a�Z�������]P�[T�W\�_RRTZV\-��ʪLa��]mBK1bA
+�
+��|!űL�����Z������*"wa��m r��f!��@��j��i���Pe0�WUsVQaNa~~qQaqqIYiyUeUM
"4S�jijl����j�,s}�шE�BXc0��2���V���t�?�?����`��M�M� �9�`-��rku�?{}�]U2	Iɨjb�������,(ٗV��6p� �ϝW��R���u(	JJ��[=�b+1IP`�W/�Y%`��ۑ+�ފW	bv�'x���σ=A�[]������������5v��Io59=<6>0<�;0H�*�ٍz��&�:�Z��ʋ�J�Vl��*��	�#d��2O�}��~�VC��džF�GF'����(
+Sqr%��8ɬ&�`�rV�`�����'i@�����[
v���#Nd��
+�c~P��=�*���x�
+J�툡�J���Vʦ��Xd7�� ���SO���²s��	*�*B�@�[I]3[��������vz��qS�V����#c+͎��T��Z�DҕRu����TX�O��Jf\�j�������)Zj-X~i@�_k���nJ^+������]#Xڡ����.����.E�%p~�!��z�a�/���,m���KA�
+ث6{������������<a�/���[���7�_��5<:>=c�983��ł���"U�y�PL'�_�A����������[����'��B�җ���/}�K_���_�f��������v�رk�C��Ѩ��/��� l�`�#��A�Wnl�r�ST�W$R�6�T���dde���MO��΁�Q�`a�H�-´�����O���ѣ���ӳ�2spa^~NAQNQQ^1����J��+"��r�W^�H�Z0�����VM�J����E�P�uXȯ�
uR�D�ښ�!���N��#X��,W���L,kcm]}E5F�JJ�EX�[���KJ!�U]k0�M4�V# ,�`Y����7�L��C
+KQ`U5F��_hmjnQ"X�`v��(�`M��c
+-Xr��~���¢�������EB%_*{���Ƨ���N��V��7!+;a�3j����%�V�.����Ui�୻��ܗ�VO��V<j�R��[�U����b����<O��oݹw�엯�غ�z�ͭ��/�:sz�'W�6�[-Amgrzntbz�P�����}���]ݑ8Xq�!p@y�'H&+�!�\���bv�ݒ���H,D�+)����������r5ԏ���Q0\
��������iN��R�=N[䬐\M�Ai� ��F�F��>��%A�ꊰ3z�VP���7υ��.�Rl�Q���{�m�$l������� 'W4�ß<m�w�n*	��= �UX�Aa0�(��C��sɺ$�6�����徰�,%���eP�S�;�E�9^���o�"L1�p�����i��"T��W��5�+')y�>�J�i&ī8W���
+��UJ�%+������ë�Z�<H��`���<'��pÆ�L+� ��aw�|�PWO?{��:{:;{F�&���K�۷����˯=z�^Uff)v5
.,H[�B�ba5-Z�k�q!�
+��{���7B�җ���/}�K_��q�_��;w���������Qo��C`����_�`)]Bn�"�;���.��aQ���`).-���������9r�Xv~AF6X��� �_�
+���=lS���>��"X��\��ܢ��DX\V^\Q��ʯa�s���A>���Ra��!����q,i�`}m�r�D�,��6E�P�ނ"�G����|���j�7��74�`�P^U]RV^�,�`�� �����J�#�2�B�W�X'�X���:���~l���P`� B%�emnn���\,X�(;"��`��W˜\-��Q
+k�G�8�Z�8���65;�Ъ�Ym�jV���'8;3�Ⱦ`+���:s��Y�V��0A>Ip�V׮H��mu��;Bɞ�$�(�_=����چ�kq��x�4O�����Dl��ɳG�'(�	޹w��]ne�zm����:{~��6Po�X�g��>J����Ξ�8d�:�����B�*�z+��H(G�>5=A��1;�	ʁ���ށ޾����~���ƪ 'W��"���	J^a�J�NLc@���f�Il%A����^#����1(	�������S(��’ E�Z�R1{��ݬ��X�V������	:�he�<>(	z4O0*Y������:�z=��ED�Y�@M
+r�ęRd��J�`���d��	E��Vr4+!��K��+-�')����u����cRa*��z�d��|xMTU�k��IR,��W�p�?��(���X��)�I��k�UWHj��C|�� ��A'��:<d����cs���ƞ#�u ���F�㴅�����^|��w�|��W_}�^W'�gQؾ@-�iLa��;^��
+��$����W4�cai���G�
�g�}��җ���/}�K_�����ڇ,�v��������?����a8�/]\��W���uX��]3���;]M��U5����YYٹ���K����/<|,,Xii�޽{��=���~�� ������We��f��=O�����"d��Ue�EX��c��h��XmT(��z,�՘L	
+,ҹ�Z���,Xm�V����ts�G),�Xd�b��֖�zk#Z�jK++�JK�sAJ_�_\T\VZR���h�35���e��EB+���L��:c
0�Z��DB���`�/inko��߽��ՔV/Z�F'&ǧ�1���b��`	~��k#XS�Tf�!W�dgR�d�8�~��3����V[��\%��m�V���x�!)ٟ>z>v��zI����W(WO�ȁ��O^����W"sű��K=�����
+�V7HoV�뛗�'x����s�'��~bi�������;mD+���(����W�V����<m������@��<W��<ހ��A�Ng��XW,���UO_O_?��G��*88<��JL$�*���A�rV0+��(gž�V�˂�Q������U4��~^E���c��^�R��9�(��615۠�hW�V��Zr��1O�W��$Õ݁�ʉz+�V����
+�(���|�`�W�����@M^K�
+jh�v��������
+jcW	m��2`���O�u���[�&��v���gO$�&��� V\�ɒf&�,�9(���`L"Z���b�xH�C�����!5�D�?��+[�������ÅD� �h� ~���P�=ˈZ���ǃ�n����o�_}��g�._`5� &����Y^��C4K)��}�,�K@�W����?���FH_�җ���/}�K_?��>���g��������@����.�>5�EEB��b�����N�_�����d����C+77#;�HzzNAafN΁C�����H���P�4�`��:|���#<�����-œ���B�_\ZXZVTV^\F,P��Wa�";@���WD���nA,M����u��� �"XVSc��#�VKK[c[{s�������
E�^�ņf0D��K��XVUU\V�-��\�q�%`�������V=E�p�����m��b�4���F���h@~�#X�Z"l�665��vt�����e�AaD���ᑱ���鉙Y8�Y�D���_�^^=������'�Wק1�5%���	�b�L��Z�8�~���gO�=�܅3�x�����ŭ˨d'lu�
+��n���q������zp�����?|Di+�V��Ǯ�V0C�ejl%Ǯ>�«7/�F;Zٵz+�	*z�[w�^Wz�W�q��9�	n�:��~ry�8��s��#���`�^v��	��XWw��C_��Vn&��Vv�WPD=;{Zy���p��'�w������=h��"����[��'fƨ085+�Vx=ı�Į�'G�Ali�����>R�cڪ����$ռ?��C0I��L�80m���ģ�m%a���v�-�=AH[�Y<�8��y���<��%A_�E��V�L��IKW�r+/;m\G#�@�0����ԥPZ% ))yQ�@D���G%d�<2��^��o�R��eF�0��"�D.I�vO)�J�)�/g%^�&r`��`��|W�YJ�P����
߉4���@RR+��_��wz@�B��\����e��|^�#͖҄6[SK�m�6����؋6{A��]��>4�^L.\����/�F~��g_ܽ{l|r��ff�g��ܾ�43�
+\X��x@�+\-Ρ���X/��}ayqi�]�={���v��.H_�җ���/}�K_��kϞ=t�s��;v���?����,8�F��+�`���X�BS����<(�rٝnz��[Z�
����̬��������-(<���4�`}�,�{���:v���c��_��"�� ²�r_�K�`�½�W�HB~)���%����DB�TSXJ��Z�بD�E��[�P�B0�����cWB�CD���+jjJ�ˋJJ�`! ���"@X�e�5�5Dh������)�z�W�z�_a����U.BX&������������V�� Le����3�JQ��̯�B��������Ɖ����|G`�9ܳ��/-��l�:�q�̩�J�J)	r�*�o\U�խ�7o�QJ��<�����GO?~����A�VH�dl�B��I[��D�뭔��#1O���GwEO��m��߸�`��N����je_f�����Q��cOp������7�x����[)n+��V�V���avҪ��"Q�[uvǺz:���{�{�[
SU���8��h��(ƨ�Mq����YM�B�(�G�'�rlrxL#808*|��]=�[A��;�CI��n+T�SI�V�B%��l[��ٮ���J��
+\9y	�����E9p� Z�CB���>a�t�N�֣�v)ٶ��-rIa�J==0�-�!XS����
+�+ �Gq���w ���l���� „J`�g�aRyÿS�*���R��HB�Pa���*&�er%���	i+��ULkt�KZ��?oMV�6�����⬘�����c�@�=��./{�����s�Z���n�4�4����g�����e/ ���o`�����8����_�͗_}���_��J�
��Þ�!X�����""D����*������,La-.�(]��w�7�_|��vH_�җ���/}�K_?����g;��������o�ͭ‚�x�P�by���P�s������),�k���Uo����e�����g��>v,'��<|8m/X��a�����k�b��!D�8p��!��K,D�STT��GAX�*��,��&�ŧ�s7�
+!�a��A1�)
+���%���^I�JDhmmoD�!���)�z��B�‚����
+#Xuh�*+*)�-,�),�'~UVZZQ^),Xf+���M
�EXoi0�8�C���`������W#�2��f����tt�߿�������������4(���⾰����*���Bw𷟠
+���
�`A�p��
��
+�Vg����셋�.l�߼t�ҕ���(n��r��`��w�l����Dz�}۴�B�$T�F��$rEUA1R��K�V�z
+����'ȱ��{7o߹v����7.aO��v_N�;��Yv�r|}q���������,x��	���{��l��{|��*i+
+(ⱟbK0O0��y��p^t4\�+;���G
�
���M��䊪��r��+�V��/�xE��>v�VT$��ouqfE�w[EA�Nn+/	b’ y��$�"�운U«v�j���JO��G
+z��}�V�w�C�U@
\Q	���D�{��惘ŴT$���)Iƾ�z=B���UU"2��R�U ���oJ��m�Ug���p�tVB(KM^��	j�X��퉓���@V�(S���%�d�$W;�Z���>��%f�}"��M�XR�3 �SJت+ 
�aʃ�X�"4y��ڮ`�fkGck��������v\6����0Ɨ�3��������].-��|�櫯�~�ٗϞ�X�8919���I����yD�+�\���"w_q���D�🀅��j���ї���/}�K_��׏n�رk��]���0'���`+,��lG��
++�xiw��_� –��j�1'??+''7?�H�1���IVھ}����т�SX�=X!�!D��ӏee�ggg��f��S�0����,�Ee�� �Ҫ*�VJ�AbY����ձ��몌��y7�P ,��ڤ�`���6��A��B���j�;i!Z��+k��U\V�E�EE�%0������Tuf�UJ�
+��l���FS���Xc4T� š�j��jkk�F�`5�Q˅�X���-X#c#��3���B��V�W��B�B��
+7��ؕ�'O�<}�䙳P<��/l]޼����[q%{�z%A�V�yI��3[=��V	i+���$����ի70��eRO��	ާ���n]�� `���Σ�J`����������<Z�'�F���{��z��݄�bA�E���+/��l����魔��?�#��y�]���[u�"�����������}�<O�=A��k��Ij�Պ���G�1j��?Ⱦw����:��m��uˆC�$�@OЃn+��gw��U;��[��J��Zځ\Q�]��[�E�
+��[9[�5؊�a�?�`�T�U@ֳo� T�%�y��p)^%��"�2+�V�
+�dr����J�YB^��aP�["�y���лBV�P�y��H�Fa�E��}��m�;9��������,"KH�%�ɘ��t������W`�!�d���Xr�P�kPȯ����N���~E�
+��ۭM�����MfK#;nljmi�h���������u&�LM�=y������⋯~���_���u��M��M�γK2�S[��9V˔����� ���>�(֩3��=����L#�/}�K_�җ�����󕞞�.��/�|�Ν?}�������v�Nc���AE�.(E� �����]4��I��;haYyVnNnA^fv��c�r���>�A�`����<�o�^�`:���Q�����|D�ST�_�aay��y������W�dn'�Ue���X&����T��)�P$4PKTM�Fe!E����E�fWZ�t>�"w��ns���ݠ����#XF�������B�� ��W+��_�����&�`5��V��l��3�5FcUm-!��j���u��k�������������Qł5B��D8��/��D�p�_R��:���<i+�[�������7/]lue�ʵKXĞ��k�d�����mR�?x�%�Ǐ?y�'	
+l
A�Z�~��d�D���f��:R��VϞ?�����������ʾu���K��]�<#YٗW��V؉警g�&'�G��Gz� ��u�"����N��3+L$:�4O�m�Vh�
+F��r1{��:��p�ӏdi��WPr�+�*(ǮD��]
+����@�52���b߼�wPeV�
+����H�	���z+��G�1+�J�����B
+�USK���R����0s�TF
+bUP��Dr���`e+bv����+�$��d�"���)��:�œ�6b+��6�0������+y� �F�b��d;V0���_7�_%���Q�ɉ,o�A8�����b�_�.)��B��J����j,�&%L!��Z���`j��v��I--+����J���1?6L��0�\ ogϠf^�[�[-M�fK���hn����{��Vk{���nÑ���`(2<2v���/��
+��o>g����\��������
+ۡ98óX`nGBE8k��.Qs���d-.�,@���r��FH_�җ���/}�K_?���?�v�s���v���o�r�‚%��
Jj�Y�B���h�q>��	���.ws[{���WX������4==#;'���ȱc{��G;�{�
+����{�A����M�8����������W�SP�ST\PRJ¢2h�VU��
+a�y�J �*�HH
+,l��
+���K��,B�T[�"����,�W�V��`��sa���v���fojk��6D���4��dE��%��X!,���68²X�<���lmj2�ԽEXƺ�Z�W<E��Y��KSSSKk�qVLD8
+��f�f�T��U��٦
+��q_��8u����gϟ=J��[m]��%�V[ݸu�(�!m����4I0UIpl��J�V���)���s�\q���V���=�[��]ߺr��Vg/lr+��Iv��W�����'�g�&��G'�F���Yd��7���!��U��z4Vv2\y�C���>��V�\��Ȇ+!fG��z���a�`����+�R��BNE�
+�W�$H�
+�V��o50��1,	�����/�a?@4����H[�
+���Ӆ�=�������=��Ǯ�$H�I�\q1;��Y٠c�=A2�y8�r�����@o�{�>MOP��!�:��\i�:��UD�k�PZ��ʧ�P_R@�+7B*v�![�&�E +�\\K9�cWJaP�N�$��fF��m[�����Ao8�hBg�5	U���`8E�0Ր��ɒn&�T{��I�q��J�]Q�9(���W~MHOv������6�T�E�C�D�K�׊���=�mN7���,�474�7X�͖����h�Xa����g��b/=}�@�=y�]���g_|�ŗ�~�{d��i$W��]���=;�W3sH��8��
+!gY�_-�!��%{��G�Ex���퐾��/}�K_�җ�~�/��/�۹�g;v��_�5;o�bN���#��d�B������!�"taK���d��N�F���"3;;'??'/�h���¢̜���ݿ�#�R���4.r߻����:t�ȑ#�Ђ��
+b���mP`�UP�������*�58����E�J����"V��H�e�B WD��_!�j�g��j�A�M�-6���"w��}4������v[CS���ZS����B�*�Ҳ��ʚ�Z��UX���0�e�� B�`A�Pq��RXX!4�Lf���
+љ��`����=��|�D�T��_����Wk'A�~���/ln]�t���˔�z��J�VO8�z��	`+��%���b�7�oe�`��
+�U�<������}���߼V���6/]��y&x���S�n.���s7�����+;魆z�������ٹ$f�Po���>����^���^���qB_Ї�
+W�(��G�'�u�ƻ{�z�{z�{����?<���с�1������hO#��R���8����1 `RO����4I���&	����Jv#����S�lvdV�D�UK;5ٶ4�6i
���(l�+�m$fw�b+�I��	��~`>\o�*�+cRD"T��]�	j<~L�p�ކYi)��[����Ĭ8�JhJ7S�O�A^y��2K;�0����-�,՝z�K�[�ߌ��Jb%(�R����JA��
+$���R�0����p��ӣ�%��Xr.K"WQMy0����L��n#�ƃ~	ׇc>���r�Ǽ����j��Uc���dn����
u�
�
�zz�oik��'��=Cc�]���D\�r��'�~��쒽���۩�����in�"�;�g(p�̊���E�NH�jnQ�a--,��bR
+k}��
x��������/}�K_�җ�~�����.w��>��������8(;�",���s��Haq�r�	���Xͭ�5�������lvy,3=#;;���HX����}�1X�w���}N!L�/Z��<z􈰸��旔`
+�*�˪��k`ayu-���6 ª5�;��i
+a}��W�B���ăXP!���L,@Xd���@���������vțyl<����)��l�9��m�̥�"Xe`�*�'"��ʚ�����D,�_5C�
+tX���`�S�zC]T
 r���)���ՠϢVcSc+�1���#�x'E��1�E,�`	��k'Nl�:}�T���|I�Z	luS�Vwlu��㇀��<~���3����J��^l��!�r���'�z�/�>������*z�[w�ݸ}����JO����s6O����+[M�/L�̎ON��O���
��sl�w	���Y`VUQ��]h��xAo��}�P !7;;
C�*1;����z����#�C0Rp�S�#���)԰sx�
+�X�Y�җ�
�ڝ���a�m{�[��u��ت[(٣<m{|!�7�F%;�� meS�V��Rf�Q+��[ۚڐ\�����;�'�Xٽ�\�8�'H�+OB�� ��*(�G[i�fJwL�kKsې�dL䑱�Fq$��M���j)�J�0�\���g�O��4�9�����D[�/Iʒ_�L�u�iY	
Ĕ��B�|߃�Ԫ���K|��D�$�ۣ��mDY�%��VR�4�$�X<��(+:źx
+�Uԇ�A�'��� dO���Ks=�w��kR߀��l27�-Vx�nni��~��N��Ӄ���~��go�|����7���/NN�N�.��"X�Ȳ�܎C	��8BHd���( ���1������r��җ���/}�K_��׏c=z�]��O����;����Kvn�*(Q�`HP,�_a��T�),7V�hĘ�Ŷ�g����g�� B�`�+
[���4���C��A�
+��΃A��}�a�Q���#,�EX���P.
"T��
+s;�	����֫�)�e����VD�[��jK�}���Á"��:����TQ�#Xy��K����WB�P��-0����),��

l��fc}=E��jk�,��`�k�&��0Ҫ��V-X}b!F������������ډ�H�@�~����- WW�_ǐ�+�7nݹ	�Ꞃ�<Fl�i��Ϟ'�_�I.	���ܩ3W�(�+>O�ūg[=���#�V�p��M�V짽r�譶@o���I���^]?�D=�������)��r+�`WO_�K���}de�
A 覆�,f���`�0�=�p0e�k1OP�C��W����jWcãBr�u�V�с"�5�̊�RI[
��j����o�F"BI���� mg?�����|A�$�n+�dw���V�lQ�V"p�ĮD�����rtة/z+���������
+WJ�
+��/��&M�*K�~I W)`�/9S�T�K�H��J��F���V���T8a%�
+%���?�e��|
d�K�&����\!K��Pb�J�b�é��,g���=܆\i�TTX	X�ѿ�dTL��Ge�)�'v�N��"��ңE%-|,�l��ʤ���Ò�XD_C0|�㏸�A�[���m֦V����[��-F{7���2�k}sk[{{aa/�U��rwv�nn]y�擷����>�������
+F�AH^�,B�)p5C,����J��0��AjB�|eeu�֝��m�iatח���/}�K_�җ�~o��?��]~��;v����󏎤g�C0^
��j
+�TH�8�B����?=rcNi!�E��1�� +'�,X�YY��E�22�<��o��4�P��I��>{��G�M�H����������/ �{^1�����J*�ŝ����AQ!��*M!4qN! �T�BD("X���Y���r�;E�:��T�kSnDXg�����fnl2ԛ��2ua!���EE%ť�eh��5�L8OE�͍4�D�8���l6�L�:cum
����Ȫ��5!��`mlnim���Nv���#�ή��`��� Bv�3���������'N��y�[W�^�~���[7�Vݺ{���{��޿}���{X|���c�m���P|�T*���ߛ7���V�$�+[����I=A�[ݗ�V�@ou����+�Hou��œg�m�<��z��e(˰3�񩙱�)&8ا�V=�ή;eg�!*	�mE&v����<A�ۃbv?V�s�V�
+G(p�waષ�BP��w�7H�
+�T��� v52><i���q�p\ ��Hl512
+WQI�����ꅴ�Pw�@'b+v��D�U�3�C��<y�$$Oa+�Mv'N��v �"+{K���jFZ�̱7_�-�-���b� ��ܨ���̊�U���؊.K�i2W�$�K����o��J�����JѧK�
+(�?�eS^yT<��VnqGrY�R�Wa�#Z_VX�%T-X��]#�O�V�:�`���S�\K�W!
��ERT5j��Y��k�j��U4��8ESŜb۔
U��?��=�F��,Ǥ���}�������6A,����+�k8(������@~���`� �+3��W�ٱ����bmjik�y��t��l��ɞ�g�]`/��U����5������"~��v�š�Y,,�
+L^	��<�E�:�%�rx�EB籰��v|�P���������/}�K_�җ�~��_�����������?�}~�]�����^���[���rx����r;�����fkcIEEVvNNnnv^��Gs
+
+3ss9��������'-MG�oE�>|��1�`e��=7/+"XȯJ UV�6 ,�`)������ʃ��2*FwA��x�XJyPU`�i"!�+��W�:�`a
+K�`�[mP!�6��p�9��[�[L�`UTW�VT��(�� ����������������	��-��d��-��F���Nwa�A�P),йWUJ,Xm�v�ѱ?X��z����`�������e�W'O�=s����K�._�r���[�nݹ{�|t�!��)����
A^��͛���w
+l�F)i+�V/[�x���Uo������n#��~����7/]��y���ͭ����~��k�˫���&�g�&��F�[
����a�����lE�
+�Vn�2.7Z�V��l�"��`O����]@��p5 ��p� �EO�$W����]q�5��
+nƱ�85��[����Vq�$؋
A�VA�yi<�!�m�{���Q��alEѩV�T�UsK{csۊ��V6�V�mઃ�V����%���b� �_0Bz+oH����1�2CPᕶ��A��5��D�#Jy��v�*�S!�>��Oi+� V"X�t)�$Y���"�@�S+�
�Ja&M>�N?�j2W��lzO���l�JPc)�"���jџ	F�������;�UjCYQYr%s$�A��Cɔ%���(�"RSf���,����E�8h
E;阃,|x��a��]� {�uر?��nmjm�4��ȯ��c������l�B}��`�*�h��������3g�?}�ҧ�_>~������u�&��Z܅�}�6%���Y�HHE��%�o�B�N�#������g�wA�җ���/}�K_��Q�_� Ÿ��{;w��O~r��!�^��+�`�PBn�b�J
+�%��9�4�ϚQ���Q[g�-(@VAzf�̌������+"XX!L�
+�^�`8����0�����Lhf�d����"�U�ˋˑ_UV�W#�B�{e����X!�#��8Z���_U�Q
+�WJ�P	_a�P�`��Z�-��vkk[s�����c"EEX܂,��r������#X����2�`��VKJ�ˑD����������1�e�
��ں�j�W��ª��/3(�[�Q���N���p8���������]XZ\Y]xu�셋/]a'G�nܺy���{�?|��1װ����Zl�VvP�󴕦ȁ��qr�굦'z+v���ڞ`O����Qou����w������7Hou���e&x�‰�gֹ�}U��OL����
�>�[uG�AvL%AԸa<Ir[a��=zه.�Z/V1���y�[ź�<pՋ#z�dr5��jlpD�WD������$��AV4C�����c�����1��=l�[��[��i��4y]>v��@%;���4M�donor��
+V#\�J)���Az+|l���W^���EO���@i[�7�@Oj�*�%j�J�Z"ڼV$�ϊPūBs���:}�B��]x���T��z��+��R��x�*��.w	�xN�B(uD%��f(a�5K�,'W�
ޗ*�%c+�a%f�DF�نM%_~��J[!���`%�	�J�/�|�hT�(�kGF��bbuQ�$�z+��p�]�ф�H�L��(��?���_����žD��fmj�oh4��<h��7�k�&��!1�����x�?��`��tٝ�޾���<y���Kvy����KWq� Į^M�`�W3��Z���+�X�!$�Hx��+�V\꾰��ijX�`aqeem��a�=^G�/}�K_�җ�������W����رc׮?�������sv_(��\�dt)]BE�ζ�K��w��N�Wnvi�4�VT�*��+(8|�(4��9��o�@X{>R*�����ՑtD��*+7�}mNAQ�9�*�A�%�Ueh��{5Z�jk+��4Ա�4!y�"wj�ԙ���#� ,y��`�`�����F-�vn��y��>�)�v'Y�L
�`����V~QQNaa^QaQ	���**�kj�:vf��`57����-B+E�@�^k�A��B��.y��557���C���X8����OLͲ��յ��Ϟ=�����׮_�y�֝�����	+h��I�(�����xI��+YƎQ��[�M���`�P�	rl��	>z­젷��z+�V׮��
+z����"�:��v|~ief~�V8L��4L�/���a���{$[!�qPڊ�VN~�z+��ߚ�iCz���Ĉ\�y�`���U/����
+W#�-ș��#�����Zp���Q>Fg�؞� o�����X�U4���QՅn+�ݞ���N��\���0+�b�`�RT��	*�
+��m6�B�$l��B�ˇz+��$f%��5�"� ��g�ɷO����V���
��P��&���R!zr��.��[��£���`K�]�i[���Uؓ����kyS�.T��ڑ�J�*^q@�qVT�=j��P(�ݓ�X�&�w����Nx���Ӣ�ĘS��_C��]�V4A��)2`�Xҗ�R�DL�"�C�Ug����h��U���O�������amD~ՠ�+S��h�3�k������������N����ln]y��)��>�}����[�ӳ8�pA�<�,�T��`0�0���H�9�`��/Py��W��V)� kg.����{'���+�퐾��/}�K_�җ�~�ׇ�����/~��Ν?}o��Ļ�_!���#,ba�
+��0��*8��������	�����ΔWP����_\���u$�Xna����}��}����"B�Bx���C��>t���cǎeff��d��f��+�����Wb!��aՔ�Ԁ���R�ف:��(�QL!�AQ!�-B���DX
�Vk[c[E�a��}����,����d�johl6�!�UVUU\
+�<l�������
+���-M��jl�),E�e��c��h�+�4��X_o�66����C��N�"��n�W��3��֎o�:}����K��^�q�Ν{��?|����'Ϟ?{��+�_*���@��Fk�z+��[^�U��<p�.�b+�[=�l�꭮ݸt���K��)�
+�V'�֎�{2+�V#㓠�Bl��������eg�ެV�݉�n�l6ٖl�C��cfBԆ!�~*��Mhbf�.��G�H�����	�=2�Q�vU{�or4?41:���s���_3�8qy��L� ���>��t~l<72
+���ЂÜ��R�U�ȴU�z�H���ԓZ2��=A���0OP��[�O�41�����a� �
+.����f�08��<G���F�<8/���3�I�m��$���&G�$8�%A��
+z�Z�J�I�r�q.*��+P��D�s*�/��̕�+����< f��B�P�8�r�y�ɈF�*�������$
��]��J�Ve�� �R	EQ�s��ū�M!�JY�Vt�f���!w�"��JYYe��_�ݭU%��D�2eY��`)�ʪ��3W�PX����.��L�~��j��7��v!]WOJ�{951e�;i�Ne٭IT�y�kː���0
�ʎX;�#i*�i�?����A��*�����^�{�J�<������^��~����,{���'�H,����{����|1��o�����ziem�P������A�� \G�;�ٛ܂�X�<s�˃����^wD������o���^�����e/{��we�TW?�G�����N"��[���u�8�bE5=;Iɖp,��0�s�=�������kl<q�Թ�����"���Wa�0;}ZF�*���ՀȽ�64�w�oa��������-�]�;:Z:`a��!�",�W}}=}�E���]�����)�<��?�30�+D��܂�sz�.D�������
+��k�B֐/����h��nnms47�7� ��F�,���t����;w��VD��;;ڻ:�ر��=�������x��`�}
+`q���_Xf�?[;{/_�~����O?��/���ko���;o���{|��G�e�O?��3DO�aV��kؿ��
�+KOPb�O[}���l����P�
+��+���{�ŧ�{����޾��Mne�q�ҕ���4Lpz�ťյy�[M�
+��#`eOq+{�	B0�-�*
+�+�0?��$d��P��y�F.c�`� �F)p�z�)�QDO���9���܋+��2��o�qK���s�S�"mE�j����䶂�zu8�����VaH[$�FiU $Z���M[���'�ɪ`�j�8L�����=bv��x8'cF�d�,���GT8�*%TK�tz`��`WCV<[%w�rV%;^v��.!�����ǔj);k5�L��G�^[��G��.
Z�9(�^���ɫ�XRYo,�v�j��R�ʯ��oM(����=FO�*�8�R
�C+�\�"����.�WY�f��
+Gy�<�D~�&�����W����{15������ʃȯ�.w`8�~��t&��C��"MO�-,����^��W��?��._]Z]_/n�!��V4�W8m����+S��+�����
qN]­m
+_�.���K�n����'�?��e/{��^������u^?��O~-X>��#�>�w����	t�B�JS��h(!���q����Z���7��hp4A���lչS�g�M�窎� �'~�С'�
+!��ǡEx��qDX���>[��E�ϟ��:�����w{O��`!�+�o�(܅�	1p��,I��=��&�r[Z��`�U(���P,ί��1�c+�:=��AggOo�`9�H�h�GVK[[k�|���58�,�Wn�
�;�=�<�������ݝ��z�!������a`���ə���u�W�R����w�~��^z���(y��������_|�ŗ���/��5;��_~vZU
+����Ǥ��ɕ�|��wL�|���^y�ŗ���'�>
z��O^�v�•��/�K��������Ba	{�3s�3��S��=�.<���4 +�N6�C;���UB��S�4��F�c�X�'`�����8��i W3sӳ���Y�����H���+�^͈��f��j��rlž-�[AC0?�>������`2Õ�q�$�P�i�a��">�d�@���~�Mr�WG
+��<m��*"��\o�i+��VH~�hؐ�S�d�J�0aY��t�bR�S0^�a���̕����J��i��^ KĮ2q	�(�%�ꇳt�{�2��(�1Z]i��[s\i�1m9��w襔��c
+��\�K��Շ_N�ʙU2k�]%��rj��l�_�R��s��4k������薟Xjѻ��ORx.œW�?�k��H���?��X�wֈk�0:��/��t�}�p��;��<���+����4��f���p8�^�V׋O�y���_b���_b/�[ۻ+�k�p_/ ����ō"� ��� ��(���A�Ymo���6��ٛ[dt�!�[;���mv�KW^x��߳[������e/{��^��Y2��t��du�'@�d���+�E(�A8� V�����w�������ol8y�t
��O�>mV1���(M!d��ɓ�O�&�u�ܹ��공�U��0���T���hqok?���VWWkGW[wOk'Z��{�zz�a�S�V?�����x�"��	тw!r���Z���/�0F�b	U����f��?4����������h>����ш"w�`utuB�j��94�r�]����N�D�}���=����kA�{'�d�t��=�P,�.pscS�K��gg�¥�7nݹ��sϿ٫��~���^}��gD�����_��7r�AQ�/kUТ���/�[��z��^Ǟ��V�>�gn=y���'�ܸy�*X��'��
z��Bqym}~iyf�`����踑Gړl�Q��%j%7�t��)�'3I)=A�$��F�|�����$���
+WsȠ����7��*H^-��9�祉����Z�F�{ᶚ����$�D%{K��Hg�me��
+�vmKn+l�$Av]̊��[I���A�V��
+���\�g�a�l�#��
+�z��i���
+�t��p[	'R�,�R�):`�eJ�`u@�J�0���؎"���o�%s�Q�؉�r��2�V�4��>����"!Y�Q!�ɸ��MøY04��������N0T�NK�$����̕�Q�<(�u/�u����`9�:�T���,`FK�����^�;�O��gҬC�0c&��&��!�ʫUGl�Bm0ǝ��$�5rcv��O#��陸����*6��_R�' ��N��5o4_��b�2Cs0����|~tg���}���~��;w��~��za�W�P�����`�:!��Mr��DX"�]�ͭ�hm��݌cQ�
+u�l��]��W�����e/{��^���X��qv���~��C?�����o�vt|*���&~��:aڐBA��ů�q�	ӂ�F�?���w8�jk��k�O�=S��x����ı#G�>q��/:t��=z������`q?q�̩�J��EXC"��Z��67�
+a[��`��V[w�ۺz����bI4
+���L^�.�D"w�Rˏ��Z�a8"�h,ĭA����+�@kP�`���A��"~���Q�
��}��Br",�����Ƚw`����vtv�u��v`�opЅ�*gׯ�щ�������=�WO�}��_z����x��w���Ï>��S^��7�D�Kڂb����]�?&��G�'�b���y����!����'���BO����O^���¥+��7w��deG�������<Y�G�&r����4�g`��4��Ǐ�a�@�����x"�H��EMO�)���
+�U~df��<A�����r5=��j�ڂ3sK��Z"xE��ޜ��h���"$r��jT���&s��l�]��/$���t[f�
+<]��B�Jv�M����;��<�"r�cW�U�p?�٣��*<L?�Tt�$xO0N=�TT#+;L��y��Գg�`ACͺ�(sU&��S�P��]�&�{4��'#dV��
+�����)�UzZ�,�U1��*y�J�Tƥd��q�
+���"\2S[&XKZ�Y	�Q(˃�74��e]�bf����/E_o��Jd�_a��J|M�Z_Q3ԄK��L[Y�Y�d���_ct�Ģ�����c]%"o�O��JMX����SM_��(�'�,�4���$�G��X���A���8��F9���J�^�
���������sf.�"�p4����m���'�<u��3lߺ}��f/����P\]G�{�+ܡBX������P!������-�ZACpo��n��H��%�����.��n� �^�����e/{��^���{��G򳟱K],Gp~�Y,N�41�0�xE�*�'1�E-B-M� B�]o[Gǹ*D��x���sX<q��ъ��G�8r����Qv��E��S'т�-šs�uUu��
�uM�"lm<�B"w�[::�wt���U��@�E�A�`ur��N�_���@W��W�
+�~�3h"p{�E��"�
+�
+D�PȢVB��p<��ػ<á!``h�#X4����X��P�p48�`uwu���B���� B��ǎC�shh�����������"���N��.�W�8H�jlrz~y�]��_�r�歧����o�������G�|��g��ŗ����7�����[��_����(�e�+���y����'�z���z�]�'=Aaeg��s���._��+;��*ll���W��f��'�g��[�gGLleZ�i�`L�bf�*B=A�V��a�`*
i+�	�s8R�mO�M�NL�a�9�PX����	Xa�
+�Vӈ��Q2+PrM�@Cp|K���@l52n��_؀�09&�U"�ia��qh�#�`ď��cQ��*`�=~!������p�'{�a�dO�.��\��J[�F9O{�T�	z$�{i�TDpp�@H������%�3�0��V��*<*�**��Q�N(o/��PMO[��I��n�K�,�,K�P�+K�L�eN0,)!&xF+[�Ʋ��x�NX��J�S��ՎwMEX։�%]�߲�TT�h�����=I���)���ג�@I���&
	W�eYG.��=eZ��_er����V�<��2(���oNӍ(���P$1B����W���}P�‘8����=��H$��}Bg�����^�y����7n_�~sckwe��Zؠ��J�
+�X8�����7"�œM!/�&4
+�|� ���k{W�-��m���8�+W�=��3�/�w�{��s�^�����e/{��^_����������������T���[�+�rV�S,v	@�����Z�B]�}���sh����9y#X�*p�a_=!#XG������P���Z�k���A����{SK+�"lkk���!�����-�8���'�D����,�}X�:�P�w�
tc�V����`��E
+k�=�B�0Z�""�%*�l�Vz��NggoY��a�/����U��֖��v�'�;�tR����A
+��n@X��3��Ξ����.�W��!7��F!�ZZ)no_�t���;O?��K� �z�?��W_~��o~�^���?��+.������> ��|� b����y�����+�A��}H�VϽpWXٯݼu��͋W���ު�������V\X^+�,X��&��c���L.�f��GNO'4�QѸ��ž`�V1�f�� �!�y�i����L6�ᆫ�|��[� �f�A!�BC;Į���
+�V�f1��V��BlEn+hN �����Μ|ێ[�A�B�la�"r%J�h_�J�VxŽ�͎�v<0,�UD�Q&M�`�`
+K�X�D�J��{a+�c/�d+["���Y��{iE!%�O��Į`(�)�M��U���Jҭ��e���E'%wH�Թ#ԲĴR���oe�Xߍ{e���hN6,g����Z�@F�K����W��+׽������,����{�r���E͗-I��Rc���zK+#�ctKF�+DX)CR,�T�W��qD�2y��B��+��0a����rz�]l��n�+�F:`�8���+�F�i#�����w���kW�޼r���KWW�
+kt^6�_A�j�Z�[d�����*�B���I��lolmnr`�v�m>�E᫭])���������}��S������x��S�_D�����e/{��^��:�+v|��G|������L~4�",La	�%#Xi��J#�J�����`_"��8B�����q�����������ꆆ�O=v�p��_>��C��:t���"<\QQq���>'�Ex��%��P��
+,�`��!����N�W���"aOa��"�btG~����
𪿳�O*�e��m�W��� B�f�|�"V �[��J��Y�P4>�����rc��|{����:��^lGsskG[;Z��\N�_�}�������t������������vWOOO_ߠ�}R��?ed�&��_mm_`EOށ��������������X��+��R�{�Gl�y���.{����'��_���O=�ܓO=�>����/��+W�.^���g�Kk0�ȭ��S3s�3`e��R��l��0m��*\E�'��@I��1-�x�*��U:����pE��	"�����Rr��+N�Huř�
.R=��m�B��V�S����V9�ȳ�.<]0I�}z�c��#|!�pT��������n+?u�bWÔ���+/�+�cOW���al#F���=���(��G�a[�,�f=��#���m�=I�$Ĭ4��J��Գ����Sh�Jɭ���©��Πŋ��*^-�ʚ�R5�f4nd�`��-��2��0b���T�V2�%�i� K�Vx����t���ķ��Z���Ja��P�ߒ�RqV��2�{9��
+�iUW��-��0nYʌ�Ҽ�d�f�1_�T�h��=��y���+c���_a����"��k�X��±a��~[��A���^���v(�:7�W@�c��^���7v�.�_�|��v���%��
+���Rx�V�@x�%RX@�Ȃ��EX���$��Mc
+7d:�W�p'���w�w�h���.#�|��s�^�����e/{��^_�����?��w|�{�?���#㓔��;f�t�(�C	᪜�M�;Л�`i�P������8{�\��q���T噚���*1��С_:�+�_=q��!�`9v���N�>qZ�g�0�U_�[�h�mjnh>O,Gk+�`�C��E�]aQ���+�W��\��˽�B��W�.���w�`
	�;E��_�k8�	���0��-Ba),�����tu���vt6��6���,X
MM-mmm]]����A琋�W���Y��u�"� �#����[}��@(ʮ����酥����E�Ww�}���_}����y�ɯ~��W*’��7��3W<p��V"�2{���z��[=kb��7n=y���KW���}kgJ�����b���Y��c�n,�Vv&�%A�0AJ[qxi+��z+�V@�Rix�f��pb�I0\�CUplb
+�}���fzv��p\ �
ΐ�
+�`��,WZMM�NN�NLͰޱ�����1�Z��Ap[�@ۑ�V)x����J�Ô��sf��V�'�4%�2�
+z�&��ZWQ\��*d��؊�Eѭ4#Y5|UF����:�8�Ќ]�yy񔢁�T��
�|�vD��8�2UWa���%DK�	%;�l��*—44K�f�\�nE:,S�ni&-9+�3X����	�G8�0%Y�5�%(�&�4�YF��1�P/%Zٲ[�b�<�����A����WQ˟'��/������z�e+����31�H��$W�v%�W �3�N�v_%S���
+���@0��:��1���&2D��y�Q�u�Le&�gŭ�����K{ ���^č�����+p���������&R)�b!¢���ܩ`��3W�	7q�h�M�KH.������7_z���!{��^�����e/{}�׷��G{�;>������ـV6I��., W�,B-�f"X���xu.����_�Ѹ�r{ۻ��jkA���x�l噪�����g�=~���#O �z����"��E�"���gϜ���VmU]}m������Y"lk�Y��a�,��.�`A���"X�ݽ\�"����^P`�Ƀ����(���,3�E�Ez���Rj(r�V$��т������:Gc=�Mr!�ZG���v{|>��B���,k������,VOOw__�����CvE����[Z.n�\�r���Wo"��H䯈_��7������Ͽ��ϡ-H����'���Vo�z�g���瞿��3��<u�6�.]�������-��7����W��f�ǧg�&&sc8L�]Kf�������>�Y��HA$W����)��2z���U6e��=�'�U^��G'`�U'8�������+�\��ʬ����4b+h���jtL��rcF.O���4dV���`+���a�`8���� 6���'��V~7V�!����=��	r��0t՞ � p偫�ViQv����P���U�x�RUсb+5d�SK1�\��(��$�D�J�4!���Zڅ���*�b�Qµ%K��w�K[K�F�XC	ߔ��e%K�YU�+3eI`E��*�2(gG(�#Y��v�Q�,xJ
e�K#X\}V��J��%,o�7��>��*H	�J���j����W+��x��^�#Ha[v:i+���lAz~l�ފ�;�k>�1F
:�����Ԓ00�~V��_A8f���@8�
+�
��\	�>��Ecvnq����C�w�.�olB�
+�Uq������(��aAU�Ů��_6�p4�VqsK���R�6a+����܁��+�qs�X;{�[;w�>�{v��^�����e/{��^_��g��d�z�������_#���J�En�Laq�;�a�qC
+��W\�O��kv�.�{���Mg��58յ5�*+k��jj��8q���F�#���bq���X���~���luM�k뛚a�ŽM�W�"��"a������ݽ�J����˯x���U��A�C�C\���R�BajO���Р��a�
+Fc�p�B�����k��lnmmhj�u8j�����D��z�{����54��x�~?F�|��� ���>���t��ٝ�?/���C^��fߎ�������&��nܾ���/���ko���{�K����k��,��/���/�3��(�r�ֻa��7�|��7^|�U��Ͼ���A��o]�z��嫻.!��aY+녥�����鹅�鹱���V 37��&Sq�<�8��rM���<m�W�ʮ�2)�'�1�p5
+�
+F
+�����
+$W�Yš�v�H�>K2�9z�b�q��"b�<���� ���`+�l� ���0������[�Z!�ry|����Ozv�$Hi�`dX�� {�h/�u�����P1�
+�+M����5~�̗�{��8����QX��,r$�`>�����l�S�N��*�oQ���u�hr-ܒ	+Y,W�G��1����U�����(�Z�Rf�JpBθ�}�K�a����V���0k���TH���LNC-e�b)�w�z����������]X~R��RoQI�D[%st��0�,�%ge��A�/+��b+O���|�Y���_y�\����ȍfs�l���A�+���\\��U,����2�j��=a�i	-Ŷ<O����Ʌ���bqs{{gckgy� ���
+b���a�7�sU�V �юe",�,|sPՖ9|uX�¢� �(d{g�}D�o����G���e/{��^��������?�	;>��c�}�{|�����t{r�c)�*+Ez"�`��HH +.�_d��)��8;qy��]��U�u���
�*+�������CGɂu@��`9�V�8y�$D��CΜ��ٚڪzD�h�oj��!��y�,X�-��m]ݭ�]m]�B�#��į�;a.��^�a�P��9{@�z(�5�,����,o,X��WB��0�V�r�VD��E��Y���M-�8����|�Ch��x�> ��P ���@Xn������?8�����z�}�f�ٵ����7n�y���_z�5`���a����/���/>�;�~������{����ie����r�խ�W�߸p���E述�������������������������8Xٳy*	������UBNğ��(O[��P'lE�+�Vp확z�\n4'W�c���&�TAt�c�
+���]Ȭ�����B�jj�7'Ql5:1�b�|~��m�]>'3	-O$c��S�*�5l8�q)_ �@��\^2+n�8ʩ�8R�d���`8��-���d��F�p� 1�\�IvZ�,��dz*y��Ń]�c7�ZZ����K�N�"Ɉ8�JF��*�by�ve��z��\�
+�#��H�,��t��ҭ��ĬY,�t�+��r��*�i�J�f�
+ˉu�!��Շ��9+�3+k��2��x��
+S\��H���Kڅ<>'Yij��m�2~�/�$Q�f!,��g���B��ҙ��ߢ|��1jI�[F���p�{:+�W�u^!�%j��)#�͏Q�W�|�`:�L��N����?�y;��b�Z*�6�랦S&3�^.؋��������z�P����Y-��0v��W��՚8a�e��k�
*�*
+�;b�Y��r�+�p�F��C8�W{$�B�8kcs��$r���_�?��e/{��^�������]������z�G�������ˏ���9BX)�f9�jw�ta%St�izT��Q(M����Ά�������ƪ�ړ�gj����;y�HE��8rX"�"���+N�8q���3�g�Bf��U�7�8��h�jimji�A���Z:�Z::�:�_	_�q��>��
+� 	;�0���AYf�P���G�pa �
�aa8:��^�'d�*�C�x0
�#����cO����������hn�kr�46�56649 �����
-�D���P(G#`��FC�0���,������@����x�PTӌ������zaw�ҵ���>�,��~�=R`}��g�~��g���b��+�bw{��z�]"W/����/�$�V��z�)ne�|
��6��[m,���-.��-N��}��#cdeOf2���mW�V���
+��	�6D��͞��HA���(���J"W�*H�+�
+B�
+�R�j��W�SMOc�
+Xhb�������a� )�Ql5қ���%�8L[K�X���cI0:�6u�[B^�V�\��sV^Y������n~�	"���
+z�a>O��U8���]K�H�8*�)m��3����2�u����Y�4��� �)!+5�T���+��`���[�`Q�[���\I~e�,Ջ��,-��$ג�+%����d�ċ+�oLJ�͂!�%���%"[ґ��,5vU¬���߅��X��uR�E��P����RA���vڂ�Jx�ۻ�(�{�Txu�A�j[� ��Xi��*mA�I��M]��t��c39R�S.Kj��HHB#;�6��n�P����1-E+g�	0u��U4��3��5������+^*m���9�W Q�[��������
+��Vש9X�� �†D������n��MN�@�{cs���M���i!��ŏ{ĵ�w���;�{�ڵ��E�����e/{��^��z�������~�������|�/������!,lr��ͦPR���3b(!waA����q�DT���{[gWUM
D��38R�"Xį`:�����~�رc'O�8
���"VMCcMSs}Ss#���V#X��K���{z�yG/�,a���lw���y�p����r��a��E����qz�N�_"��E�#�  ,��	a�a c�"Xn���C��v�r8�_A�����������"Xn�7"����X"״X"��؍á���фN���r�08Ʈw��S�K��[����^����Ͻ��˯���[�����}�ч��ǟ~��g�|��'8a��O>�	�@�>���w^���s/����goݹ{�֓Woܼt�����;{7wv�۫�
&��g�؇Fl5j�G�^z+�V��z�H,Lz+��s7;b+dV4R�U
+�U.$Gry^�cUp����d�����+�0��4Q�>R��1>Fp�=g~�f�Y$W���JO��+����!kA%A�$A�U�}�0p�V+/�����#l�����V��=�S�
+�	��_	K�Z��	��
+U�$L��gp��`*cY%�v��U
+Lͻ����yʖ��,A& E���J��J���h9�R���V���1��"J'��TD��ˆ���Ty�P�Uf��jĒC�J��d�B���"’�4C�o�T�S,�%�%��i�xR�ie\�{�,�J�L�{JѼg8��73*�R��m�
+ˊ~ҭ�A�*U�V��W��ϜU+��3mWF�
`�*O"�$��t��;H�r8pV�@s;���Ye1{i�-p#�i�~�Ѝ���_��Jj�0��س��O�dU�2�Г���ޡ�F�&ff���<y�L\^-����o��yU�+�Y��A/H{s�r�y�jw�[�?�Rwa�-<|%څ������WZ�o���^�����e/{��k��Q������y�G����h@[�1mP+KC	Ɉ�����)�ȝ]�R`EL�т5���\US����g+k�VWW?~���	Y!�u;�������O�<s��ٳ���j��j���A���frV"�ܻ�ۻ�ŝ�;{!��IEB$W]|�BL^I�E),';���5�B�r�e�0 E�q�V"����1?D�B.��,Xm]`�jln�A�

��
��`�jmoo�����ry��`(�FA��ԓ�T*�fG-�Lh��6:z|^M�廟+��'������.߸}�g�{�W^}��7�~����G~�����$퐹z��w�{��ի�=����<��
+\ݸ������Ev��V����Zٗ&g�'��J-7
+�zde<3��/�
+w,�f�P������a�`2Ebv�#��dslgMl5��'�Ƒ\Y%W๒���y���5�Z�Pl53:1=2Nb�	�̨d��U��!�O�]�&�m�_�%R��"��xI|�<pEb+h�r�s���WZ�[h�`�o������H+{����8��VbJ�yQ���J����A]	�h%�J����s~���+S�n�r`���ܨ��-i�c��*�&�T/���*�n��-�|ô��J�wp%M�%�ZЩ_��v�)���E;!&��w�	���+Yjz�ֽ(V�P)V\g��^�M)�U��¯J;�k�O�[�ҝU�Z��-��Ҋ�UWz�=ٍ���3�F,r��`m��"�Ex3dEɫT&ORw%��<��P�hv&��y�`���#g�;�H�ׇ8��cS3���33�1��E\�Г�����������u2�/�V��kE�3��j�Dk�Wd��9�6�EcK"X4��]�-���\bm�K	�K��"w ].^���-B{��^�����e/{}-����b����G}���y�/���{���qBX��rd��J�xQ��a!��",����9�xo�VmM]]D�Ξc�
�'�T9v��'�%���8r�F�P�~�ة�'��u���s�UU���!,�`���ݜB؂�
+X�"�� wa�
+���>�E���~Yx>��@�:Ɉ�����a!F�|"�5�
��a���=��	�
+F ��EJ"XM--u�j�m��s4:��Ϸ��wuu������p(�i)�o���s�\��L�H�S�D<�����^J�r���@(��l~tjfny�����ڍ�w�~�a����o���>x����}�\�#
+r��37��{����W��_����_��aP+k���չ�%�[MώML�����X:�.�@o�cxq-*&	rZ�(O[�Q���+
�L���*gd�b׀�������������jN�+n���Iq���*	��jbjt�V�ʍ�����ꈭ`�`���$�\
+C�*�8���AS�.}��bvP�#������i+ W���a�<pY�D�oN��!\)��0*�������4+ݲ����%da��A*�1�VQ�(e1YY8?�č)�JX�>���d��h	u�w�r��I�L	�9�P���[1�V�ч�-�h���ʯJ(V0��`J��rS�X&��PV2+co�qY����+������4�� �H�Cٝ��?3������>�3�Z"��Jٗri�R
���ja_���Sќ>���U��W83��[j�iV9�]����dO��=�� W����Wp��RX��iP�3|�c�Z�egqyme�0��42:�^��'����əٹ��NQ+�������Uῢ�&(�z���*la� 	a�*���X6�-[&����@�pam��n�u��
����v��^�����e/{��^_���c�=���y���կ2�|�m��R�_�фB�
&A�����	H��4m8��otTVU�cm}���J�`�@��Q�`�:r��#��:z�8E�Na�=�lM͹Za�j:_�Ԍw�WMmm2���AS�HH",�_��x�N��'�Y����j,�W4���W��B ,ί ���m���"!D�"0���"X�m�]�mm�r4�66�9���8����������GD�z"�IgG�#c�ccc�c���|6m�m-��~���t�<_`8e���щ���ev	�w�����$���+/��ګ����o���۴_{�W_��W_�W�{�g�{�ɧ�����
+^���O����ήͦf��U��Ơj��`+�A��h���W�a���"��ٓF2�b�l.
��<��s��k���cb��8V�s5i�T���!�I����Q=��4=4��e�$�����WOc�"%���(6yIPb+Y��]��h�������<p5�
 �
+��\A�
+{!�������z+H[r؜l��%f!)�Δ_��\�Je�D
+91D"Ht�zD X����T_���*9��$���{X���AM�nY>s��ZX\:j�?�!fAv)N���#�䱒Z�R3$M>[��]1a���(�Yiȗ��߬���J��*�2�xCQ���*�wN�D�22@ƴRj�)%�%���Q�$!�	����E8+%+ˏH�dN,E��,�$=��Y)��N�@��9M�MKf����H���(j�ɂ�
+��ydb��<{H,�������ѱ���u�RY(n�/,��=���i��4f�k���������:������_�prE���,��AE�on`�j6����F,<�"wv�Yb� a+q�#�XpT`�������+����xᥗ�?��e/{��^������5\?����'?�٣0��;�W�7�̍��s��ʚ"��ܳV�{	‚U*��ٛ좾���\mmummcSSe����a�c����C�p����Z�į���A�X!���V}CuCc���,X-��[�ZۛE��|{'�ܻZ$��B�;",�;{�Yup��aA�������DX.7!,�"��	aq"s�!�v����m��lji�or�:�_� ��&�W}=�!�8����d6����������a�3������T*���Aa
� ����12:9;ˮ�6�w/\�z�:�ܟz��g���_~��W^|�՗^y�����\�TAv����z�{��;{��_Z��_l59=26��ZMN����4�$A`"l�{�q�\��߮��dBO�)�v*%A#7�͏d�\a�O�٧q�����4z�x��4V&��@[M�Պd�[���=?hm�[�$�>v�BZ���Ba�d�a�`��0+��˶�
+�%;��yO�c��ۊTi!�:#8O��V4>/��Uy0/�E	�O�N!�ʲD�E�YYR7��JH4e�NeA&_��z`	�*�Q_ٲ
+���@�uF�Ց%��dy.��1����얈]�U!��U��L^��W�x(�[fR�ڂ�>K௃��I��2$���;L�7J&H&�&��Ŏ'���h�{�@��/LL�2�0Q�FTݙ>4"2C5Y��U�Ǵh{���ґ��V�(C7+�8d�#�âƆ��f�7���a�;� a�'s��m�J�ه�k�HTc��Ueaqeskwo�{͜_Ze����_���1�^������
+
\]+.�����WחW��d��^��BU��@�A~N�j�HF��bq� "X���M�
+��vaq<.�]9���;��}kg��l�noc�Z�{���E������_G�����e/{��^��ڮG����}��8t�h*����2�E����#�`�"aL�	��0T�`$�7�lln>WU��䨮�9UYYC�'=�-��"����������,@XUU�j�0��X�p�Q�,ֶ�V�"l��jA�B���-BAH�~9���܅��W@��dq�;�+n��w��8�>��"$��?�E�M��'(������ru���wu�oks�?_��X��P��VK[KWOπ��D�T&��ONM����/�-,-��������]K��H�y܃.X���`$��3�������uv��w���k7��|�֝�w�z��3�>����՝�nܾs���KWAr��w�]㰋�������U~2K-

�	�cp���z�
+�U4��U�Kh�DR�S	-���]١�*odQ��1�V�\AIPJ���n�Uӳ�S"jE9��i2��rf�>g��&	3�q� ��[a_O��#A�c��؃(c���$W��^����U;�C���i+4\�ٷ�'z�����y�
+9Y�Po�P"�b+S(D�*Mmf���8H�-Ё�6�(C-�EM䒒y����#�`*\��R�ԇuR�Į|��<8�U"{/g�J�Kp�=Y��VZ5k��Wg�X������"�{�SE���cq�|L��,*-X�EK2.U��15��4��}��.�Zm)�K=�]���x��Ke7�թe���\��j	����i*hU�Ը����7�5I^I/}�W)L��dV�+�]�N��4�+v�A��n�%4�V�Ȃ;I��`�d�ũL��<nn��_�z�ҵ�����%#7
+S��J2�^��+���2Ů֋��k�����5Ҷ���NX_@�.��*��
+!��B��[��$~%�W��-zW�|�X$lǴ��k�DX;{�;�츳�՞Bh/{��^�����e������~Ǝ�'��c�}����/�b�5�K�r��(�ťX"�����b��0(-�.w��4���uvV�����68��Ν�����?UYy����ѣ��
+,�:z��Q�EXQq���S���9s�[�`auCCMCc]SS]ss��[����EX-�`q�a;寺{�p!L!��
+�~Jaur`5�EX࿢�@Ϡ�Wp�,W��"X�A�OD�A�aea����f/#X�@p���tv���tt@����������֖��A�ӏ�*�I�O�O�N/-/����������0=3561f��EVb88���N��n�W"��@��Ʈ\����/]�t����7�޸u��k7`_�v�W�Xd�>�*�453?>9
z��H�Dg �"%;�����!��+��W�'%�dO���t�U.��
��쐕��+�V���������\�����Ǟ>F>vPⰫ]L˰�'��##�J�0�DC�MV+�z�2pŎ�v2_��J�D+{D)	J+{B�#�m=A3��.�\)����ʂd�jJ�G	�g��#Rf�JaV������/aY�}�{q-+�R�_%i.U�U�2ccJ���2j�ҰYY�P",�G	�<�d�!�|��QX�[q,dPd���DXĬR��&�,*-ԦŹM+�M����p�[����2y��]	_����Un7����g�~b�3��1=Љr\�9�r&���B�4Y�$")��
+,���J�k�8��*��i����I4����<�!Ȣg#�žF�\��b=�a�K�����^�v�⥫�ŭ�i-����{�glbjv~iqiG
B�jym}���8�%�Z+�DyPV��6��"X��69����A-�Vm����y�ɝW�B`Ź�AAX\�E��т������WG�&N�>m�]d/{��^�����e���z��G~�������ǒÌ`�V��%d[3�w�C
+.f5
+ᄢ�>�����٪�Ɔ���Sg���7@�ر���<�毞8|�#�c'Ђu����S�܂UUW_��q8jM�M͍���,���&BX\����ن������E�G��P�E�A�Eh�`�)��B�b��"����g8����N�C1���qӂ��V�k,X�b�|]���������r����p���q#kLNM�/�-�,��Rf��������85=���I=	{|���o`�op������h�]�yvM5;ՕB�����������/��_�ރ��}sk�]�+�����ŕ�������x��\����#���6�{���7��f�{<p�1;{�������
��IN�ƑPa�jvb�lr��+��5�*/��F^65�\�1�X�D�H<f5�Ȇ ����m�#N%��W����ž ��<���yLr5�U�U������4�))UAŀ�+QRoe��M�e�1�L�lW�{���Y��ּPYB�J��q]`7�Y�u׊�aN�ty��k)��%"�G�]�=D�ԑe��p+8K�k�*��z���.���R$���B�i��
+b��\�.�	�7���?�.�5)���
+f��gP;����v�^y.;�B�[�J�{ܺp�%�ʘ�-:�v	�
+�RI=IY��C?��	�8�@��_e��-p4�S火,u)��'���qZ���5dV1+pܱc4���Ē���L!�J����i� �+���~���rBK��O��o\�x����W���ݿ����^vbX�f�6#��+kk�"����ul�r��+�l�Vk�
�p�q����X�u�l�]B��ڀ����1��m��#��DZU(nq������+ά�-�
+wv������ޅ�W��;W�=�'��~����^��!{��^�����e/{}m�OE롇��C����]�〹�����Sj�Z�(��%(V\O��q��Jz}������ښ��F��T��Ꚛ���O����աC�"Oa9\q�8�"�ӧ*++�UUVU����������< �La��������Z��-B�_Q�*������~9��T�ӉHa
),�’,�WfK'�{(�F�>�`
;=����Ξ>�`�9�����F�W�}���?�%��19=��4���R�(loonn�e���������X�H��į{�z�{{{���� \l%3F6?:69==7?���.���֗���…�յ��������������I�V�i�䰋�O[�$�h4�b F�"*�"��g,��ˮ�4=E؊l��l>��A�*?JmA�Bɕ�*(�Ԅ�X�d�����3!m���1r4,L`+�$�$�>ia�
����|�����v{�A�<�H=A�)�)�cO0L�
+J���F[���V�,FI9��t��5���r��ڜ!��U2k�)���줘�f�-���P�xJB-A��
+���*���k�~��^���V�(���u��¨�< �eugE�-�f�R04����]�FĹ��O��|�R����'��eD�.�x��Ye��C@^	j�	1�P ,b�Y�2�Ϗ	��Y���}F�Y��ߥ�p"zJ�PE��(����E���i�򠁃9�Jf�H�18X��;ŁAebZ&�Hs6��(�D�b�����wA�
+��q�͂rq"��W�����j���+�oܾq���Wnll�NNϱ�ޱW�XBc/��s˫˫���M
+;� �Z^-��jm��E�^W�^/l��Q,jb�P ,YA�j���6!�U$��.,(n�j��<��V�h�R���[8��W[�нxy���_����?��o~�����m�I�e/{��^�����e/{}m������"��߬8~2��2�<�[r����+#+u�E����t2��.�_ȍ��g���5
��Ϟ���?��#����C�0�
+��G���ر
+�`?}�de��`A��,X���&�R[����;�qa[WO��BH��$‚Y�4|���4_����~����~���s��P���R+Pb���  ,�G�b��p8��������}������ڠB�h��
+�־�>���Dz����������܂z�����X/��'�&�9#����NgogOOgw7��<^ ���T��#�#��ӓ�3��s�g`OLόN�0Av�U;�f�:&��<�v�+��$�7ي�;�p��\���	�W`�Je�'Ȟ���������gW�g��J�4��=�B�T��n�F�3��Q�,�V�c���C��"����ǾM�a,	�1��J�!%p%��n�	��j���à�
+F4�Cwa�I�U��	F�T��v~In�N�u�`��W�"�\[��
+�VpK�M��g�tn`�T&�2#Uj�JS��_+�S�b�A���h��SU��_��f�K�e~E�/+Y
+�eB����v!=J�h��5���RYD�dI��yi�\���\T���S�T
+�
+���V�Qj��,$�8�oa?-"�)!��M]}�@R��8(�E�<�{G�b��&`���(�I��Ue��I��Q��@�ɬ�<�i�W�įا�1j!�tPU�L[�Sp�%�\��GX0�I ^�_����`^��q���,.��_�ru�֝+Wolm���-�2Y�[�6�S3s�+��kEz����]/n.��."�~��.�W�U�h����jq��X����V\޾fZܑe�ם݁j�;��66gQ�
+�!���'#�X�q� \;{FF���'���������a�o���o~�[��C�����e/{��^���X?���z�~����o䱓��9qįҀ��PBS��+m�,¤�`��|LKz���N�`���567�9{�lu5"��<\Q��?>�į��aί�A��:~�4GX�`|�ٚZ��Z�:�a���
+!D�:���!�aQ�
+]�=���),$W��>�ɥX����I�5�3H,���g��u�TV��"͈Q�ñ�0���.��w��������>y�U������������Eb#����\ZY*�wv�v�vv�����66������T.��kq���9���������������?�t
y}�P8��7-��_rJUB��:T>��)D���f;�b� �P$�x��p��sA����N�*(OSs��,�%���
+7f�&͍�
+5����1�y�	�,K�D����9�ۤ��ړ]��5j2�$A�Z
�\�P�nb+/���jOpp�cv1mEVv��´U ��I̮�b�'(Js&y`����z{�D���T~����z���: C��28F���X=K[�
+�aG+J��2y\*,�UH���y��t�lJSlW��ڊēV-�����:H�u@�K?�j�*n}S��:�:Q�DR�����h��w�)�C���JU�UD5٥��$�R9���:��E�
+��4n��D�sśH�T2�R�'F�Jq�L���Dsi��2{��L�����2��bsP7�(�P
�Q�U9�������4X7��@�dP�
+Q���D�����UE�pTcG8��h��
�+��+w�c0p!m@�ʳ�Z�ۿt�ڭ�7��r����崑g//�X"��M��..��a�j{w����������������_-��-c�PD��<�v�Z(�7�֋�[6U	Oq���"��F!�V[dq��8n��}�H�+G���7n-.�6�o��?�������p�}��e���|�G�O�g�}f�9d/{��^�����e��������������#d��-]X�",:"��`��]�C�4���%���Ʀ���Gssm}ݩ�gja᱓'�Ex��?<�Y�~u��!a��S'Ϝ9}�le�9��k�q��+��҂E-B����UW7ۈ��a'�_�q�;_
�s2��-Be!��0�"w�����A��P$ ҅?�B�8�e8���r�����gSj���
�[[:{�\�P$d䌩������Faww{����������Vqumyfv*?�Kh	���p�������|k+ ���Ξ����}~�p�녣�X\��5LX��'�0�p0����o8�}�a_ ��vv�P8�
+W�HW0LPOkɌ�2H��.� Wy��̕�*���'���!aE�+��J`+Y̍f�e���R@F%�d<��i�0)��m�i+[��YA��M�S
!�"l5d�+���E�*��#��hB��RW����M�Œf�D����GUW���3��R�^2�M�3�G2gU����L�DЉ�l��d�+��/�| A��f",3pE!.�s���Ϋ����(�~@���z%�Jü����^SV�}ɠCqcTMy%�",U�Eߗ�E�ey�:�P9�K)�F>y��RfGj<�eMv��QE���vz��h����(��x�K�3�Q��1C������*C�+z��`Vq
+�a�K��w�����*0�����@f�ތƓ�	�"�Y%�Q�m�Z[�sA��!^�1�C�o�p(
+�*�~�3�3����\�~���ۗ����ޟ_\�dG tK�������Z��������w���K�k�ˋ˫��^Y[^]_b{y�������W�V��}�@�+�r_/�.��_����+�\�Eaa�
+cW�M���� w���j�Pd�ې������r�}������e�}��������>��������^�����e/{��weut�=�ȣ=������P��؆�X���K/���B��g�eo���<!��M���p{Wwu}]]C������ʳ�U���'�T=Vq���'�A��"XG��@~�-�3�*Ϟ9��kj����a�55��U+D�)���
��c�l`s�������� �"�",j��\0�-X�!@X��_a�0
+�
+,�p�ώį`a8,��{`��������Wu���������`0JgRS�K��������ۻ{ۛ[ŵ�����ѱM׀_9;���t�<{����X]]=}}���.���u{�^_�;<;0�c{8("I~�?�n�����p��X�p4�~���b�T�2W���
�V#��}�4s�SUH��x=��>6�ǻ���1'��ь��#����/	�O�y1��G8I���[�/m؃i+�P��LT��'C��$�'��z[��
+�`�#�ɕf��f�����2U�"U֨?7�U�gT��J�$(�/�2�i�mUB�Jy�Rul�jf���Yql%�&�R��RZa3uf�â`�H���V��*�n)G�*�]q���U�=L�@,�7)�G�W%~��f�Ӓ%ƨE���b����R&��&�lĔj��s%�Ô�3�]pԩxhNW�hK}Bs"�[4f���E�Da���"fEL��`G5d\\�%:��F]�UD�wqn 'W��`VIf���S����@5[��*A�
+���u��Er�b�=��C!�8%�=��O��6�/\�z�ڭ+�n]�xe��15=�L�X<��ӳk��ٻ������Uv���入�V�k�+k��kT\�v*	�������4��ؔ���o��*1�U��#,���^��)e�B�`mm����gjf��`�8y�������߃��[��������������g�g�_A�����e/{��^���X�WŎ?�я~��o|�[O9J���g�Ţ �c���!	a�V�%��k�q����jGSSM}��ӧ�*��*N?|�ء#G~)D�dq?RQA�c'O�8}�$"<[]]Y]]U[,�E��|������`�jn�8��),�Wm��������Wbw�f'ȯ��������	�A�E�?�F��W��%�b-�E&PBC~c��B.��wp�}�[��?Ec��hhr������>-��O�-,έֶ�7w���K�jumevnfd$�����]��--������p47#�jk�����������p�:��A�Р����r�	$��t
y|n���U0G��X"�HR�
+\��l:��Nb�z���QI��
+���*i��dVt^���E��yJ[���J�Gl�
Ap���*G:��Ao��+t[=~���ndVNkC�Ii+gV����sC�
+2WL[y!�'��i�8������*�'���"f7���7\��+�IB�S�2rT\J�h����YA�2��LFI0�S�*,�W""H�*�Qf�ʂ��g%�C\��`(�Za~��v���xQ1Y�Ȳ 2���G��'K�Z�3��*�]�L㞫�\���`DH�)ꭃ|\	�0D�����Q�8��p^��+JyΗ"�{�}F1'���'#��)>j;�I����L˦�dY��R��r-`S����w=hˀT�E̥��@<�/~"A�z�U!�"����D8�;��*B��H��0�A����w0E8a�S�����ja{�¥+�/_�q�ҵ�����5�:�В�&�%�����[ۻ�{.��N؛3s#c�ӳs�ˋK�ZX^Y\^���?�F=A�XX�Q��8p�W\x%RX��֚DX��; ���6�DG�P�a� l�n��n�챯ejz.�'Ϸ����Ͽ����o�������x�7�y�7��ﻏ�}�}����7���-h��������e/{��^������_��oz�����7���|-�"{�I6����EJ���ؒ,�G���m�=Z<3f�ltc_kP�¾j���ZQ����ػ�w7Iɿ�������E��sν7o@���y�q����������ʪ����=�_�q�W��;�M)XįJŹg0�=��K�E�JKg�L6����(���k�o���͵��w�_A�;�����.�Jr���������!	����p@#�r���Lq�p�U7�+��H��a�TF`���+.���P��0=J#Bt��k$	���R��B�.�TBA$�a0402��?��򵶵�[��.������������>=3��������K�����l�ۣ{�������mm��fG�����jme�-i�z�]]>�������������w`�o`���!6���m
���r�5�"�����L.�d�Z
+�'8=�jR��i#�j�uenD�%z�Qw���Of'&��b&�m3�@���!��C�e[�Ԋ�!�J2�����0cㄭ���bA�XE�U��-����w6�[��rY��
�L�Q��JKA1-��T��ӊ7���:�c��l%\��y��)�M�$).$R�Y	6��*.��rO%��0#5�Ĭ�S�+0s��s��҂z	���(�(��)�
W�0s&��?ݟ�ʖB�T�j%�Ē�i�ԟXb<L����g��P%�,UV¸����ɔ-�qIti\'ݣJ~�I��W3)Z!�T!��
+C��`Y�)@U2��L0��8�Jfaq/!罈�(8=�+�)u��+�I���+���@GQ!�B�.����?�$Ǥ�� �JG�l�tfbzf����G����|�ɧ�y��ׇ�O7���[�OL���]��-ml��?y��g�O>��?dK��w"������V���jcgm̓�|P����J2+N����!^����{�v�)�b|$�Wȯ ���.a�#<z�t}k;�˳��O~�^�r�wPpE���Kl\��"L/�q�…s�ϳ%��꥛���w�������[?����*����*����R_��W����_�z���_�/�����l���N��0�&b���ݘO���g�Q%���4����p���9\.�`5779���啕d!~��
+����ºj�`5�a�;�
+,�Ј�ӌ,OG��.B@XЅ��M�?����,������7��gH�d�{��'W�y5��+jD(S�Ga���?��h0$\�1a!d#��������pdhl�wp��#��-v�����io����%���b[��-�v��lmo�>��po>_�k�6����vu�����dg��� ����nko�v�wtv���������������'�5�?�����8�p0}����l&W�����}4W���q2�}ZV|�ybVSs\j59S,NO[�I��J}C�i�Mr6�c\m��*A'�(J��Z��`���j�V���X�	~%�F�)�
+M���
+�V���1N�R��!��$�ӳd�b7��Ȫ�Q!U^X�1�ȩԑ��VJ[�lA��+5��\�s���^�a�`S1MB��A�R�"��S�䶂}I�7�[�����D>�Ѝ��>�N��0�`4���L���������sh��U)�ʞå*�N>uj���o}�|KFi��^��P�9�K͙�Nx����w�|̔�fN��o#�PL�%
+���!OR�?k(�H@�i]�$���Κ ��LO�2��=b��\RG�0�Z��)�l"XN��z�F"�'	d%��K9�2����xRg����ʃ��{��O�~򛧟����'����*�i��"����W��wA����gO?����͝GK+����T6ϮZ�7o��������k(�ڄ�vɯ��j��+p��j�!�_��,0�pB���jB�pD!W�Y��}1=~��T�������Ï�������K���.^$lE���6. ��q���s�ϳg/]z�^|�����g�N�`��!����*����*��խ;w�^�~�ƍ�7^�%�Ԉ� z��Pw�Iш���L;���
+z�ې�aÑ��^���p9��m�����&WKk]ccEU՝����ܹ]VV��F�;!���*�`5`����鴹 ˉ�ֶvH��)X�^t!D#a��.�"D�����A�=<�{`X�E�+�`a#B.�B�%��y#�8J�@�~����	�bZ2O"���@��HWo���u�ݐH�t���]�C�C�X$�����,�_�؄.��g{{s}cm��[��g�����XO_o{��mhw8m66�W�3�jnmm&Ga����������ur��#���Z826��0��P|�	��fG���W*��A[!�Ҭ9k'g
+�Yql�j+�F�c+4	B{B#�W[�b�� ;���F#١����*�Y��V����'8��12	�x+3�J�W���2�	*�V�We�E�UJ�`�$v�F��x�l+���C�U��b@C�����4u��"*yk)�O*�:^�1-�yQ�4�s�Wh��6��Z��q�k�yEy%�^J�VZ�l�q�fsѶH��&��B���/1���d�)�0s��a<-����t�D�ČI�u22�aeOz�`45�>�-U��%�F-}��҈��s3fF���i?�VI�J".�_��$��:+dYi>C�$	���J�0�*C�?���qm�!��Ɠ8�hL8|��
+�V	��
+E�'�LM��-ol><8z���_��o��|�h�`eu�85��7)�S;��|k�������O?��?>���;��˫&�gu��JSO�ə���{��VWV1�jkl�[뛂_m~"+�nsZ%m����-vq�,hD(r�!�
+JfE�W����?8z���V�
���-���w�{�…/|�gϝCl��TX]�H��<{�̙�l���.=��/^�z��7�T����?VYe�UVYe�UV�˪��y�M���;W�_������_��ꄭ�S�B�%sݹ��	'���V^�#x����djX�`��y\-�Uu�����Y][[^Yy��ݏ1ŝ� �����UY[)Xȯ@�����v�A�E����FL1�X=��:�R-� ���AX>jG(�۩a����с�1�`� ��X(�GƣЈ0'��`�
+KOAhpBF�����({���NWk+�\--o{oo 8�ԵBqbaqauun�6��?������b*���C#�]~��6�;�6[=;3MM��&Pa9��f������n��y�bu ����}��*�B�H4�m���-��� �Lv�!Wb�ތ�V[	i����C��=	[!�y�P[A;D.�	0	& �]��(�S�C�VoE=9�����J�\�lvLeF0����"�UD���fGd�w⹤���T���V���1pR�(�=���'��j��� 
��J�o&��Yj%}j9��K�
���Q1-#�#fV�4EdʼnPJb��H*q�Qh�A?���LHe�k�K�z&.aW2#M���$y����J��Ą)nK�����S�T��U��	ae��y�PՀ�݋����x.s���Js�
tV��e�Vė�KQ����椯S/�NK��O�y��r5hϗ1u��j)|)�`IN�eq+�YH�P^�>�y�\��L�'s��h�[Q(�ؑM�4��X	Z��cҞ�l�P8���|&_��[\]���C��g��x��c�dzv>���Pb�.GsKk�$gz��o>�����VV'g���|�z:Ǿ�&���ӳ3s���@|����5l��+~���p]	����j�u���Q�'Z8�Hu�,�3������ᓧ���Fb��ں������ڗ��̗�y��ŋ�!xQ2+H�Μ/��]����^~�ƍ�����7�_��_[?{���*����*����^�H�u�F(�������Laj� ��E��B,��b��D����nj�MFC��D������ry��� �������D���u�N�p�� �������������Ʀz��R�\�f#�������.J��F�=�=}^�R
+��E�>�"����Bn$��5�B�`A�;��"	V,��d,	4��R�����Cc���~�����;�6���t�xܾ��H�R��������ŕ�e6]�7?5=��e�Z̃����r6�mp&ٙih@�ek*,��<n@X�vo����������D,�`
�������� ���y�U.��A��N��ITU������¾���`I�ZM���Tn�K�[�@��nWQm�
+nHѾ��ʡh<�6�aʶ�Gǩ����_J��X�(�^�	��}������Nj�8���WӉ�Э�&$+$�Jq���W"_�d�T���+Cg�lH�Jİcs7��͙�������H1G>A��
+�`��,M�P1.���
+8�&|�x�>�b�Tn�O��� QI�~��*�0�t\��Z��WûT榛¾d���i�%��p��[�J�J��8%gb�D�&y�iD+���(��ɴ��рK���L}O��Nѡœ���
+ɡ�G5�����'�\J>��P:ŭ��b����RH�Hd�̊��i�d�����\�L
+�_D���?�q�R�;
+�1
�8��]�&��WV�>:8:�|�O}p�ds����b&7�MK�7R~zv�������'�O?��3��
�w�I8��b����w572Tv	&���������y�oRl�Onߦ���E�W�,�T<�-G�*��_m��<�;�dGB6s��_��ٝ��}�ݯ_�x�_����\�G���
lu��g�\�x:^�|���o}���W����Ϭ�9VYe�UVYe�UV�K����?`�7�|�ʵkW�]������eT�L��7��r#!�o�*�8wJ�� �$da��0����<^o�����x�5
���f������NEyY9H�n��.�;ԅ%X��U__����Q��)Xm�`!DZ!���X�����ψp��G`
�����A�W��,�Y���G��Ga���	aq	�`i@H��H�R�$��S�(۪w`���nmo�0x/vgs3����Z<7��������[��������O�{�d(���i�z]--Mv[CSc]CC]C=�+Ч��*�f������8�N������0���
+r��-[$��W:��W����]��WSl�hT�N�!�y��'s�b��1H����7�:f[�{�D��ށ�
+F��a�Z���F8�R�V�-(��)������$��b����*fV[��7�8���d,�����ʗj�8�"��/!Wi�I�y�Y�zҝT�虄�QDVb("+3�R�(z*R��0��f�\�"�J�j�4A�4^�����ar�R�uҖ����G�zJ�zu
��͉�UL�]����S�LQ��s��KA[�*,Û0�Tܐ�k�i��Z
+U���W;ƍ��{�l���)�|�ȋ���
嘉�ō�:���A�b�T��\�LV �l2ͧ��s?�F��(�J`��W2+%z����70I:+R^E^œ�Ʌ�+������0�l'���ť���G��'H�V��/&�Vl�T�8=������p����1����_�ml�K�eE�c���_aZd�ٕ�.���K˫��זW��o����6�I�%��e~��p��n���;<�jk���-�
B����;�G{�>_Ϗ��o|�[/_���g�9s��\�₫��U�g�e3Ͽ�•�Wo��ꫯ����W|MM��;�*����*���ʪ����͛�o�x���@(<9=[D:���XSEї��
+�y�s�@�u�����A�;�� +���9�Y9=��[S]SSs����`�\V�1�",�{�",6�_UUU��U��V����p49�vlD��������zeV[Wv!�w�W}؋��"��Hʫ~L���2����ˮ��E
+��!����B(�2�GX(�J��TTK���hld<�?4�����z���M;DW9�wWw���`0ԴD:����O�\2��{�Q�h��@GW'i��	l����Qd]�į�`�[<�so��v����~�#��_����ίؽ�qKes�vpZOr��\!��>�ق`Vl51���(�*����3�F�`���1�
+�V�`������C��� p�.�R�4WH���>A�'a���*w���HH��_S�@Oy��J��*}J�\�B`�S���J
����;�j%%F\E�dT�eI�1!�Õ�"$A�ʵ��JFi)L�bZt
+�+%"�TU:#���W4%��X��P~�\W�j6̔�VLȦ�%�M/	�JI%���qs�F���`�#�+���	���OQ�R!?��̘���τ�I��-��)]�s��5K'c�H�>��TM���ȕ�Cf)�
+V�Ҭd6���q	2+�VYh�O��U\�֢ZL���f�#APKƳ��
+%��3�����v���?��㧟=�;\��ƮK��������������h�`���ѓOc��^c/E��<`@vE�%�DR��lb��S�S3ӳs�įVV��?@~�������7�amml
+!��E,r��v[ۆypCB���#�~���p�[���7^�q���*��	W0�_8w�ճϞy���Ƶk�_}��+W�~��T����o���Uc�UVYe�UVYe��z�6"|��_����7n��G?f���BȅX��f�
+�Wl*�(Ă����{������=^o�����im����ۜ�&�����ne�n!�kH�PU�S�j�����lįl�fGK����a�UX��F��>jGHK�X=����0d�A���W�)!�{�F�L��(���E
+���b���:M#h!
�G�|}}m��.����zDW9[\��ݽ=ã#�h��E����S�T2���c����Р������lnn���j��^q~��؈]�n!lq{Z�B�
+"�|����?�������aɯ����ʀ�*�
+�ۉ_ax{��f�ǎ������	\A�
��O]��-�
+�9� t��1_]FW��&����Ј�B�x��d���ƸO0��V���Vp�5t!��xgʠ�&A��:�����\M{ !���J�U�P[��Pqfy�d&g�!X�����L0*e�8����"�a��`�2�/��h�r,��i}	�4U���J]�ɭ�WI���tqU�Y�%�O�2q�LL3܅	�m���"�Ӯ�ieN�E'Y٩_����R]�>�]�}*�T���1ؗ8�	ݐ�))dRӕ�J��xPEs&�)}�)��R���IL1�r�_ўL��R2*<$�"�U�DV�!�!o`�N#�Y��c&��1k�Q�ViQ�W��b�$�\�uG�^2���{�6vw��z��������S�����v-�/��[z����h������ѓO��Wس$�cד�P�]�±x4�ŵdBӓ��NL��*9���������ʃu�V��$fEڪ�M�Ya<��T^m�Ip�=�BZEY�[�po���~��|��f��7�q���/_>{BׅO��V2���ٳ$���z�7�x��w��We�Z��_�����*����*���ʪ
�~B_{啛��>0<2=;AX(���)��*LMQ(Q�\�g��"a.������]���=BO_���lw:ڼ^6�khp���55UTW��F�l���B�{EEEeeUm]U]5"�	���t9ZZ�nO������V[g����"��ݽ�=}�<����LW_���O��s�E�A��؊TX$��$�",H�B	�@X��?A	�+@(��`%9�
+�c��ਟ�n{����fs9�����fw����o��{4
+�#즍݈E�M��?4<���i��h�ƅ�UM}}ummU]mM]]��6b
+�
�WN�_y<�Ј#��D�{o�@o�@����D`�Q~{��k�QOeә�l~,��ӓ<�j��V�-"��O"��l��4�?(=� ���+�Z��Y�p� ��V��ƇF��#�Y
��I�����&�(&\�^��
%� W:W[�Lu��x�@.�J)
++(�R}�E='큼��f��|Q���)b(S⼋��P)<�4�h���M�V�ꬴ�Xi�S)#3DS2 �&WS1O�HJ,WqY�y��.T�X4!�'*�K9Ը|��RD�X)S&থͺ/��R7�u��D�l����V={�I�D[��2�4U/��S�Y��.�E��`�R�/��g��t�ǓЕӨ
��1O���Q�d�T��E��
+�U�ߟ@XĬ�F�f�������*�KH�@��%"�j+��b<;�oŮ���م�89�r�����O>�5��O�vv��-�KPc��tvzna��:[�h�p������'�7�������aWU�m���D��%ө4���@ͮxE�m�_X����tmem������
�_m�oI� &_m�l�<�`c:�����!,��`
+������#v)����w���^�L��3�0lu��9\a2��/�p��+���o���W�&�������z�7�UVYe�UVYe�U����gӷ��+W��x���?\��:	Q���&�1��X2��Eޑ���!UX�a&��'R������4�s�64@��U]WW^YY�,�Ww�E�)X���5���uu�į��1�����pS#¶V�_y��!��������a��R��yp@L���5ܣd��AjD8�,?�x
+�X(�Gx�;oD�I!�k�Xb<���u��F�
�����a�����oht���~6?04���y;:ZZ[�GCScM}]u]
�ښj�W�쎅7"�Q����L��v/D`utvR�{O/E���C�h,�AO�d:��f��l�8�7qD�r ��B�ZDAj��l�4�c�;eT[�'�0�P$�NN <����*8���Gn	$� +P[��C�e�U���O0�섭"qq�5��\a�����G�7|��Y����#�bI{�D�
+�!��J�+_):�t��
+�+��N��D���MI���MI(M�d��d;|}�s4
+�>iB4�Y�LTV��~��.v������G�WL����-��(�$�܄��(���h�0����.il�o6�'�S��S�г�qbKEki��C3��t,�8q6��:g����/ͶՑވ�@���]+�/�H�TI}���������o-P'�S���).~��*�$J�S�)���Փ�QO�R+$WhD�`8���B����Ʌ�f[A ^8E����+�ۏ�!��'O}t���G�+k��$�f��Tqjvyu}k�ѣ����c����㝇����?��Ӂ����A�
+N ĮK�0d��K(���T�Uԧ��e735;?=�0��H����spc{
��*����<ks��)�dW����`܂[���;�ã'���/��7n޼x�ҥ�+q^�HvEpuW�>��ŋ_z��7�z�ͷ�f_��w'�����n����*����*����_g�r���민��[��3sEBX\����5e$�c"��"D	V$X���톯������mo�۫kk����Ԉ�����;�~�į*�@!I����6[������7"t�{��!��B��k�b
+��UX��.�$�� ��A1�,Ra����!��F��`h,&��%�F�p�p<����}�#]��o�����n�ol�k�o�5ٜ��֖��N L�����C��������lv��\��r}}Um
���U`�$	v!llj�ٛ�Bg�"�<��į�����-������tp���ӹtv"�+���'Ӥ��R���TV�l+�Ң�m�&��} D(�
+�U��V�H�1$W[A����V�`�;�B�q0	�O0%� �aiL1ڨ��x�T��&�U�h�*(�E�IP��'�	b'AoE���]!(SR��Hv����vT2$?AHe2����L�@u�hB��# U�QfM���c�R�/�J���$�:zL;����̤�R���)�Až�EFƗ�s�FM(�&���0P�"}4Q�����Jh	|-�`Ѽ��Nq����+�$�L�vI�r?�$���m�e�,>�T�Ntz9�I�$M[i���%$��R��DJ���D,ML�'Zĩ�Tg4L��'Į��y�h1� �� j&�`�[H	W
+f��V���ٳ�L~v~qm}{w����O>l��ĖLMϳMp�Dn�xo�����������������ù{K��H����w��������Ό�
+��
+��$���4D�er��D._�(N�f�f �}naqqieiy����L�z��Q�;k��� ƶ�+6ot�,���m�n?���?`{p5�~���җ~b��{���K8.��˖�Rp���o�����w�^����h������/����*����*��5��|�������?������N*,BX8?CB��r�<�=[(RG�T6���_���𘿽�����$Xյ56���tUC
+V�rr/+++/��)�l9���V�dk�;��N������F������������E����x�b�������v�P%_��BH���!��>�S�̍G��P�
H����X8�b#B��$�_A�{|4��~oWW����p�56֢�����lq�s��m���:|]����������3�9�����Q]UYSU�,���h�5a�;� l���=nO[[�����"ܻ{��I�54<4Xc����@�-��@W*�䡍`:;�grlI��ٽj2��ٝ`4�6�!0	��$��j5T\d��jn$�FX	l5*�U`�c+�'	�b(�B�`L�'H�
Mi��$\��ȯ��$+�S�s2��ȶ*�]!�۠�IpBC5����@�I���9�J&G)�J�~h*�T�
+A3���pd5��n�L		�8�b*݄��K��,����UIRTx�$���O9<08��jz	�Sd`
+�­82r�R1��<�Iz�T(�2޾xݸ���I�0�8�.�[	!Tf+��1%8����'���ROE�IJ6�_�UB�����ȏ���G	�E��һ���=�pW�U�MSW�(e�֏�.�]��	2"�⨊��$v
Q�N2�(%��`�8�1IjEr,���+�a��L<f`�85�����h�����O?����������R*���Q�[6�vv[���-�m�����k������郫��԰����a�U/wzBO��'j8�+��Wqrj
+��3��K�����?x���`cs��&$��sY�6�,rJQ9
+Q��h4�����3g�y�
+�24W��(��Apu�[���W���W����������`�D��*����*����*�������nܼy�ڵ���Uv#0�por��y�b��H�sݱa�8E.BhGȃ� �
-�H<��?`onnr8�;;�NgmC�����WT�ݽ�1������jHq������ojl���N������r�[ڸ����.���N��N��xBjD��W���_
�k��oJ��J�_
�
�����W��5< �(J��)%XBX�d(��h"���lW���\���������������F���lmnm�a��xܮ�f{�2���^ݭ�(��~�4�W��acS�+;F`��4���6��j��vvu����u�������fhxl���P4L�4��V�sGfŅ����
+�8��6��@�1v�dȾ�ddw�8�C�_�����?���!<��� l�VA�V�,���46��*p�d䫣�cBv�+m&���9��Dk‚��*A&A>T�u|��D��))��L����*��*�B�,]�H��$/~�e�%`I	NR"���>M�I�M��Y:E��R��4�$G�2�[�L@)�Ie�9�43��E�z)�E�;qx��Q�QJ�?QC���%]��$�$.�����ǒ���@���J�ĝ���+)=�ɧ(^/��pF�&$K��9Td�m��	������؊����U�����`!I�"`	��Q|I�"B|�+���x+.��ƒ ��$�%s���om?:8z���g��|vt����������d,��k��*N��~����wx�wp�pw���V�0ɮcm��vec[��Rv}cW$��d��b�1�>��[�泹"��987��8o���+��Zۀ��u�m��J评�j�!�m�~���겶f��}|���.�_8{�.�x+�	��[�={�̙3�Ο�����|�����^��O~b�8��*����*���ʪ��G��߾���_�z��+����`aiyrȕ3F_©���44"�"!��|�R�
+���"Les�|��2��]]Mv{���no���kr:l�暺�
+�`����n���W��ب�����",hD�j���:A������񢅰$X<ˇ-{zِBn$��U�p�jP4"&9Vz	i	�!~�7�������(a�
�E�WԂ�=;��
��q{����������ښ��ں����F���r8Z���6���746��ձ�_Q]U^Y�L��^UEMUUmmM}=!,���Sۼ�\m�6�vy��_�z�_��p��5�.ol���d�#�(��Z2�R�$)@j��� {�A�Vl�j,�rf%�]�j�a�V��+̃�����'�V"�*-5NJW��n�V�O���yټ��cNe�A�LPSQ�R+�����=#��?�8��FL��?h&1�Y��wbȄ��1�H*�">�B��[��D.�g�(]�99
�d����HIE&�zlšw�ɗV�f'ߝ"�ވ�M	A����Tޠ�_-b���Op'�l2j��䒤�/�4��+Ϧ����\7�:^=�S%�����ۄF�3YI�0"(�!BK�(Ts��Ht�<���VD�bq�Ŕ�a�Ē4f ��'����CQ�'�bq=�-���[�����O?����Ӈ{��l'g�d:�E�Z�P\\^��yD�j��hgw}sgf~!��w��إ
�i�=��?�G��Ql��`|<���%�`��+����4D�p��x�M7��W��A|���>�!�j��
+���js�4W�Ӿ��>�������?��2��3�\��v�aX[��V�q����������Z?H���*����*������k�^}����^������u��[4�+�b�8,4�v��"��y
+�&�E���ф��?�hnv8���������Ro�S#B��u�Ν�rn!���VSUUUWWMqO�M
؈���c�{�,�����ʰB�;���B��������y��0�
IG��r�.�Јp��(k4&~�&B��D��`!�DGA����������4:�#����j �̀� ��h��چz��������.�e�S�ei`�������1,�M
M<���r�Zݭ���vtz;}��n��(k����������H,�CS?N�J:�� 4 zR<������
�c8?z"�}�+ǂ���I���q��J$0�*If1J�Fd�Ƅ+l)��
+��u�.,��t^F]Az����&��Hv�
+l%�V&{`F�L�`+�BT�<R�Q���	�>�$���"F�QR����GJ�)Mʀ0
+�Qw"#�"")=�Ka�T��j��"O�(GhȊL��,��k�D�u2А�ۤ8��Z���$iz�ƫ��ؐGE	ȓT�]�Xb�/	�RbMMUFET%��xJ�{�*�"\҄�*6 ��k�E#N�h��H�H��YV\S�����ճ��xP��+�+�]���ES�4�	�<��؏4�l����w8���痤V��Ga<I�-Z?�j+�\>�G��O����Gk�ӳz:G�<����_z���p��"�?�;\��^XZa{���y;;�{|���}�}�u5�~�ʉ\�����
e`��)MOCo\POP�A��U��������������|��VV<X�f��(�Z�����,�	B�������<����o����K�;W�ͮ�+#��͜�p�ʕ����f$�_���կ��!VYe�UVYe�UVY���nݺ��w߽r�ڵ���ӟ��[�"	���I�U�Z,rNS;B����"d3l:tt���V��������[Zj���++���	^�
+����%X5�j1���p�]-�V����{ �����&vt	�^$W}h!�.�\y�f��E8(h�����)�Cd!����p|$
����x$�ƃ�Dn0B�� �=6a��������fs������XYQ]	��5���d�����4W���w�˱3㝒p��j
+r�#aX���f�����ogW������ۇ(a����h���&�X0�Hv�b*;b+ Q��>:>8��An���hQ0��V��\mE��x(��,� ���L0I)��7�l��ف>aK���Sr*VAC��� e[�謒̞�$v�c7[�Je7h�.2��q�(oȨ�����@IRp�2Q�S �DUI�w���3I��%�.��R;
:��'	F~��)i~wI�sUߥj���c&2��O)J��`M�_S!R����N%Q@k��Q&�V��`SZ)}*�IRO�ɨP�Iqy�Y�"��5��H<~��T�,]�U��p�/��J���r'fZ@T]ꬰ] �a`�@�!H��D��P��ۀ�I0����
+Z
y&��~�1���L����V��w��>~���O��7�.,���E0&�ճS3�k��~�>����{��3���x;�<������7�c���o`x`ht`x�R��RK�h�r<��踦���vP�&�웋}��/���_-,.��΃����[k�h�Y#!�X��ml��gC�hEe՛o�;:��_�p�"	�.�ꂌd?�؊�.<���_��������*����*����*��y����6��r���W_}�����^gw����������"w�(^™��ƹ!a�5�#�d:��(�kp���j��Ngs3�`A?�J�`�)�EG�",��*.�"���r9Z[�n�������#����� ��rbV��¢,�WЈ$X�0�\
K��)X0��U¯�"�]iD�+.B�T��`,>�����tRB����C�WeE9�[ћ�TܽS'�	�pV�sRQA�k Ž,��
<������.�����I	V�+_�Vo���"#�(���C�y��㈌�7��C�������Y�Š�ՠH����lM?	��$�"l�+h)h���x�$�FQ�4e�k�`���A�h���ʀT�|���.�V�VN�t�$�+������
+fR��Vx0H���*�4�3�?g�~�SR#1 �n�s�Der�%��K?�}�fE�I���bJ��W¿fY����*�A&�sBae�zR_3z���Sr�Z�� q~�ʓ�]D�0�Ni"f�@X�\JaSƁ�Ъp��SR|�+�B�����@r,�N0Ok�]�9����L"��d(��p��G��B���)�U[2�B����:+K�ō��tJ_�ցQ�V�d�`+1�#N	�Ѹ�����x�������7����!��ɧ����w���S�d��P"��(N-���pw��������c6���`�0��:|��6�����;�h`�l��ap�Ү�gp,�= ^�g0��Wq-���YN��z:�������h��g�ff�^�[���+֠�������tcs{csg��������H4fs8��;߽p���p�ե�%�ϣI��9N��c�[�_z����O��O�k����O��VYe�UVYe�UVY��+�����߾v���k���g?������'~��#�"�	)����Eًp2�/@/B_�ҹ<�b
+���no�x<���MM�v������7"����BkTVQ�G"Ƚ�����p�|����۽������l��"	�Wݽ���]�au�"�R����"�{��c�^т�S,E�E)X#���S
+�+�W�[T0
+AB�X��BȎ�s��Y��PY[}���Ny��ʅȪ�6��;Ԗm�eD�贀���x
+����;�W�����v7�`y�	� w�"�^�C}�C�CC#�ã�#~$T�a��󄭆��ã����ʔp5����V!�V�O�c+����qn��V��ql��
+�
+��l!�5��q�$�
+Z(�0v���P�"+�I0G�DsA��j���j��s�L�$O������Q;͝`M�?L�Jf�#	O	RIWRг�ilJ7�#M?	�J�uE�9R�'Η��
����DJ�O�k���[.Q=iQe>lZh�(\�����:���8�R�TqMP�D� Wp)�K�(�����ľ��hh!���.!�%RL)�8��(��r�`����f���)�6�#�c�¢��\i$���*�Q,��X)He�B?�`(Ɩ���3��w��>~����Ӈ�VV�&�f�z����l�0������:�l�dw�heu�05Î�w`���.\��nv��j+��AI��1�=�!J�t4��N
ٸ�H�z:Ǿ�R�l6_�N'�S肟�����]��8�`�y���*�u@X�w��Kh��֟�ǿ���k��	WK�ru�ܳ�N\��˗_}���~�\���;�nݲ~oXe�UVYe�UVYe�?�����bӷ�~���^{�ʕw�{���^XZQR��8��)ί$š�,wPa`�1��U%X�!���:�]5�
����&zB	V��`�)�W�t�F�j��l�F����7����ikmkw�yy�;��|^�O�Hy�ك�^���� F����a
�u!�%}�#�8�Q��p,��0�����5����l��Q��`GwOk����\�d���+��do������wn�)�����w�|Tv��������>�){�LAX��l�%X
촐���la��
�U{G;8+!ȝ\���>6z��� �F0�/��� fX)�V
+�⚫Q#�}����{I�V���DlEE�r�ͳ��ڊ�+l�'c�����g7"�2��5A�7� ��Ig��
�H+>���ڊ3+Ѓ�a�Sؔ^�9.�9l���'4K������R�S��Z'�"���f^��d�����&r����Jߣ��$>*Qa���X��ɵS��D[a15Q�d���v\�d,1�(.��ۈ	y�vR[�b*��v��"<��6�		>�S�UJO�GC`+\A�<�]!�Ҽ&;r�G)�0ȕ��øa�aVQ
+`�C�@r�wjሆ���d�)�]�g�>;�`����o�}'g�Vl��==~����Ov���mN�.��y��Ofr��6���:8z���d|���m�]�ݽ�}l��k*ʮ�{@s�?42�	{�#p��Bl@�	EblP�U,���vP^e��H&�^=;
'�;kfj
+2�g���-,-,-/.�_Z^�����յ����G`f<Jgs�6��/������◾��_z�¥�.\��M�F*���g�`�/]z��˗�\��կ}M�����R�*����*����*����ko�q�W؏����MLN�%XF�����SF�;���RV���Wԋ0��:|�6�������u�;�.H�����]n��,,�W�5�\nqO6�J��퐂���ikmowC�;a	�U��^rv*.B_��%A�_����WC�4�F@58L�������"�pd<�,DX!���C$6�}C�]}}m��N��Mcc������V��޾���o}�N?fK>"VY�<-\��)X5u��Yik��퐂��lu‚F�޶��6o'�"�����������8w�w~���q*?�ac`�*��!�O�w�B�`��Tvf�ql�*��P�x�WD�Pm��eTN6�H0Jt	,��9(�LH����y�9WX�JS������YѠ�x��ₐ��t3�:)�*A[�o�P'%F%)bfG�1���B�����DN��:�JV6H�l�y(��RԤVJ����VH*(L�eN1%��)z�*,�{���AIfE󰟤��k��Q��/A*!�RDUD�h9'K�ƒ(���"B�#��9Ԃ)� V�i\�P�
p�����E�A
+�"1�l�,L��	yQdP(���0�I�������h�C3�(�xBK�S�+[��������{��7w��2ىh^4����]��`}��u����������{��av9j�vu�z�{�Ap�؊k��-8�?4����A����t|d<�G�s 	C�TLkO$� �$�U
+l��\*�g�D�B���������c���"8�<�m�v=�����7�_��?�7����_���={F���Im�ƙ�g�}W�=���/��‹�_��_��c���|��]a�UVYe�UVYe�U�m������+_�ʍ�7_�r��w�i��\X�_ʯf �]�	'E;BDX<�x� ˆ��cZ�x���v���.�!59ZZl���*Ir�]���� ���,��
��lv�:�������@�;��_y:	a�t�z(�\�=^�,�sa���E`u�wίD�;���"��c�0�+��G0������x�m�^���&	V]SSU]my�N~XVv��Ƿn���~��G�>���nѺ
�D�{J�j�)���hs`#BpV:�E,O;GXޮ������*,b�
sm�O����Ig%�V\p��d��G �F��DD�i\�V-e�[Q�:��R�2ɮd;Wd��*�U��)�}��#c[�$��H�O�Bc ��\w^�aP����ENH�N�c@�HSdN���¯�3]I��	����p��r咅�ʜ���O�I�R؈�*9�dج���Q2�\ك�ar��j�S�AJ�RE=���
+�b�R:%�O\g%����b$�2�-!EZ� r'I��a�}.�l��:;�	ji�(Mm�(���Iͅ�A�ީ;���@;�L�sW�`�l�HL���
+b;�YE��*(�"<���}������|an~im}�����1��l���[�Tvh%S�M�|���t< ���S��?��vv{;} 
+Er��+u�ץA����38��zc����N����D��l"��ʫT�U6�j��+L*��y6����-�/./��������~���?���w����_���<�̳�b$��'x�����x0��gΜ9{�����/���͛_�}�����m����*����*���ʪ���ʍ׮_��������܂�W�%YX��*L�)��#�� �f�cV�X���?�&��$X�
��e��\�aE�+6�`�{����Ta#B�ˡ��tٚ����_Q�;�`u��]���!VO��B�W^� �U?��h*̃��<���X{���G8�B~@	V���a��
+#�"�����X��PW/H�\n{��Us������Gee������[}����>���ْ[�os֝;�e�`�p	VCcSc�
:A���v	!!,2B;B�0B��Pa�[E��!x5hX�O����5�*����*C@��{�)�
+"�(>=�q�	�N�	J������݅��.�6-��y��lI��9�J�a�<��4l<Y"*��EN	w:�O��4���x:��O	;[I����J�{��n
+8��	$�����)M���u���s`^zT(�B̒�F<M�)ތ��$�Q(휴R�D��}B:ş�T��{��O�TAEm4C*CC7������O:
�<���тg#��9�"��7^"܊�1qE�Ae�D���I��J�*TXn"c�c�tO@B�+
+�� +N�
+�q�d�!�
+Fb��QM��fVl�<�?<|rt�	;��W��	-�Tv�-��|�L���||p�dc�Q�8�D�G����IMQQpe�*>A�b�I@���0u���r�L�A�FIy���m�����TFOgS�|v2�r{5ɾ��W������������ַ��ON�V��~����w�z�ҥ/?��W�`v)�:w���Vg�=s�-��矿��KW�^}��7cѨ���l����*����*���ʪ����{_g�o|�ܼ��իo��64"\Z������1#�J�rG#���t~r
+%XE�*���?.;1Ӓ}C ��,����\���hnn��+kj!E`ݽ�˫�*�k*a��7`���[�A������vwG�+jDBo7L;{�E��������A����\���!~�)XIJ� wa!�1.�(w�,wȿ�;��`���6����������f�������SQ����e�oݾ
��?��C@XlF������|�K��*���aVCcS��ns8A��lq��e���
+�EYX�}>�s���C�ER����1?a+�6�	�+��N�O���x0;XQm���	�R�TEVf�UA<[L�$vjD�͛��>
��ʬ�$���@�$���
+�8i��L'5T�4���t�M�t՝gb�d��w���!?�(%X�
+����r��K&JIw�%�
+�d���[I�%�TQ��Gܝ'B�CJ~�*�RtP&��柗����@'�R����B��J�FXq�T jZ�4Q��BO�������T�,��������	E�\"� ��Q�r�br{O���I,�̀2��G��0Ɋ��#Q�H"�Ъ�Ҫ@0
+MC�A&�E	Wlʖ��<�>�d�09�����������o�553���p4K��uq����&�[	�ࣽ����ص��w�e���~L�x��O�
+�ؔzCH;8�ѳn����x�/�U.>������Ȯ<��J���l2�Mer�L>;t�f�¯�)�\��������uO��'?��[o���K/��*ȵ*�V��:w��ٳgIpu��^�r���kW�]}����/����֯����*����*���\7n޼��+/���/~���|az��"4�a��p����,Jt'#!faӹ�T�R�&�C��ή&��������p�\�چC��F9ދ���.j�*�k�EXWW��X�!�����t{\n!,r�"	V�������Q��A�P��l�w�Wh!�΃�<,K��)�
+�+,�_���=l�Dl!{��68�g��	V�����tՃ�������ݻC�;��Bx��[}x����8ºSf�"�)Xu5u
u
��L64��E����a�s��g�w��BTro�+��7���ơ!	���0��Hp%��_@3A�yLs��Le� �
+�J�UP���+�7�#,lE�@�]�70��y���)�_:�g��J0�t�,�:BeD����S����;�Nɏ"�%t�x)y��)��5%��+'���T��<^��*=�2b�"�dK",��+�HBS�!�*��|���e��0!��]
+�iʆF,UH%W
+���*
+��A3�B����M���o�ЉT�X4Sq~�+kFh�I���f�ϓ�Jt�=�e��,�H\OHy�]G��ȳ���a(����$��̊+���8A�A�y�f���l'���?	��8��������;::zzt����㍭�soE��J�f��J�{���O���=^Y]��L��HO�@Ww_�����$���AnABX����V�[��7� �*���E��v���Sؓ)�Ay��W�=���¾Ő\������g�qW�^�����ٳ�/\ ��Ir���g�=s����W��
�|�_�翗_�������*����*����*����7��M6��?���7n\�v��k���/.O	��B��Sݧg�,�B!6",����K��#����l�z]-Ђ����h�,"We�"Ž���"�PkTUW_S���Ehoi�9]N76"�z�8�aG��������=ax{��R������2TXF/B��!�B;��,�W"R�A��-�Q�X�#gO�C$�b�o���q:[[�������Zt�7�X}H��[l�e���$Xh�,+G	o�H)XM��$��	����j���� �b�%X��E(l; ����d�m�`��	��*D�ׁ��섭d4:�%�J	�`��
pC���S�<�	�NQW�gES�Ҍ��^���9��RQ���k0o�V'��J�T�iA岡�=��35�d$�����\�4���G�K�<�w
+VRR�U����fw!6�K�b��P����N�dp'bJ���vNϚ#Г!ـ�BU��O(��Ѫ�`SB�$3�8���X�`T,�)�J�f(�NaSRF�
+W�pp0%Q윖����8���
+�=0�c�0��C�Z����!&e�[�SD�x�[�����@��%!�d��4:�O����1=���Yx���p���|���Ow�--��'&��$[�}��w��;�{��G`<~���m3Q��w��u���i{��x+He�`v�����g�r��� W~rr��#�0�]!ͣ>��T$�_q� `+���29ȼ��
+EP^Mb�Av�l����+�s��KϿ����UfE�9�:���YJ�:���/\�v����~��L-�����G�o����*����*�����P�u�y�`���sa�@��J�a��8�*��l��-LfD�P�����r�x<�����zH�rb#BT[��	]�l���`�u�a������W[[K[[k������	�W>rB�{go/�+.�R���h�-���w�I��vB��?���`���W�@r��P�b�{��4"��jik�c|={;�55����|�*�n��mT^}���f�_�|�
+J���&~U_��m��dw���ٍ,���!��^�;ʞ�AT^
�gp�
+R0{$ ����¾j�$@��&AT[q���+��RTU4#�	�<���u��Pg��*�:�j�UF`+dV��Y�|����~j�xio�Ϟ�/|���/|J����D*���~n2��S���2��H,�(�>$��?~������1i��P��P�N%L���ߧ��B<�<q�!��@0T������O�R�tt�BH�)¦0�����P"�����M!t�J�+2F��
+�l
+0Ը$WQPU��>2q(:.tVRs%dW�q�Y��X�Y兣��
+���*�GceBUl}���b���!@X�_�$Xa3�
+�O0������g�Ss+�׷wv�C����G��k��S�	-G���Dajium��������Ӄ#�V����
+���.���A'�!v��"�~���=̹�Er�O�g�:RcSlA�A�v��+�
b�U\�As���J���HS����|2�����½�{����|�{Ͽ��Z]�$�Յ&�����ϝ9���/B��o<������/~e�����g�B��*����*���ʪ���؈po���l\�vmxtl��"�+Ta!��6�%����>19���*�L��n+�T\O
�x<Ј���hv�75:[[l6����+5ewp�WVVb#�*hD�)XvhDhw5����x�_�۽/I�|��A�Ј��TD����Nk%X��NqX2�UX2k`T����0,��G��nl�B�Hq����OGg����bo�V]_O*�������������9��!SܕF���:vB��4�wg��X�E���9�B�;���40H�B�������6B<r���� �l&(���O0#}��RP���K	K�n���6�8a�|��Z:�J��I0��$� �$����X��<�$�GN�J%Ok�WʋNt�;�=_��'5Z��.�S��z��J7��
+(I��J$��)�Չ])-S���R�x	.�SES&5���S� U��������0�\)R�RO_H��DƔp�C�"q����)��8�<*f�*�QT�a�PRj�p�>jg6�j\�1+A���`Yw�|�F+��<Ȩ�\��Sj H�!Ê\��a�Yq�U<�f�`����Dhx���oY�^��l.���˫�w����'�����3;���ra���tvb~qyc�!6|rp����	>����Lo�P{��c���"�j���w�E��â��`��Q����I�z�Q�	=
�-�!̞A6e/��i=�Ŵ�\:���
+�<��Iajfnaq<��/~���/�9s�
���h)�j�s�Μ=��g�̋�/_��W���7�xC\�7�UVYe�UVYe�UVY�?U��?�#6����o�x�~��_e'��s�s��R��楋�I#"�}rzB�#� �	�J���E!�v���.W������75���媩�+I���Y��j�VV�C�SmM}�`�VMg��eG	V3�����{::ۻ|$�jG���m�i�^B�W���U7�q(��a)B�"��^����x"V����@��X��4"dGŎ��nkr��m6lGXKo����X���P,�B�g诪��!־����6gt�]͎�V�v��3�{�ގ���?aH2�m�[�N������I$�p����뙼�Q����D� �cG�5!tVF6��WZ&+�ع�JJ�p&.�V�e[�M���!�y���*^�\�Ġ�ډ�(c�qO͞*�Kas�zX���⫰IF%�#̀q��2XXp'N�����;���]���d34Id7[�-[�����HV����=o<�XV�M�D
+9B��ֽu�
+9�@�`0�����z����{�s���{�M���Q����	��Y��gg�)@O�4��<Oery*5�<��r=�e�T���]��'�T��z���4��Kyjt�e)N*�<�ӛ��D��t�ٔk�"U�5�����	�žUINe�C*m`+�B�e�I[�,;�=�p������f���JᅅD�8�W)����\o�
+����[l40pV+8�a��I�{��.z����"9.|�����K���ܸu�΃�wnݺw}}sy����d:=���0�9�ʍ�[wn߽���[w��k�Ss�Ѥ����������,w�r+;)��bS��{�Y�g���Jl�=fҴf*nXI�6�4��3�Ig�W���a��P��p��V�LJG��&�Ʀ��Ǫjj?��/���ݻ������R�	
+1�n���ۿ��c�������/���Vz��ѣG�=z��.�?��?;~��x�cG
+5��4=���E<2�5‚E����D�Cc�c�C�c�����p,���\SW�����J(������2�<}��b���Y�`�+):WZTVVZ!��V��C���)��\-¶������\D�х��I��v�[P����+����P�E�B��A�x�0OD��O�nل�0��7&�_Q�0�0�b�`(�>�֎�ƶ�چ&LaU��gi	#p<<�"xE���Y��(V������V�У���ں�@}���� ��U[Gg[���� 	�خ,�\�V/J[Il+[�;���Z����	�C�+��V
+�牭p��h6X��*V�!��ʠ؊��SUV�m@@�������lEQ��x�*�u��d��>U�[y�s2>�>�9���BɔR��G�)ҡ�g�Q0o椟*�}�9����uU{�Od��m>K���E?I��M����:��>�z?��+@�r2y�
+���̕��XI}�A�*�3%�]������/\�dz�$*��] �bזC,+n�Y|��A�?���
>a���l
+�
boQ�f�x
8���k�z�t���r��:X������o
+�Kh�������������>Av{c}s�����l��e�����Z]����
+�{��ڼ}����������li����*$�UO_��R��q�
O�bA�c'��v�sep����3h��`"qrP^�J�C#ã�c�C#�
������~�s�_zi,�a+v˙���ڽ��o�z�J��/Y��=z��ѣG�=z~W�[���=���������/5���U�4a�bknbv�"�;Y�G@�J�;���@���������������-)9#��h�:--X��"X%���*@�^YSS��7�65�K,"�
+a��S���v�cy+�"w�o�+�_	x��P,
+_��u�}�x8��$
8�'r'��W>rx�0n�Ѥ�'��t�P�}J��ZZk��j�HXZQY\VEŐC;sl�g?Fl�1q�3g1�F;ϕ��VV�Z�ں�چ&_�
+�<(�U�W��$t��
+���бCbv�8A/o�g�|z�1�R����=ɕа�n�W�5�p�+9���jh��꧞��"`%2Wޮ@�@��ҶT�6'U�_Q�����oI��8��귷%�d�J��z],��+C(l�ʷ��D��V�ea���dnP��r��܋Ty���S�T�盩䱞Ǧ|=A�fZY��~���tWII�k���Ul�X�'�z�I%BS�%����lW(���U�U2E���V��9+^	�TU)�~e���%��2sE",K��,$WP$D��l�&v��DԊ�R���k���UҀ����1��,��#j�R���ZZ�x���֭�wP]us����kӳ��C�6ڱ�FƖ�W!���������ܻ����vehd�7kn�������T�K>�p�+�Z� �	��!v����P�G���� ����+�1Que:�ul�wA՞ɹ�\&������Cap`x4�0L�o������f/X;�� �V����ܵk7��������w�}O�������_�=z��ѣG���݁Va���fjz~Z�<5C)�Y/�5	EB^!d��E"�ɩ��	bM�E�	�`յ����K+*j*kj�ϝ��/"���R`���͹�Ⲳs<�š��ڦ��Ʀ��z�6���!��.����w�vt�p~)���Y�_�����������W4
+{#T!L��WR��+�bgG*���Ş�%�G`4�L��;�'�>���	K++Q��}�g�a_��"�x�C+:[\"�W�����4��?�jimo퀎Ogw/X���*GU�eC,�oCZbv�Rz�Y�
+��}@nT
+���8!�,ZD�����]�\
yV���e���U.�YI%�6�y�y�EY/�۶�_T�^OPD��$*k{�n_(d숃���}�����'�Ь����s�D	�TΟ���E��_l�ʅ���7����P�o�����o���_�������H�+i����)��b�R�~�����Bc.��{|9�4�+��Ë$�'�MX������\�M+Ǥ"�[�ȢwǏ����}4Z&(Z���K�&`�w�b l	ﺊ�Hl�D��a:X��I�N�B�P�%z�����=kbڊ=긹ᑉ���KW�ol޹}���;����+7�����6�l���I~�����w��x���;��ؼ�v����\<i�:���V(f'r�+�Y��[���V���J�a��ۂFܰp�)
�f�0�lW���(�����[a�*7D{�7O�e����}�^x�E_�����2A*	��j׮]�i�9rꭷ��/�����z=z��ѣG�=z~w現�S�N?��ѣ�����<�`a/��k�й�M��}z+��܂5��'���S�tg0X][������^^Y	���������Ӵ���`�):�sG���*ЂU
ܦ�6@�k���@��
+"wl��-B���������-�}�"�#y;䯂}P$�u�=�s�����|��A-BXG���a��-����f8�d����G��-�
�m������ZbŪ(*-+:Wz��9�%�*)Aa{i�B�ʪ�*�j*����MuM-�o�������ځ����`_W
Bg0���+�]�\�����)�i��هF���~n�����='rV��D��K[�>A�L�VX��U��J�[��A���)����K��z��n/OT���<M���(T��JY��a��Z�:
+�Q+��[�'5��TГ_��)R���3\�N�������|��>���M�C��J�����K��*���Ð��͏Qy���IgpZ�ZuóT��>��k���x[P8��B@�\���ĸ�J�C�u�@��0�Y���L'�6ȁ�"�Wp˞/?C��"�%�b�ʅ�t/���g��\Q1��*��‹��10��x�+�r[af�c+K�V���������7ַnݾw�΃ͭ�W��\Z�061�f�t6�?493w�ҕ�[���t��#v�./]�>���~tv���vt{���!H���Br�d�`eG1{(
+�/�Db� �� �� �J�)�r,��� ǃ� lD�Upz&;@�j`xdxt���>fCC���}���^��p�/�� W�b��Mv�����8���D��}�k_�/�z��ѣG�=z��k�������nX������R,$WaM�"��yҹOL�LL{",�X��c��S�CÑx�������������������������G�N��
+w:į�b��DAXU�@u}}@򫖶��v<�-�"� !��p�[ίdE�7�����L^���P<�",%�e�/�
+�rb�3R���-�w�#�jlk47�44V�*jj+���*�J+*ϕW�[^Q�̊]����«�j��UY�	X}cm5(A����`�ڡ	��h<O��0��A���I����[���]���ڦ^Y=�՘B�(s5�(�Ul5�5}i+�������l���	۹"�R;��
E�(̞�s����O���9Ye7�HU!t�;�2��1*�H�O�"R��>��z��8Uj[���3+�I��g��l_�@*��'TT>EE?�I�J$�Ҫ<��gS<I�!�X������E���ʡo.WZ�(%OIqB�䭂�DɦR�=q�Veo�u�?��;T��-��,�çM*DX���0\x�v\����D�2(cw	U�k�$l�$(pe�ʐ���� ��ᓴ�E�hbrvy���k77oݽ}������ol�_�493�?8��Ln`t|r����7�n�{p��cv����7�WG���Dk{�X��*�����b ���"p9�Z�!g��X"K��F4&�V WvҢ�i�V(��� ���h�b�j��0���cI�������o��җ^|�_zi/*��}���	[A0�գǎ���;����+�e]�=z��ѣG��e󵯁���[��9v�O�����W3���bgj>O�.RXj�p��#�#���F'&�/,���@�������������������lq�@}�����:�t%gϝ+.++)+�E��5���Ձz��57�!��-���"T-X r��a r�ӇFw���"�n�_!Š�.!D�0|�*���om�$Ue
+���SN�����Lo�A-1�~Ol��O������5��TS�P���
TTC��2��*��b�倭jQ�`_uM}c���
-mM���b�}]�d�s(�� ������E�vE�+�]ɭ��h���J�Vc2yկ\@�jHTe=�Ǭ(mŝZn��
�b+<*�J����������S2WY��\)�m_���YՈe+HJ�������A�m�����+b+���W�S�~�r��g�&<y�,�M�i���S���T��P�&�Z�S��*�²��|6e�lfdP��ɯ����W��*�+~�
��	��G���*!��x!4��R���r��Y�,`Ai�VM��<�"X��"lE�-!��3�s�n �,�JC���rE��9�J��@\��$?�X�p�g0m����Ȟ��;@Rc��'��+766ooݾ�����kWg����.T��G�痖���޿������������ʅ��I3�t{�[�AoBZ�"�
�����Vv�V�f�� 2+8q~h�`†S�J��ݲ!'�J[|gD&;O��}�Cg0708<::���Ϳ��_}�;������h�]��JTS��z�Ν���W��;x�P�ɓ�W�_���ѣG�=z����3�O�8|�H�L�-����d��]��}�w	gf'Ʌ� ��	DX���SC#�D����JD�J��jٛť��`KV?���y�XФ+--.-;W^QZQ1�Z�9���f� 5��/"����b+�",�Wa�vzB@X�s�[�D��(��G�ℰd������"~��fSXP$A����������������5�Y����꺺�@��*kU��ެ������D^��
+_l['|�������p<a�H��Uڥ�Z�lW
+��͍�*
�����ϋ]��J(�G�i�Q��8��b+��U�hO[���{�.}SY���[����
+������k����j?%s�!����}�mOHyO�S��Qyf*ۏ�$,ʷW�ޝ^�TX�ۆ�|u���;S��~ҝ��9���LL�A*�MWZ��NݯD�X���<�Nn�@�r��a��r���m<ӘT#���F�*$W�M��M@[qӆ��).R�eAsЎ��&��´�*x�5,��0sś�����n�����2`sV�2d�
+`+#�Dɕ��[Am���Y����:�[hxlfn��ڕ��[�}��������F&\X��?0<ʞs���[w�>xt�ѓ���nݽ��%�Ә}��P�����T��&���px���P��V�Ğ`��Ȁ���[��'�\%�[�
г�M��r�P�v������i����W��I�u��w��~�������_z��_������?P�M=Av[8x��ѣ_��/d����q=z��ѣG�=z�u�7�������;ZP�·���������,?�rG��ȗ�)]™Y��OC
+k|j"XB���ɔ����ilnn�訨�����mh(��8[RB�����~��
.",//�����V]mCS���������	-X`q��, W�p��"¾>ɯD�
+��AR���_�R�",�W���I#j��$���f*����8f��a�b	� ����l�6�w�ϼ��������9��̾.����a��7����\Ea��}�=aT�ǐ\V�J��4�]�|=ٮ�38�#�:���j5:!�V>rE�j���U
���<��p�4��D���p�JC0ׯ����Sλ�(���D[��E�u��ϑ�s���T�<��Ke|�K]��Q&�\�B@�'��}n��}>��Si%7����#�TFF�L��R����RUD�T��/m����}@^�a*��6uo!�,	����µ�b�OŻ��U�VYi�& O[�x��{M4����DYI%0a�����Ɏ�ޣ�aM%pE�h/Yʰ'��@�`������3(𫔓���-�V�VQ�
+/�	������oN>�6L�f�$#S�s+�ר'x����[w�`pdl2�d�������vy}�=����'=����קf�ٷ8���6A�V�I��'�˱UDn�� ]DH�Η	Fb�0&��[��]a[07��aS��La抰�ñ|���4���G��kDOo�lqɏ~����{��]/��Ү�{��j� W{Po>v��;w��������y�������ׯ<��G�=z��ѣG��s���xa�c�±������2Q,�aA"����mEBJa͌OO�:��La��+�L667W��::��J�Jk�*kkKJK?F�;�?>s��*9W�-�R\DX^]M����>���B���G�Z�B���ӎ�vί��[�mP�����s�{O���-B����`�5�H!�1+%|%"XE�Š����郒cW7��٧���A �����6��㭈�����lC��X���$1v�r&�\\��O�[FƮFx�jdLث[M���҅5™��=��Qi�ʰ3�W��
+ڂ����Y�i�`Ɨ�r�~���R�NrӟZt�=�7��UT�0Uѐx�ln���SH=?p���ۖ��)������*��g{Pn�s3��w��)�W���2j�zoʞ��Ha(n�rT�@W���~�@y�\�����N����-�'W�"U�#
+}�͘Iy*"��Bb�i�).�J�b��X�S�+f��-�>2x���B�	�� �{ʥ��
+@�)��
+��S/%LVPt
����r�I��q��G��O�>*K��ְٻ�������Wollݾu��֭{��7ϯ�ML�d���t6;0415�����}����O>~z��ӛ[���3�����
�u;�{�$�&;O[q�Zٹ�
+2�Qp[�#q�V����SOP��-7,��!1�Bi�e�6��mV����&�3���ʪ����>���=v�^ܹs��c����jǎ���W��ۿ��CǏ���թS��JA=z��ѣG�=z�
�w��]v�����~�(8q�����KWf�)��7�s#�4�)��.w�"���u�`��d��{��j�MM����-�ml*����{E���ӧ?:��+BX���BX^2�j�`�uu����M�u--���U������֮.�"��A�{_g�P`� Xܻx������V�_	�?��@v�,��o���k�+vw�<?�*��%u���O�=H +H,�E�蹎�����!�\��=(i�c�f�_*�9c�-�W���{]���W
��]Ъβ�s����U�!f�����{2vl���0a�OJ+'��D�O�*���Ϭ�#]�+�^954e�.��}Y��B*�O��w���mSW��)�Z�s�Q��~��Le��T��g��,��퓁�T�n=#ʘ~����ru����
+m�.Y��J��\�S^�r*ά�X�=Z���S�Ȉ�f@鋋�iE�Dz����?U7Sqj�<pE�1#�/B4Vp�!<J�.��I��肿i�-��8���`�TYA�\^D���
�dV@��6��N$ŝ�AV�x��0��0p��������KWo��ڼuw�ֽ7o]X�253�?0���56>��|�Vw������?�s�!{Z��Hܰz��\`����A�8��[�[	�e���N%�hL�[��6���[%[E1m��x�@ە�� ƮpabWp���񑱉���?�����?�jቓ@�v�Ğ _#Hdz��'�Þq���ï�~���'O�.��W+�RP�=z��ѣG�=l��8QPXXx�dkG��ʪ�"�ZX��,7b��OSku�"���E89:1=0<K�--5u�jji.)-����ԗ���)*��"Xį�B(�U);%e���}|����@]M}C-,"���jC«n�v#�����
+���>���!,JaEaax;�J�œt�V�d\X�FB�T�U\��d�7������������g��|���#�ؓ9���A�~UO�h�^ag���b�
ꪳ�W�j���!����x�K�H��\
��&vWQZ�Û���*����|2��3J���ʛ��{|�)�9}@ǿ�o�D};�����Ty��,5O���U�5�����������Yy�d�ʣX���)��DU^�ϫ*�t��Q�T$�J��S�5�R�	�kw�ΤgY']�C��d0)��߬�H��9���L���I!�B�!�x|SXR,|� �U*.>�-@d�M��5�����mA�T$��{,����;��t�@���ē�$e�8�"���<i6.L����r2��c�3�.^�vccs��死���\�1��284f�sN�}����ڍ��w�=x��ѳ�_�qst|�}��p,����a?4�zB"p�9+Y��5�F+;5�O�[Q=�<W\̞4%�J`�W��,T]��m�L�W	������W����'��߿��{E����wv�����_{���:t�xa�׿�
����/}I�@�ѣG�=z��ѣ�ͷ��mv��o~�ȱc�O���7��v�*���e���kfa	*�P$��a�����Ʀ�F�@� kl��������mlj�+k1���H����h��Gg>>}���"�W��g��٣%e�*��(�������
+amS3;��j$V{gKg'	A�l��j��U{�E�}���UC �B��P�;���h�ǯ�-	�E),���ݹ����b���A,_��z�q�d���>�^�s�'C�����M��f܈$�ϊ��4a���  m퐼�+^�J\���]��\A�j(�a�A����+��k�:��)��\J�Чl���\����RVuUeE0����9�/�R{j���+[AX*�ʻ&�d�A����O�Z��‚'�'�TWVz�J�-�>Y�$�/Ue8.��%�ʘ��J�⅀T�:mzP��T�QE�.�W|?����Ur! W�c��J�^�Ѯ�\a�o���)�TIB�*�����x]CQ\Ē���̕%��M$K������v�\^$�:��_����W�rHiE	+r[œv,�J� !,(Z��Bl����i�ҹ��ɩٕ��W�ݼ�q{���ͭ;׮�\Z�0:>�v�SN&70<3��v���֝;�=|��;��nݹ7���>x/0�pg����/�b���
+RO�VpB�D_8��.TR��5�����sl�
+�VȬ|[!Kf;��q� �+��d�W5:�?4\U��w��X���ٻw�����^�>v^i+
+\�y�UX&x�(�co��E���G�=z��ѣG��v��8q���7�z���c��E�Wa���Y�\J���H83/"X�� r�������(E��kk�;;�Z���ʪ����J��>..�
+�3��E�g�P��lII.",*+;WQQ^YU���@����NF��ښ�ۛ�:�<H,Hay���M^�˝`���B([���"���\�,��[G�9���Wy.,�%d�����x0������Ĭ��OF��@[0���vEq "W���7_	Z%�@U��8��k����� )ىYq���o� ���	�l�'(�s2m�d�+�R���|Jʷ�Oķ|夁�F���٨�u���U~l�5@�&v���=>Wy�ϗ��{���k>���{���Umy�tţN9+����~�ȷ�y���I�Y�`�!sVD���x�X։e�P�r�%�&+�������f!cUJ��eIle��`a��?��A�����x&11�Vx�v�&]��
+:�Q�����U�U6�) `I.��� ;�d�]��$�6ᛂ�K`��R.4��a��Lntlja�����n޼��ug����[�.ON�es�);�f&�fW/���������.�칁��^���\��Q��
+��B�x_�z�QdV�c��X��!�U�����(���a&(pe�����
+�V&`�40+!�����?�g?������ۿ�8�t[ɒ�$W�bo8x�hAA��9�_���b�����Wd=z��ѣG�=z�l�?�����}�[G���7.^�:��<������Ҝ���n�~E.�9�E����'��L�#X
�M������Ҋ�������%%g����_�>�klz[�Kأ�ee%�*����E�5uu5
���fBXMm�M��j��!,a���U'�������h�Q�X;�-B�<���W^��DXR��_��D�`� ��F,q�P�b��J�=� m��.osvڥ�����v��y�ΐ<���]2+^)%A�8B�.i,b+�LP-���	���Sj�)ϝ����l�8ݳcIB�~N�j��?�A]	Ve�|TZV�=�>oUڗ���P��]�R��%���)!�������D��r2yO3y�ʕ�uo	����kE+Pm*UAۓ�ˠ����y���d70��c��q��\��Raɵ��M�4I�․D�
+��O�q�߃�S=��,+	��W�%���$�§��4JA��W���e:de�xB*G��� ����4
+q��?�t�H��'�eJ����]��v����ͭ;[��o�Z�tufv�p��Nfxd|q��������������>a���Ē]PĨ5C�INo�/�	Ca�V�8��H�NUA��TĴ��%�$L�$HQ+�^&�5.^Dɕ
�v�v�*h���6�ͲO������ջ�}i﫠Z>�����n�\�ܵ�W������O�<�曥�*�+�_��~9֣G�=z��ѣG���)��[o���ڶra�G�q!��x^,�`Q�	gٙ���������������X�0����i��hni9W^V]WW�+.-=��?:s��B��n?�"aQɹ���������
+����!�#X-
��`a����j�_�t��!��D�0v��c
+|�<(����W��_IE�(��Z�+Q�������&Q��	.y�t�~^H�d�q��UU;�%������W����W�Y�x����+���z �=r5 �U?ᩔ��'�#�O�
+}���u�D��W̯�������)UKe�����T��w��,���%�<��_]�-��Y,Ω,%Ueyu?_��=l�T)�*W���s��]y�mE`%���D%J�TOH #M
+����U@��C��d�
+P�T�#�R3W1�e�v�$e+����v������,+兲U᷏�X���
+rY	3.8�{!�B7;]���yE�@�W��
He��U,�J�-�D�&ZE�+�(��]ܻ�I�4�	&`C_:�?<95���v��͍M�	nlݹru}qiudl��{���������޿����O>yv�ᓭ;��W��������M���6�p=�8��������2mK��rVhh�����`��"+;�:i�
+�i7��q�l&7004R���������^�i+�	�b�]H�v�`~���'N|��v���֩S�u�����J�=z��ѣG�=���?����G
+������]�[�"X�K��3d�Z�.��Y��RX���������䴓��� �������*+j+���Ν;��3�>}@R�Ӕ�*.>[r������������"X5��@}M,"�o~�X��:Z;�d��=�-��B[�z;q�_i����F�?�Y��H�/FB���E�aqx�t�<"��b.Z�j:+��.,�Z1ク�ش�XGʥe|<��P��j��|E�vv����k8�?$���\���r���jŏÃ^9�I�oTsM)�M]	_e��&�k��M@�?�G��L�yu�<���V���.�	�r-��
+"4��ʋZ��DUR�倞�J�[�\][����yn+�#W�Q�N��}]tUf�5��hIN��^�i��E
;E��|�W�C<�.
+�į��"�2W�'�1O[ѿyd��
+�JB�7*�p�U4��,	��/@�\��9UB�����@BR*��U����V��~��ĩ`� ���0�M��fʵ]���\�W
+�ͤ}�#c�������X߸��ugc���7WV��'g2�~�r77>5�v����{�!�z��]ܾ�����C#��P[G0H>v��zz�m��xT�����-dW�R0��Av�mE��ع��U��g�7!m�bv:$��1Z�n�l?�8������ï��2�(j%�W��vC��[�ܵk�k�=�λ��]ԣG�=z��ѣG����w?��˯�r��ɣo��nm}���kP~�<�,kV�f�Ʌ5�� ��"���]���3�C�c�d�������������\YYU PU(.-��$W�ΐȽ���s$�*.++��*�������T�5�64�577�ȝ"X����j��l�
+vt���F?vP~��!��bWd�B����T!����f�<�%L����;b�Q$uBO���F�u�*Ԣ7i}���&�_��QqOM^�Д�
+N58,���������D�j ��p����T^���9�?���\{Uj��3�J���f��J�QRK�䠼�T^1�[��z��L{�@SD�=Iu�
+�CP��$�٪��J�*�k����WWW�Z�(�Ww�I����*տ4Y�=���F���Ζ��EB�MU��)V\�Ö�?e`���7�o^$��M�D���AS!W�0\��&y�O��,.u���Ay-���CxG�:R�t�R$�r���q{ (�A`e��%,�P��=��+����	y���GY�M,(�d���f��._���	V��;��7/�]��[������������[�>~��v<zz����77gf#�dk[Gg����� a����P�ӪH.��p,ɭ�LO$�G�L�TVpn+^LN����)peA�
+ȕ��
+7': �r�3�ϕ���/���+;v�Al�W�v��.fߵs��C�����~��:�G�=z��ѣG���!����׾��c�
+�?��?\^�0��B)�Y�Z�] �幰8��E�;��f'�f&Ђ
+�����t6�
+W���76v�j��ʪ���e"���iJa�-³%`�bO8W^QVQYV	��@�������-XP!�E�m-��E���6Ha��Vm!�a�[�CdqS�*��
+�+�6�^��¼h	�����*����y3K�b$�0�j��|�Ӹ
+�*�_q�o(���8�����+�FP�����|a��")���'�y~*�r��=Le���Rc]�Z���t)8K>$�U��S	Zey*F)��J�d,o`V�(,�`U��@bV�
+�Q�%[ٲ�6�5���ÇD��v�����B��<6�u��*.��D\	[Q�P6�H�簢�Aڸ�V�~)����t������'����'@���)
Wb5!V
��B���*G��`o H����ߴ
+\!��x�Ł�+��\u����)��O�O$Z��i�>���k׮oll��ܺss����k�+�#���6<��tm}�����<{���GO>a�뛷�;���������
��
+���	�R�`���gEVv�U�
�pp�+�&f>vvˣV��[Aώ��}�T�lг�Oٴ�x�hhj�яz��A������'�g��f߽g�.άvB�p�k/�����|eQ)�=z��ѣG�=z���#G��������]�ten	�W�,b�#X�� ����.�	hN�C�pjbzfxt<n�-��55m-mm��U�R"X�����Gh�:��Av`!��ρȽ�"X��@}M}CmcS������U{{sX�(E������UwoG��W��B�{X�B��ɯ����0���q�@X�NH1�m-����7;�\�j8�S6eyqO&��k��*#ȕ(r�-(t������r>l�Ѥ��]�&+Ux�W��^ٓ�Bx�m*%���f\��L�,�}�+u����\��S�T��?W�WҲ���>Z��)%6	�J��������%������N�J�W���2T^CP�#I򍁮���?����D��,5X�Y�R\c%Ӏ^�J",^�㰈��+u�&�]�����=�eY2[#���k�i+����\�!�����b(cg�dASJ&����& ��5�M��@�X�V4n��@���D�&P,��ȯ̔k���	"���M��'���O/.��=��;�7��\����:>1��������[�r�����<}���GO?����ͭ�/]�鋴�utv��Jv�
+����
+끄��[��h�d�����ۊ2WQ\)HmA
+_��n �=�2W�$�Q+:���w��F�����<u�-�r�
+ʆ��O{�;٠�ݾ�o��׏��޻����E���G�=z��ѣG���I�������9��dvaia������2P,�"��:w�_�/Nϱ�03O.w�`!š������L:��
+Wj��;���ue������J�q!�	y��Z��e%�*�E�5�U��Z�������,X-��d�j�V{7�`ARX!�`�.Bhv��y�+�W[�U��B�`!��0�0�|#��P,�"t�1
+,|�"nW��T�����1y5�F˺�]ϗY�S�J0+z���Z�yI0-��Y_\*�y�ɟ���5�l%����#Z޻����}4�#��I���P#��@��9������J!QY�=��Py�*�9�*ξ�HU�O�����>��aGX�9�z�IK�e�,�#�%Vr(jq����M�(�'T������dC�����fuo9 - �xŨ�w�@X~feq6��� �Bx�0���8���rKU�$�'(h�-V�Պ�K3Z��v�Ŋ����*�6xO0Kbv��f'I+i�N:7<21��t���7�nn�f��u�[M�����wIg�G�'�_X�غs�����>}�쳇��mݾ{��u�4��Z�;�:����@f���>�PT����
+���0a�(��؝��le��*�mA�O��씶����6Sp,;��F��nn����Ɠ�]�|���x��W���/P���V�*(�	��	Q+�?�Ё�O�<��o�{ћ��ѣG�=z����?s����[����7�8r���y�������J�.$’:w:Ss��p���ܧ�_
��%L��
�������UVb��\yyQI��g�>:s�#�D�YjR
+����A������U[{���"���_uv�t�E��.��p-X!�_�(%V�6�ի��ԥ���_����R��WD$Ď9�A��|��~�C~���������GQ�Kr���R����ꪾ��Ml�<�}�ye��s�S
+��C^r�"/�2����'VF&�Dt*�J��H��[�,�c(���(�>�:����
����>S]���Dz�VI����ܤ�@�U��t!`��u5��r%�QV���-�1a%t��>+BR)e�� T�]G*I�bæ��čpܠz Od���	xf��n����#��a��_��A2_q�:��Ⱦ��
+�7��)a�a��D*3�N�%&�ohQOЅ�x��v�r2��#�3������y{c�ε��ՋWff��F7�f�F���_��y���GO?}��o?��ν�W���-,;�\Ww_K{��
��V��`•����!<a[�"{�Vv�Lr1;<q������)�����|rC��tv��++����ر����W^�b�<f%��(��o���_|�\����eT�=z��ѣG�=�+�w�=v����_����tbzf��y��Z�7.�)�RX����$D�8�����bof�z�ᚺ��F���UYY��PQ]�"�bH^!��-BZDXRr�����Z��U��5����uu5���MM`�jVsD��Q�����`��Wp�߮�1�E,Ha�p{�_!L�}^�ʒEBe)���C�E ����KdT7s�|)����?��v��#�����d��D�*gg>Iy����
+�J��Sj[\j��@�PY�"T�o��N�*���L�P)�?���%�V���V<�%�B~ex�z:O��9����V���x����Y!�]B�GUS��Jy'���iIG�~�I��&���倨�Rˀ)[�����"=�i����8�"~��Vt˾5� ���p�E�+_��*�d�Gq[Y�*�5��~@H[��
+y��B���
+bK`��� ���ñ]�E�G0m��3861���z����ƭ���o��\[�:;�442��2�-74:3�x����<z���O~�΃�Ϯ�o�/����c������n��ӭгG{#(�
+�Qƞ�[*r+{<ɻ�Rr�o�ۊ��I�V�'hZi�V���O��,�6{�¥��W����_��/��⋨aW{����j�\���_}uߡÇO�����Wz��ѣG�=z���_<���z��`����k/_���Kd���܂�w��]�܂�'�g��&+���QUS������VVYQU���/-/?[Rr��ُ�B����g�~L�,�_UVUT�"�*@X�h�j�o�E���-�`[Ww;T�_�����U_�/�q,��cy�������^m�3.����
+%Y"�%�@8q�?�a�X`�&��2�� �_�w�KZ��[)b�~[����/D�dy�x_�OMR�XԶx7Se������<Jy��u~�z�}),/s��Z��$�"c����r�m�@I9ۚ�JԊ�"�S������TW��	�$���"6��uWT]j���=HeK��G��(煯��=Ze:^M��Ж@�W�x��J��`ܰſO+�+K�I؊ʀd����V � C�a��T�
+�9����=xM��(�UI�E��H�@��%y�
+��"�:��H%A_a�ʈ�J[ѝ`/��O��r�w��?0269��r�����77nݸy����K+�c��Q�����Ϸ��n޾��ɳ'�>{��o?�t�֝ŕաщ�����v�=!�p����(��XE�`��q�#
+�-V��_�)-���=AC��Kz+vMn+v�Jg2��C���TV������׿��}���^ٱ��V�Y��eOp箝;@ʾ$X������G�������_�h�ѣG�=z��ѣ��z��`��'?[^]������Ě]�kifuX�K�š��33?%-X��ƧfٯQ=�pm}}]CCGWgM}����#XE���**�5!,b	~U\,��JV-��тhn�aS[[sG(�:��=�
�{�?�	,��"!�P$��v�0��i��/�����$܉�7
+�B�	�7����"1Q���s1	j䈢����#���Հg
�G}>v��\�G�DW���z��[�'}S�m�?U��=!�lJu[����Ol��k��rQ`�@�������t^���J�aya*���<H����W�b�Z�|K`�vʥ��Hd��թ�+'��\�"W��z� U�[�y+�K�¢��
w��J��v5������J]%�Y�Z���TT$��>��70�4�M]�WT�H�KZ�TI�9���9���bE�d"WR���Zȯ�bAQ�B�\U�ge	reEE�
+�Ҫ(��V>3�bv�V�?�d_2{Ȱm��52>3��z�ҵ�7o޺�q��������3�����e��3+��7o����'�=����>�-���vutbʴ�=�H{g7�	"�B�U�/Œ`,�Q����V��"	^`�
�ꔴU
+	0+�W(��5X)�k�\��H��������/����8���/���+Eo�{Ϯ=P�}�;v�d�ݿo�~v:LFw9�*�G�=z��ѣG��������~����o-8Vx�D�������"y5��"�E�PF�d
+���s���'�g�&��&gF'&�V�������ݶv�WTWV���Ђ��עBxZV���JJ@�UVv��,XU�55Ձ�jXD�������v��.Bnqǃ-ž��>La�*��B���U/�������z�"��,��U8�K���,X�&�~(�pG)o���_IB�����>�~�+	~�]�\I`�KI�e����Z���=��SI�r3V^�*�%�Tٗ��s�%�:@���m����
+4y�/�/ί�|��]U�s��_�4Qu%�z�@��'����+��n�ǬD����)v�V%ix��+�N����(O��J�z+�5’`��"y�*�RH���M�(��^�
+SX�E�ACƮ�犛�Q~eQU0��z�$0��vK�T��x0nq���=nFbF8���b��2i}a�z�X4��6�A�����f?�֮\]'1�����>丹t�dlrqe�V�=~��O��߲��ə�T:�'����:!pE;��zv[��
+��*n����V��)�V^C0n�M�	��J�%���W�C=����q���ۯ������yw���^x񅝻v�-$����{�$�k�+��`o�۷o���,(,�ï~U�:?��{��WI=z��ѣG�=z����7�|�����Ç���
��.akayE",2�C��Z��\�>3�-Br�O�NLό��}rjjf6;0��j��:�:�"†�ʚ�Ⲳ���=�;�+�����lqIQE�*ʰEX�VS��"X�m��-����j�� ���nς�#X}�`(���0�WQ�RZ�۱�����J܉�+C���K�Ā{��
+�,¦<e��$x�\{�Jʲ�c+U��I����O�s��Jn�xTZY��'`�~@SaY�!h���+oW��M��u�棔{ ^G���/y���[�!���h�tOһ�;%��[�z�*r�#�JH�)���_��L)�u`V�ڗ�� ���SyV+�$q:��e����X�2`�/����+�Ɗ��WD���	E7Є
z@f,��JQ7�}Ȳ���I��-?~�XO�:��Q���z`4f���s4\��@ǀ�{��Cl��n����0������k7�7�7n�Xߺ�vufnqphؙ́�����+��Ao��������g�e�[����/�n�}���H{Wwgw,z��0������Vq�Z��X<K�aCr�	��"F����͞J�U��T�z �ع��tҤ�r���#c���������_z��ïy��Wv�ܹ[���Vv���f�W_��ځ��v���ç����~�m���G�=z��ѣG��i�������Qx��тv���W�.-,���k�CX��"��,vH�����陉�������щ)#e�vtV�ֶ������WUUՁ�9�`�-.���-�
+Ϟ-9WtD�|!{/�`���k�т����������U��B����W=����V�U�RXJP*�i� ��Rz�v��Z��������E�<��UK��B�Y�D
P�YIxegy���L�j�O:�}�������I+��Q+�W"O�r��\�2�T��
+��5������Q��2DΊ*�r�%�xG��8UF�(�U:Ͼλ��*�,
+��lU�.��6��47�sle�D����d3S^�J�ӈ\�n �*�_���2Lɯ�ʊ@�(PP,N�d+���
BR¸�
+�> ���(pZ���'G��*�LEdm�=-f`4�[�TJ-R�û@���,A�R���B7��!�d$jP�
+cW&�.�z�����u%ὒ�����щ���._�~s}c��ͭKW�/.���M�����ُ��+׶����`+\=x�t���l�P<a����`oWwѪ�P���ž +��#��i+��ű_�A��>vZ}���&AJ�P��U
+���,���[�e�����dsk�����|�K�+(ص{ώ;�'���ڽK���v�|e����^;p� ��'��_��'O��_��ѣG�=z����/N�<YPXx�������ȯ΋ �,��>��L-��9paq�5;?9=+#X��z�����]�`]}}yUUM��;w+��>}��;�3g!�,�Wd����E���5�������fR`5��C��CX���
+!y,X����B��s^=�Ld�=�{(���U�{
+[�i��Ε�*���*89����Y��=SF�\�DZ���y\*�*�3�kU�ѺW3����j�J�[��ʕ2U%���Q��tKX���'��n]ӻ�Uʀ�$h�3�hz�*���x�KE?���?��M슏=I%�6@u-���I�:R,;�!�C�f�2+[Zٕ����O����TU”�@ W	��@��Kx��J�����`8n�����B<�ڮ��
+����`�=�W"mEb+JX��@x3n���HpV(����_�Q�n"�A�U:��+��L+�?82=����v����������^��r����L&7��3������KW6nݽ��ɓO>{�`�'�>]߼=2>7��P��/�
w���*�
+�w[��
+W��8��E��\QI�UA�U�FP�x=�b_o��c�i"W�����G'؛������+G���ځ�� X>v���-��b��+��zu߾��>���Q�V�O�?=z��ѣG�=z��N̟��g��������'�8t�=ؽraMD��e�ߒ�}+����",���&�H8����i�+E�Z�[[;�a!$���u��,X�Oc��4a�ڽ����*������E��@-X܁_�577��6)��{7_A����wR���T~Em��Xl��J�H����T!'ů�"�G� ����Ao{+���2%��9�i��J�~x��2)�;���t��J���?N�2"��Q��� ��WW\U�R4�U�����t�H�Yb-��(P��<���!,_P[�� 仼-�R��k9���?qA�;ĩ5|%��l&S��*�⥿|HŅWBi[)d��z�YI6%�WpmZ��)U��u�`IB�]�kN�D�/����Z^�
+�T2*POR�E�J�+���	�a0��?�0ȱU���@��a���z�u�[��q%{8j �´U��Q��Ao����deOA�)n&�v���]Z^�|��o޺v}c���i�[
�0�v�GƗ�_��q���'���7O?��O>�����Ҋa9��PO_��7LVv�Y�`�`���|�`H�b��JD�	��M\$c�/��+�_�FEX4��	��4ؓ�*��+:v:���ol��w����#�8�g�^�V{=f%K���$����9p�����:|�������'��S��˟=z��ѣG�=z~��[o/,�E�?��������E��|^�,����	���[��th!�'78�~44�54t��uue�������㢢�Ξ��	��"X��J+*���U������ڦ�zXD�������.,�A�sVogU!
+�P�����Dy�CX���-%��U�6xEB�B(�W�GY�PBƎa;Ln!�a��P���Z�2v�/�Xȵ��q�'�2��Jm࢔�"��wU����k���m6ue�"�r�G����)/��d�+pS&O���Q�
+�d�=�~7��Sj[�v�;��r-�K�|��d��Z��[�N�|�*~����%����Tt�A�+[	Y�"UE}@�V\l��+�me���
����-z(����[��&�ō��B�d��A�
�CI��[��@C`+�s���=a����� ���* T���A�Y��~3B5 ��2,'��� m�؊�{#���_X��v������[�׷�._[�_�ٿ1�}3
�-,_��q�Z�)m��g�<[�|=�?�	u�������po(b��aP��E⽑h_�-�`�]�?>=�Z��CP�G|� �3!�?-��=fe���n�?<���v�#W�l��H$��˿�ʼn�'!e��U�B����T���]; p�s���G�+<q���Co�W
+�ѣG�=z��ѣG������?���Ǐ;~|���=�������p�X���p���f@�.��ٱ��������U����A�-Xu���E%%���E��E�,l�Ž�Wu5��-��-"�E.w������m�B^$D����zcjs0��մU��sWAV(n��W���@3-T`�$�"~"�C�|?��ʉ���5�s�g��]?	�d+Я[�-��T~��_6�*��X����$��p��+'�$�7�ed����Ȩ�Z	4}����J)ު�Jv�h��_KTe��h=�5=o�V��NR��s��-���rR%��@[��x���ɕ%��Boe)ˢ� �	+Kn�C�d��
+ؑhb���*�
��m̌p[;�]IrE�+�M$	mѻG�K��{�'�Br��񐕠U��‚!lo9�+T�G��.Pc70��EH!��v��`��>��Ğ`,a�����������W��\_ߺ��u�ꍥ�c�S��c?v�tvbjv�����>z�ɓO?#+����nܺ;2>��w{�{ý}�@0�}��D_XTcPd�c�*ǃ�+�z	���I2}��t��9+�L���F��VpḎ��1p��ҙ��3g�����/�BZ%�V>7;.����=x�P���S�N�ط���ߗ?�O��~�ӣG�=z��ѣG������?g�o}��9���`d|r���"�E_-r~E:,u#!����/��������\��p(ԃ�34ԗVT�44VTU��~\\|���gϞVE�JK��"�ʲJ���-�
�5X$�{[��WP!�"�`7寺H䮈�ؑ�vv�m���),ygL
eI~GV���?N�^����)�I�ڻ����RY�l�<#��9�r��=�92v���'���z�)��,���ū|<���`��
+��U��*�@<W�Z)w�������>G���qe���Nu�1�WD�_)�
+�	��V+Kѭ�`�X(LV�M�R1ӷ7��V�YY�v%oe�ʊ��
+�-y������+���*L=y�u�a�XU��9�b��bI	��*���E��h���-j1��W�p�H���A]�z+I�h{`��LRZ��*��*�\����{f�OڴA�n�>Al���{����K���X߼qs�굛�/\�����L˱R�ѱ�յ���>��٧����>��7��}r��å�դi�uyC01�^�1j!�Y�q�!�iHrEd�"z(&�)�fW�	��J���m�8��]�鬓β�t��#�����={����+*�R���v����W^������Z���w�{O�T�
A=z��ѣG�=z��+���Bv����/���"��_���K�H�jf@��'�A�>:��I�uv�m������:�r!�������Ⲳs�"�ڪ��T�h�jhmkn� �%�Uw[��Z�<��E.,_����*�eIP�+�H�ҭ�GV�-����>DY���1~�uO=q���]	[;u��R��J�/���r����Sy^w�������������t����rE�oW�_��Dg����}re�ʷ0�&�E�u��cV�
+_�5V�&;"������Kle�9+�J'D+���{��J[��剭��6�
+����\y+j�����(�'���A��(�BnP��A�&<G� nKx�A4bq�ū��`[m��fǐ�'�~u�;�ׁ\E(�2d�*I`C(V���q��Ĵ�a�_2r0�	:n�������ŵ�׮߼��y�����_�s9����ť��?{��o?�����>~�齇�/_��?4������
��/��M�	RZ����$rE��'�mA�	���\�	�Ya�*�4���c9\̎k
2W����3��q�
+��X"�����+(x�w�ܕG���ٻ�'�U��{_}��ѣ�����=z��ѣG�=z���_�������=~��ȱc����	\����
+�]Z��҅,/��8�E�P�>=393/"X
u�
]=�u
���˹���lq��`��YU1�%,��U��"����#~�T���� ,nq�]����"�۞�^Haa�����lϓ_I���p��UB	_�2���B�ZR�N6/�CV
+\�� ���	��E�M]�])9+?��K[e��*�:��q*�(PyH������,S1\I���~��J=D��&�0Y��P�$�+�Ty9B`ŕV��V:��.���$��V<_�)�1+p��G���JMXYR�%�$*Y�H��wzi+��U��$��ʛ}f�{�L��XbW �+r�!�J`73E�Hl���† w��n 9��O�ya�'��З�i������q���V�D(B��#��8S�$le��{��+i���8p��������kW��_��q���ڥkK���Sn�߰'�����|�����~�٧����<������b?�؟������Kv.f��zC�R0����U�d�[�R�@b�`��1pe(2v
+\�k[Y$��%A�L0�McU�=�>Zqi�7��[/��ҋ/��[T[qx�+�'���Pܱ�݃=����������·�~[���ѣG�=z��ѣ���?q��KS(]@f���
+)�<2���#��֢�E8��.��ɩ�	v����J���k�h���,�(������E���o��D���>..�X ��VmCcmSS���a�=���+_�"�
"6r�)J��h��F��Y����~c[�d��$:�C�to��9��3	90��Oy���s�=��ʚ���:�gպ]]����{�����m]ݴBh��>P�i�#X�N�qA�+����ގA,�hY"X�g��o���Y��B`,���d���6����"^EmA^$d��\��_�� ��"P���H��x�dj�e�z�%����l+kP�Sr�*˰b����peB�����X�_����c8�*�I��(+�O%'�:���	�B#��_Ei.˃ḹh�YE�x�5p�Fv8*G�ȧ�V���#&��j��cF�u���a�ȶ�`��x<��uh� yS�rSe�)�_�=HJ�_�Uټ��\2?���=h�5A���Ъ�x�xԊ|*xwdX��~������q���Wm+�������Y^��ڹx��+.��}�������l�(����щՍ�W_��+׮^�y�ƭ��o����_~mym#O�ڜ]=6^�%AY���F<v���${�g)m@6;�`:����8�*.�����+r�R�G�L�'Kx|����?�я�2�r�[�`U��(m�UA�����G�{��'x��)��-%%%%%%%%%%��*��_��� ���'����wf��V֌#̫%�_� ù/Ckn�RX�š�������������Ј/�7��6�������njm��G
+�^ ,���Uee)"��{S}D�����������%"X�Dqw8{��q@s�XN,����D��
+�2�v?d[�n��[�2�W�܈�%;k�U�2N�,~���栥$h�
+�6��Wf8*�P������5U7�Ta]e��N���.Y�J=��
+QO0nY	1�:í%�U����IfRIӁ`@���`�ܼ����
+�� /2���b����(�I��V�]�Z�����@o���Ү����9T`=�8"�� %�|�*LX�#�� ű0|ū��bى=l(�i1#+��V���1�:3��
+`P��2��\y�}�ۋÂ�g�ja0���=A�[1�{0K��GF'�V6�Ο;�¥�ϝ����953?08C#h`xd~i��˯���ի�o\�q���[���˯����342�py;�{mN7���������� ��4F܂�S�Ѱ
+SΊ��T�*B�@v’)V���U8��V �$�NeR��{�����/���<�ȣ ��	�s����#��$���=�w�����}FU�����������~��_XXPX�g�>�˳������.�*Y�E��e�bȝ���R�8kjfrf"X��765A�f����IA�`UT��#X���_!ŝ�y����������B����	,A�b,;�!��"�����v�?�?���x-�Xx�&��a,��(�4�(?C����D'Gr����[Q
++�Έ�U4�mde�����(�R�/���?i~0g����++�J$���V�m����SY�U�'���%^�l�iUE٪#�U��*�xVz�����XK��g�K'�	�a�O%V��w�Ȏ��"�
+}-����Caӿ
+�%AFhe@_�<��\����WT�x��,��И��`�C�������Vؘ�;���B���^�9+ ��}�ܧ�!v�(hba���´��4�h�0�2C��sK�'x����/���q=3�842��X230<=��s�қo�w���k7o_�y�ʵ����������`8��c��s8=~�+0��sE
A�~�jEc���
+��V,m�����x�qM9+Ae�y�*N�8ld[qzpH�;�z^x�����O�9<p%V"p��\����������7�!���'g�?)%%%%%%%%%%��r����Ը��������+�K+k˫kda�D,fa!˸���"t	g0�,�2�q10<�ׂ�m��;�-�m��
-H���.)+{�����ܿ:ˇ���K++��T��T�����������Q�;�ڻ�;�E���e�c��(�.�"tC����~B��� O^YW�K�[�+-�K(�WA�Bܼbcsd�𽼄�J���og�AV!��UF\ӫ�t��MY�#������PV7��cX��+�(?&�j}I��.�R�Θ�'��+�b1J�L�B;�@�ⳀQ	�.��lU��TZ��;��-��6��
+jr��bXa���,�*`&V�������A��� \p�cg=Ar��R���A�z�1�Nq����
+����ha�BtM-B�s�!H�@�Y�D[6q:�V,p�f�N�WXX��"���Q!���f��f�`$
+s�#�Ss˫[;�_�|�����s�+#c���@<�N�ML�nl�{�ͷ�|x���[7n޹v�6Q�g�cɌ��IAZD�����Ɏ	+:Ķ�;���4��`I0�K�1�p;c[�'	+�M�6�q�nI���jM������D:��g/.)����iV�>��c��k�wϞ��1AB��ލ��nb=���#G���n*�JIIIIIIIIIII)K4D������
ɿB�t�h������5=�8=K,�y��%S�vG]CCwo��ᨪ��ihhhm5.�EXV��4Ax���(X%e�"�{
 �����C��-���ro������)X6[�{��#X�B�1nl�0 �t�\�,���fC�
+!ϱ����
+n��3SX�:��L��'�@�0,2WfgЌ`��Q�$�*��T�3m
Y��@k�0��'���H+��Jy*Ӷ�v�L/+ƺ�,C��m�8Ť�U���	6�_�P�S�#ұn
+��!�#Y�;f�*��q�('�X�*�m���b�@Pz1�J��j���P �[�xzV�(UdXnBV�g%*�hL���·@�T��T�oѴ��V�j��`��י��aū�̰b0+8ƛ�HJwA�Is{1y僌��,��E�������q�&��C�3��[�v�_:w������e��������ƧV�6^~�u��߼u�֝��~p����/��/�������G`v��ΕF����� �Y� �&­F�x���bK��6��"�F�t�0�Ǝ����2�����Q��_V^����w��lNn�#�>��{��}���V�	o��]99Ƶ�}��<�g<���sωg�ӧO��%))))))))))))e�G?��q��/�x~~Aa�3_�������:�����Z��W��K�b�\,�ˌ`��׃#c�ߌ@�jm�;�m�0D��Z[�C��l�P ���*�!V1�������"$�����^!D
+V����t�9]��"��<ܿ��o�9+�������C��n�\y(c1��� �d���d�*f^d���<��h]�9B�3ȭ����HK�?Ә��yҚ�z�ݴ��N��|� ��I%�9�Jf[�{xU�Sf7����/����\�4�ǎ�j��	��laE5���1���a%�V�eBש!HQ�
d
� �]ҊVl鏏�, #Y��~��$�K��+���ƫ�A�xa6����[�c����>� ��ܪ��YyxC�.�0�Ε����#	 ���	a[�]7^N��N��/�m�l�\<����K+������X<Of�G���.�����]����7o߸u���[����l30<f�q���gs9\>��E�hRЍ{�>�I�>�$���ߗ��2�[�z0J����!��
A�Y^���ȶ"�*
'�J�Ԅ񀺆Ɵ��/���o>|���~׮]2�
+ܪ=OP�x�999������o������<��x*>yJ�ٕ������������y�>z���}ck,��%ad�]b�c�Z�s�pf���Z���#���������w_��^�����kw:k�j��Z �UZQQRVv����4A�8DXRQQQ]SYS[UˆZ�L�����������+�H��#XHq������sa�ogEB���L.��H�As��������2I�9I����R�iB+�=��[-������T�J^�[*٪z��	Z��T�G����b�2(]H�u�1�jV3*(q�d��YE�ZĚ�b�UL���7�Ȱ���@�t �dT+K7��������l+,	Ҫ 3�|A3^�C����C`eZX������x��^��X,�E�tɰ��Ae��H��%��R��#Z�¶���V.O��q�p��8B:���s����57��A�xjpxljf~�ϝi�ܥյ�际���86��F��w.\z�w�\�q����ݸu�+W�6��G'�7����.���(�a�f��٧a�Q����gEl+YaCP�|��W�Ex�
+�³��xVɴq��'R��������>�����������'O���<��c����o�1Ap�rP��ڿ����y��<�m�Ͻ��s���������������?��q�ܷ��VQ�S�<c�ѹ�����EBqV���"ù����p�@�sSӳ3�C��`��������v�wuVTW5���56�WU����E
+֋��Z������5��r��ih�
+VKK���;�::Z:���
+a���� ���v��ſ�끒U�Y,�Ȳ�4��=����փ�A>�����$�
+
+�*&���������~f��㪲CS�Š��FP���R�O�&�ڂ�>�iL��u�*b��BVۊ�,��2�խ'*B����SY��3a���@��2��h�,y%m�æs��y��1�U�`��	I�c�*`���]
+\�eU:�Y�Bt�qя��~�����f��*Ӟ��Y[^�F�����u��؉j�Dt��7�A�V�`$������`,�?0<15�����u~����s�66���/�=��D������������x��+׮݀�Ս�w?�q��ŗF'��фO:\^���w
+{��Rd�x��/�\��B����!�J�	R�
+�V4&(��0��Ȱ���3�b�tf`�W�z��|�;g�zz���=�xN��,�E��z����{��;���w�б�ǟ����s�V���������������o�SO>��_p<?�����syuRX����F���,�e���Z�EBb���-���ə�D:��p�5�w��:ݮ�������6�`UT�!緟--).+=,lVVU��)XHqoi�VGkWW[F�p���׆wG����p��E�п�����%|%�L/�7
+9���E��4a��	~��e�W�D�Rf�*�=G�=2(����낸΂U��JJ�@����
+Kv3!�+��'6��I*BW	ϊg���ad^EM��S	Q�âV�*HƔ������A��@��Z^E�U$F���
+dӁ1�V`���̪`$�{�<U��T��b/r;���fP[�Tw�n]FZ�HU�-�~`Oi��ý,�tȌ�C��жb�+^�i+����@��VPdQ�������+�ۏΕ��V��W��V��Bh[�	��ށ���������s�]���u~aiml|*��Db�x2=>9������o����޸E���[w�|�=�	$Oz��5����8=>�����C<v��
+�~Du	����;H��0�† ��x���ƒ�+��Ja�*E��xR��GLJG�k�������g9�����U�x++��x̞={��2t�p�ɓ�e�V�ٕ��������������8D��?�����o�����:T7��6�ł��	�Z1Y��š]�ö8kfz�E�Z��Y������������������,YX�EH�A:����P!�������f�`A�����l6lڻ��E�*�����L*+�]w�.��,�e%tY(X!�=�B����xP�q@�B��+�‚ ��<(j���+fg��d�x�����d(!�U4��=+A�
+��`L
+_1�ɧ�k������W�J������5��`�a�D\���b�Tv�h`��2�J*	F���W	��
+���V�x�0�
+d/��@w���.l+f^i,�%�ṲB��m+tit4� R��ዄ�bmA�������Z^
+b��Ar��M"_���i:Ѝ�����2�9�{n��Ҝn�2�̔�+t�`:���ʎq2��`$�H����-��mmm_8w��q���915��
+G��h|`x�x�x���E���[wn޺{�����\[��I��;��n�qhC�<+�$��rWH#ۊ�+�8�z ���!s�q�Z%iI0�=A�Z�I��ubW����ҙ��щI������N?��#G��?��c�zV¶2ή]`m�?p ���Ç;q�I�pUx��3g��n������������������'O�~��x��%���Z�[���,,��}yp��8G��,,jN��M��O��%R�>"���uy\5�u�u�M���uue�����/b��lII	��ʌ���*�*�����^_��P�����J ���������n�`���{���W	�%�4��ث�ǐ���Bn)�%�0��X�J���P�� ���Wt-e�x�yVҶ�HXY�b+^�����ޙ�j����+��M�dG+*%�Tc��z��uq�ij2V��ULXU"I%ū�̤��,�*�hq�X�
+�T��dU1�*l^Ε�V_=(��E��bO6�Br�X�0DC�{VV�tJ[� nzY��C����X�k�7�����=0;(e�B�a���B��e��#���t#�����sŮy[0@��@��	"�=L��#��A�	.�������==��?8�&C�X�pnq����z����o\�1�;�o޹z�楗^�0��;��b%A���'�L���<�����z�dK�̶b0v@��re�Ů�s�%M�*�����TƸM�ҩ����x"��bqɗ��C�8x������s��w�>�9r�@����������TRRRRRRRRRRR�����s��'?�ɉ�������y���te��.!�`-�"�g���"��g�E83��8<6��#-���M�������������	"Xe�_A����'Y
+���������������#X���
-�M�j�!�n"��� ���f�Q�ЉB��E),]��,�U@�j�O^	_!Գ&���cqK.��%���T�
+’M-�?�W)��Eo�{SVV���K������xv*FE=0�%G��Eݪ(�r�U�\c�ª�J��H6���P�\1~$�
(�Nq,�MeWY0DHv����@	���b%Pl2OR��[�j���J���p���E��V��΂X�*��\>�M�OE�+��� A��;��]�`U���8z�O�+������+�`x+���t�]?�M��0A�7�C1x�>��=�Tfplbzaqucz��;7��/��O%��P8O�'�g��_|�m��_�y���k7n����s�+Z0js�)��������1���6�>XZ"�*�T�0Q��$�� �	bU��U�d� gK���-�	�=���q�ǎ��D*�i�T<��
��ut�|��x��c�xV�s%�V99��v�2�9��w����'N;~���xR-((P�gQRRRRRRRRRRR�WD���O�9��ٳ�.����� YX�‚:���
+�WKR*��3s�ӳ��T����kh��.W]cCeMMcKKummiEy1zV/�=�b1��J��K��UZYU^U]VU]	��چh��4��ŝ�WD�bw䯸e���>?��D�*@��u�Y1>���A��A����>��nB�%|zJ	�BNHF�����8t=%V�!��ڠ9h�o��W*nxV��bFV4�^������UQaRQO0N�@��?����Qم1E��x��y�5m+	�n<�/<+�\�;���� ���V �X2��+W�&؊"X&���
+dv��{t�Y6
~~0[��+�^,�)��~��y�
_�-Bj���^��+����e@౻�¿҄m�Q+8X����'x��gsP�qW"3<:>��=�s��]��:���115��Ж��Ս�W�x��]�y��m(	^�q�����]�O��_{�����]4b������4�
ԂĶ"�<+ZԂaA���P4d� ��l@��ǒ���
+y�Q[!��x1�U:��d2���[����_P���]�
+�����"�rss������|0��?���|��BO��W�QRRRRRRRRRRR��֟��G'�����ٯ,����or��W���
+�ű�Wп����f���B8=�01=;;�0<F���������W^U���R��XQUURVv#X�_�q��_�TT��UU[[[�`�����"�VWW{wOGw�h"��+�:�>�_9}�[`�*3�EG��t���,��B�V�1�QMZ��教��+1Dh�ܓn���R�k�%���y�=�P�4H}�`,k.0���Y�+�Z��fn������dFɣ�A3�ۂ¡���!H�A�Y�cd�w�"��Si��9CRȊӮDIP�W����ؘ [����r�:�����̐��p��¶�꟎xv��a�J��i:�
�9�����i._�ڂX���� �Do9�.�����@��\RC��(j�ќ.�\	��	ɫ��G`���7~6�'�G�O
+ʃz8M�OM�Þ������]\]ߚ�]�D��H<��_\���k�~p��V��W>���koNL͹<�n�W8@�7>_�dwͫ��-�wJ�8Wt��=A�	�� �V��[8?���J� ��"	������ɌXĶ`:��$�pg}c�׿��]�r���س�8�%&w?a:W���2^�w��$yZZ,:yR��CIIIIIIIIIII��~��_=~�ԓ����9�������h^mr���p��"!�	��
+�#\\�]X��;LN��O�-$3ND��z{nW}cCUm]CKkummyee�!ᰨHXRQQVYU^]
 ������������`ut`�����[B`9p�']��L~�%e�]�C��������@O������+s���#�:���
+�r����]"\�UJ���f�J�[!�+��)��
+����Ķ����PW�.1������{'�Oe�W,v�+ƶ�!+�tI�+~g�t�p�BQˌ`�t�����o���|������1J!�
+���!��V�!Ȫt'�t,�rWӋ�+��$+r��:g[ᖥ_��x'�N�
+d��
+ꄱ�R+m�D+и�}@�XQ�
+���\���pz�N��{�A��E��=L�bOpaqeccg��ŭ���۳�K�#�D&��������~��}��{�oݹr���g�;=���s�|PD��ƭ ]:vC4#�Nj��4���
+?-!�ZQ�
+�Vp
q/ \��N�@Z�&��$��	Fb'${"�I�����86�����<��G�ݽ;+s%;WbO0''׸ݷ���c�d�J-	*)))))))))))��w������c�O|�w�5�������զ�r_�,,�"\ZY�[�+s��8=o�a��.,��M�vv645:ܮ�ޞ��斺&�`���S�\,:T!,)//��aeu5B���(�@q�h��������ٻ0�es��ȿrx����5ye1�c�S�������*�:n�:'��R"�%�W�VY��upP2�,5����n�Ĺ���LUYHVhd���X��J3�r%��ϊ�ti4P��|:��ĝ��
+��g�8�=�ۂq-i#�J�م`V>,5��������!+䁛T+��3�J�xVZP�=�	��0+���i=
+Y�u���{
+�Vܛ#cW�V9yV.9?�ڢ��b��UX^Xt���tc=��s���"�^LQO� 2Qڊ��ã��6�V;�Kkc�S�����F��6�_띫�o޼}����7n߽r��[﾿}�b��H����p�<~"�ӭ��ȶ
+QC�l����	���+����C���6#��"��&iO0�� �H�)���V����'R�p4�
�?��/�y��S�c�?.㭲�+����՞�{�*(,ϐ9O<��RRRRRRRRRRRRR�?����fg�P녳�� �����-,�H\�(�"XX��EH����f�&g�f���������������447U��6��U�חVTP��,�W�������+�ª���,���6��7��
)X���E"ܑ���w����Z����rf�Xd^A�+����&�1n1��bJ$e3J��?�p��J�+`��ʌc������.H�A	�nAZ�X�*$�ᆕ�@R�*(��b+��V`\�}*��P�*���x���ޥc{��.�V�ӌ�M���d��Ѯ|�H3��z g��Hv�f�Y
��l+0(WG��NmA�cUAƹr���
A��"�Y:�eX.cW�t��e����;�)�\Q�
+9�N��s� W>�V^|��pO0=�p|�p����z@G㩁����wcs����ō��K��S��'�������嵗^}����@��8�n�~��.���������9.~��
+Ԃ�bl+�Ցg�H����*j��a�+ qŀ��?��$"�U4��V�#I0*;��p���`� �?���]}���w{�q��
W{�!W��f��{<x�ĉg��U��X�WJJJJJJJJJJJJ��d�ɖ_Pp�ر�ɩ��s+̿�pX+l���+a���2	Wf�š�[��]�4�<^Z��2�8m��lh�VwooeuuCsK}SsEu5E����9D�UeYU��T�����[����������Vo/�m6�_���v������
+�����+�XAj%��EX03�WA	��`�,[��<������ao�ˉ�OŬ*�^g0+3|ųU�1¿
+a���@�1��:�`�@q8�J>�]�$vv�xV̹�R�*��CV|.0lV�t`Ăa�gY�Jr��]������+��h!��$(�E���	�L$��%A�#嬄I�&l�OtՊyY�bY,HOQ�
+�T^�ODO�Xn�Y��`+HX���V>��T+Yte����W���7�V�'�׌�P$�����YX\]���ڹ��u��u��Y�?��d�pzv��ŗ�y��[wn߽��G7n�}��+�_y��}�ƒ�vgO�?<?C���ʏ8z���`įC�����p���PTAOPђ`����NÂ,d�'�@�ZXP��`��V������oik��O�ǡÇ�'��w��D���{���Aۊ�޽�>��3����S�
+JJJJJJJJJJJJ�����7��SO=u�4P��N�z�ų;.�llA��aAK����K�,,rg,`�/L����/��nO}SSGw���ijm���mjk���/���A��:�8w�VV�VU��U��������������޾n\!$~;U�A`Qs���NK�0@-��n��X���W�a$f�H(��(>d0۹��t�f�VI١�"��lvΪb��2`�,r�UBJ��Y�*Nb���=@2�d�zL��"Zފ;TR��4���e�XŠr;�
+���@Q�xG��������.�sů�JD�� y�fΊ~0(�Ӑ�@���Wҋ���P�������c���_!�
+!�H�V~1 ��Ε�gwzɰ�N0����W���mE��`(�H���M�bOps�����յ͙�š��d��x��ə������oݺ{��������ʵ/�����f�Ш����s��ƅ�#����N%���	�=@�+���N�����X�V@�"�*���d^��^ıO�e۪p�xn�izkG�����_y���?�+����¶ʅE�'rsw�����xݞ=������χ�O�V�SPRRRRRRRRRRR���/|�EE�����|�xdc#X���8w��*c�kn�X��"\��[���3^��Fc==
MM����W][[��T��TUS��22��EHD���(���u�Dqokl'�{W[WWg_
������{|�e��ZV"��+An�9����-�+ٿ�)�J��Ck��\��8��%|VRV�m\,	~Ɖ��+���J�n��XU����lai<vE�&;�^E��	�����UT�]�� 㱳�7o�T��tu�
�~>XU��b�+l��Q�y�"g���*\�n�����<XŠ��g��E,��6u1H��#�Xs�wӫ;]�v)a���� <��Ɍry mE��P1��kw��8�8,�r;@����i�@������x"=42>=�@=���k��s�+����ƒ�F�&�_�W^{�oܼs����o�����;��������Ĕ���9��n��Þ����1|i+��Ӏ V1�Œ�T�*Ü��	�i+��ȳ�O'C�U"�1Nf`ppx�xUK[���ï������#G>����� p���+:��n=�g��G�=-�����()))))))))))�[��~�3���_���S�N���m�����g}se}kE�9ԝpX˫�++�徼<���,w�aM��O����/��]^oSsKgw��wpSKsUmmCssM]]��`���-�[j�����Z��5����X���������̆�;zzL�����/�_1{*`f��m�3],���AL^a��y&����RB�����`U�����k�g�
+ɵA3sŗY�*�{�W7�T�#�[��O4o%��c�V ZX��C%��b=P��8ٿ�YcWr�%�d�J���ŠH�@��
+�)|�v)s%�V�P�8��Ů�-HG�|����(�4'ٌ���9�ʼ&�
+�,�Z��s�b�U�_+ W��Ei%���m+��A'V�b9]�r����[�����['�
+�O�S�c@���ׯ�P$�����Y\^[����:OT��ət�P4��'SC#c�k/]~��޸}�ν���������y��ֹS3s�D����ڜ.�ߋ�e��!H�+?31vŻ��P8��g��@�n�[%.pI�����`
+��$Ůl�����+�������<04��k��g��?=y��#��r1Je��vs������޽{��;���_P`�m�~򼠒�����������ҿ�y�邢��Ç�����6�] ky����),^$D��+�#\�"!�������t0���iln�;�����VEuuYEEqi�gϾX��+��-ŠR�`U��V!Ž(X�jnoo��l��
+a�W�6;�W6k�aG{صfu����x������`$���daV*��Wi�Y=��b8������u%�WI
+\�,IM�K[1��L^��lgE���`V��O[�̴��n�x��VVoJ.�� C�C\M��M*��mb�vt�-��u���%j�>	���O%
+��(�V�$�T�{�{p¿b}@ڠ�;�Q�}@V�@P���i+8�ͮ�C�2�n��Q+^tz��Sц���!��VHJ��ud�G)��	�C�x*=8:>=7������u~c��{:53�?0�'����[<w������;�>�{���?��ƭ�^6�Lo���-u�p�Q�� ��=A�/	�m�I�Qƶ
+G�!#z<��l���Q��I��R�D:J`�d*.J��_�3�t����Ĵ7���W���������}�>��#9�0(�V����V��(���}�8z���yF<��'|%%%%%%%%%%%�w����{�����E�:r�Xye�������Սmba�����azY��Z�-��E]Br����Rf"X
��]�.�`5��������,�|�S�p�(X匂UW]��&j�������D�l�^'��<Y��_�_�$�B�L����U�/�����g��9;(�W�Y%EQp��J��V읢sE~�0�X�*k@0j�ZEū�+�L'v�إ8�%[���+fL=�b���	H��߄�s�����2؊�i^��x���$+Z�,�@^4'�`�@Zi��.���b�f^?!^���
+�V~�Si�g�C�M-v9+0���$��q�^���p�]^�[��@]�<~>�0� �@0�t�N?�����)������:���IT�(�����ə�������k7oݽw��Gw?�����������R�HE.���$"zV?��D��qk2؍o._�H�[�y��!�x�p<A�ah���pL0���mm+�6m|�S���M-�?��?��׾~�ĉG}��]�����tA$v��rrs n�l��yyE�
���"����������������]O>�Q�����6wDk�/n0(XX��,��j��1��,�`��ybz&��ww767;\Ξ�ު�������Ɗ�j��w<ťe%e���������3��ڛ�;Z:;[��:��Bh�	B���q<���M�+jJ�w���a�I���;?srb2���L�{(!
JEB^L��/&�Ƞ�_���a�������/�E(���J �wQ7����5���˶�,i���(�����e<vFY�n�튿�sVĶ�aVtK��73W�\�,v���	���@1# ;
tq�:��e�8�=@e@�[��m�q�J�XN�2;Q���i+r������G
A1|�!W.������K��a �A�j`hdbr���[����<x����щD2��c��������+������7��ô��w�}���k�[ã�p��׌�K=A���SI<vVX�ב�zV�c?-%��ꁸ'�1A�&�[h�I҉R�W1j
A"\%Ӑ���v{�?������ݢ�'w�����C�j�^lũ�̹��م�־��<x����ǎ?���♭�P�VJJJJJJJJJJJJ����g��((8x�P]c���y�_!YXx��,>JH,�E�E����Z���b�а��mjmig����:�`5�UT�������,���A���Q��Ά1�� whv��v��z�N�_����?`aiV��ߙMq�-+�,�˃t J$���b���RrOP�dr;&���,/�`aݪ����7>��F�>���b 1���Ǐ	��XUܛb6��Y��E]�T>�	#��>&l~̈́UH�DC����
��GiV��5�
��`��	������4�_���!+°C[�)�i��-�@b[y���^㷃���V.�r�n���wP7�p��@��Zٜ�؍{\���2ވ���Qј`��X?��P$����O/,���k���Kk�ө����E�ãƯ��W^{�ʇ�o����7o߽��+C#�z(�ӂd�aQC�*�z����|_Ȱ�%A
��:[��� �V�x��х���ɭJ�؀`
+OO��V̶Jg���pxlbʸ�ų����*:yr�����nF���#�����Ut	���:t��iuBQٕ���������������SO9z��o;3����U��6�}��W��Z�.�ܗ��1�5 w`�O�.��/NNφc�N�`�]Ξ��ʚ���:1DH�<�e\�`����������ڪں���`�4���vB��(X]6{�����
+�W�m�|8���2cW�&�"ϣ�d�� ��d����DV�Jky�+	۞0��T�1;K^EX
���b�)X�VM{
+f�x�J���� KX�`+��B<]f6�9Ue��e�z��)�`���X�Yr����C>�'��Z	;ѫ,T����8�Jt�-�ɼb�+�
t�E�?B�?$��Yy���ޔ��*��U~���Tv Y��nZXހ�ɪr�=�+e�l��>�ێ�f��mx+�H�b���w�A-I�2#c�3sK�+��;k�����|:31~$��Tf��u�p��w޻r����w�su���o����k������o��<v����G�h��#�
+��[E	�ƫ��p4Q+@��g����bHv�b
A���������Ș�y�w��������C����c�����Un�\�?p �С�yy�N�x�ٯ�OejRPIIIIIIIIIII�?�����¢���}45��mn��	)��M�HHBb�EB��B���,
kafnavi)34��x���::\wcKSu}]CkkM]=P�i���W�r/++.-�!B�`����������`u�tv�e�q8�\.���^������&篨<Hw�����a��.��aE)����2_e���lXP:��┭�Q8>(��1+ҊY�P �rK*Ν+�	H�+�W�gGa*,	r�z���+�h��*�l=0�I_I�*Yy�y�V�΂U`U�1�*1`�+o@�V����`v0@�u�N򣄑��x���_�I�Y,���a�oy�
+�bT~��FV��\8<ĶB�
+XX�H�=A�`�g
=A�7��B�Xrphtjfnqyum}{}sgemsfvqph,Kj�p,����:w�ͷ���ƭ[w�߽�l���o�nlŒ�#';�Y�	"�
+@���*��ȹ
+�
+x�����ـ �h"b�H�`,��*����$0v6#�fl�4����O`b�x#��?+,,���۷��M�x+k�*��rr���w����G��:TPh!\Z_TRRRRRRRRRRRR�����'�
+�?�����������h^�np#�X&�}\,򯖐�C�K+�˸E��4��əY��"t�zm���چ斆��
+�`����P\lZX�",�aY%T+�BX_S�����V�6wvvtuw��z 岹�v� ������v����A�|��D����0�t>(!�S��2��3d�^%�6�Q�2Y��s�x���V��E�U�qי�.VHb�[�+3X�o#�kE1�W� �Pѯ�	��B¿2��~��
+��%6����x��W�v��0��7�
+�� ��4�\�=̉��m��[d�*�l(�"���bQ.l�s�e�+'��-��q7��Tf=+0���.�"�q����T,�zѶA-�����'�ߞ����u��nmknaetl2����p4>4:������o_�v��{w�$x��G7n߽��kC#��r��m��/��8�ǯ�u��#���C�V�0�����Ķ��oŗ�k�]	�P٣�x*����q
<v �g�j���d*�����xiY�׿�M��'��E�rs����ڼ�CǏ�8j�رS�O�g��'N��n%%%%%%%%%%%�����tQPP�_X�g�ޖ�����U�`���&�
+�X�0G�XX�|�@X�s�[\6������V��G=>Skk{W���nnm���khi������.��,.-}��Y�EX\\�+����H�bw�`57�������х������կ��,��iiV��,������˃�(�`	����J���ʊ`IfK^�������2�.�	���h1*���b�(	�y�J�X7P�VQ��7�R�J��i1�BkG��_�п"���)���+^d��ف�$��:a�%���\��H3G�'0�f[�g��+��s׹IE�u��YL���45
+���U�2����@&�X���g�C�+�Ī �V��e���ˢA}l+��CO�tlrv���X��Y]�Z\Z���Mg�h(���V.��������h[ݿy��[�o������s�׼H[���!B����%��ZX~�T+�[ў`$
+�Y�*�f�mM�t �W�H"	�U�)j�L�cԪ�N� 3044:�kw����g�^[1�
+/��+�[A�j�.�z����-,*zb����¿�뿦g����?���[IIIIIIIIIII�MgϞ5nO?�䉂�����~�k������d��A�ב�N)�U�H��<�� ����߿�==M�-v���n����oi�oh���)��()+{�W`^�����U�qJ++K��`��G�ꛚ���ڱB������i��8�6���������ɒ������ �*,�K2�=(�C��+�J����A"�#���j��@DZE�z ���@
+Y1�U\�YIl��X�"bj?;��
+ȕxы�u��V`X���V>�"��Ǐ��]ypC�HV|a��
+��`@���m�3W�4r���Q��kY��o��@C�������� d����E�����y��@��n���B��!�mVNO��E�+�\�yE�8H�nҰG��߃�h{��K��+k[k�ۋ+k�3�C#�xRFb�������y�ʍ[w�����W>��}�b4�6ޑ��h|�TK��@㞀�[HXa�����A;w��ܰB0;�ƒ�\��x��hc�$ȢV1�[�3�E�bW�L��S��Tf��W�z��S�O?�K�°��DvU0��w!�=�Сcǎ��3=A�xv%%%%%%%%%%%%��f�<u�s8ݕ_Ph����ٵ���&"X�[b�p����b�púE��s�p13�43�8��<4:�����;��=>oskkU]]Sk[u}}yeeIY9�ϖ��
+a�I��&
+Vu]=V[[[��j��	¾�C���W�
+a�E� �&��D`q�9�Wf�J��IAl
+��A�U���	�*I�V0��"Xq��8k=.��Z�4�D�J<=���N�u�p�V���*fL	z��D����> ����p���/R7��6�­�yL'ϊ�]b=�@U�·��� I�
p�
++$��Uv��=JU!��gÐUP~��|,|�dTv����!����C�+����O'(:���{�~���'81������e���͙���щx2
+Ǣ��������o�w�֝��?���'4&x�ڍW^{ktb�xk=Ƈ�
��Ue[��jŐV�ҋX�J��BZ�(P٣	j"�����gEÂ�4���N=�Tz ��O���;�7����s����}�󟗣VY�U�nP.
+Vw�>��w��q�!x��q�䬤�������������S�N��?QP��g����[��,w)�Ō,
+bA�j
)X�p�����)�����q;53g��������t��v�`�U]SSVYYRZ�bq1���KJKJK�EX�V�`�U�7�56�7Ž���}�pw�\�?�p�ȿzX��lJ����#��v��g����'����u�Π�/��,,��&#&���_�=e!YA��mZ8W���@���Xm���Q+	2�XAi=�D�c[0d�D�
+�J�b ���x+�$+��Vhdi��^�� W�VQ��DN;5��p�Șb�+�_��h �Tx��ο�����
+p�����,��+�V��mw`���c�v�s�~zV��Q��c=A��{�ã�3s�K+�k�+k�s+㓳���f�����K��_y���w�t��O�}������^������\z8��c7>B�����mA2�ZX@�� �4��z_�jh���l�P,�3��jE�����`8W��JAU0�Q��t�`"�o�C�������T�rs�؛�Y�a��*������>r䴵���JJJJJJJJJJJJJ�F�EE����_��-���[`a�ل[bm������}i],ag�+�`�.,�/���{|�Ɩ���N�����RS����������Ⲳ!yU&�K� �URQ�
R���掎����޾n���������gbW�_=���%��e巛B���&tɌʂ�g�۹E��I�o�y%#ٵh�E��E����`��'��^%�Y����JD��T�Y&���\�Ε`X!��%�(je�5�$H9+��_�L��Sa�,➠`���UE/b��4��ahL��g�	+x��ס����!��O�+��
A�����,v�xѡB�
+sV�6W���<+;ୈ�N���#�������1^�%Ҹ'8������������:15�?8��B�X"�?93w�����|x���{}z��O����ڍ[o����΅Dz�x��v�	bn��صCx�u���T��b���Q ��g%A�Y!�*�=A�_Ƴ�0|%�V	\dl�T:l���P(s��/�-���<k<{<�裻�xb�޽�1A�4��0���=���
+����7-t)|������������������y��K_�����f��-��e-B,2��qK���m.,3
+���������|,����mhnv�]6����Ƹnhi���.��(�� VK�b��������8e@q����5NmF�����;ڻȿ��b�N���W��@�PT-�G�6�����ha!��Wpkv9+,�,~gP���da��ܿb�.��#Y��;5٭�\��fȣ�!)X�|-,��r">kU�����Â���u���ة*�����VA�0�^�Aٿ����YX�J�<v��zY�ʉs{�_9�����+\��S2�Y~��K$+;+�mEӁ̼B����ks
+���ت��z�^Li��q3�	��P8�`Op~queusl���م���x"
�}��������w���{r���������}p��Kc�^��m�K�h�[�A0;�
+�
+|3l�%�P��+���s�,y��$��VE☹�*O�i0��p��d���V��Ã�c�h�����7������O<a<o<�+�L[��8W���
+��w�۷��ѣO}��m��e%%%%%%%%%%%%%��\�'O������sk[���ٖ���HHB��Z����Ś�
+*��+�#c^��������󵴵V��4����חWU�����UZ\��Y^!4�/�����������1�UcsS[[[ ���r����t�����X�f^��&��,aQ,��E��
+���^�8 �aۍ[�oyaP���gG�����,�Fn�9Wa�$��N�K	+��2=+>����IHv١ˆZP2�X�l<�҈s>��Ǯ8�Jws;�T�o��0��Μ+fR᭹'� {
+��N~�N�
+T��rShCх�ɝ+V�g��������K�At�hR������R^�s�m��k�p,�����������"�V��#�T&KD���	���7޼v�ֽ����ӏ>�ǻ�?~����_�]X�&R}0ʨ�`�
+=+�3�0
����+	R�
+�A��`0¨�HbO�me\`Ί�V��� !��)�X�������������\]Cӟ��S�	W{d�U֞ ��	Ҿg�ރyy�EE���/}i����)WIIIIIIIIIIII�Ieee������S��\X^]�����Yۖ����Z��Z���
+#X�f�pemai�"X`a�/�/�L�-D���޾��&���p9+k�뛚[!�%*�T,.-3G`A���)�u�
�uƿjkk��V�M䯰BhR�?#m�k�Yf�����;��$�W���(X�Q��k�	��E�v�\�=*�a^E��*ٿ�L{�8W~����-n�/h���I�	+9�v�	+�b�0vM�Y��
����� 5��<g��-%A�"�����U&��]hdX!���z��\Q�ʉ&���<d�p{ɭ�a�ʎ��r�ۊ��}�\�Lۊ�,|��� A��+Hj������4=I$2�ãӳ�Kk�+����K#c�����V�d�����ʥ�^}����}�ѧ����t��O�ݸeܹ���6�E��e|.XѪ ���
+0>E�PXC�RӉ�s����`$�%Ch^��`<I�+����*-J�,m�;�	�������76���~��o|���?j<K���fV�s��V�o����cǾ����&�v����������������$����ԩ���+�v.^Z������}e[����0	�E�s�`a�,,���ظ�~cssGg�O���UTW5�����WP�������S��8�����UU4DXS�P�����j������޾;"�˚��eu	��X��Wt��G��c����
+��N�#X�6�k�l^��X#�3�*���u�_���
��\dq,�$�F�>fa�,<� �#:#\Y�V���d�+��
+؊�ֈj�>�[�͆ ZU�Y!��{�ƮQ�
+�*�V��F����YA�
+�VTd�v<�baI���A��Vv���rVN�����r��Ma}�HS0&HTv�	&G&����U��V7���&����Q�L�2�+�]���{ܼ}�V���ǟ�ӝ{�_{������	-���e��m��V��� � �l+V�(^%A<�D
+3WI[E�(����I���2t�Uf���F�'3Cm]�����w�w���Gy����M�j7�rw砈�e(��!9p���������������/�/?�,E��N��]X���a֖y�"!���7�B,8+�X!\���ʬ���2�6[CS���ry�U�յ
����U�ե�����g�K�VD���J�`U��Ž�������}�_9M�*{E���yY1���%�)��\ ��N|u�����ն2_����hB��+�Mq�&��ܡ�Π?,��Da0J�+3m��1A5�����_�ȰB?����E{�Ҙ ��<ZE�@ƶ��=��0vef�\��� ���n����ў�RX�UE%A�49�n�ba�v*Ҍ��+������c���>�Y��-\Ëda9��r"u
+�Vh�4����'��0�Fǧf斖�׍���թ�����(���Ə�������7�~����w?��O0p��?�������щ�h"���m�ۧ�%�`�]���w���VTD0{�ꁡh�BV��c\�clI��4�1ge�#${"��Cટ���@�pdlblb������������3gv��>��\G�
+�iL��Vh[�m�m�}�<x����}���)���O�<��Z���������������t<?�sHT>���رx���_&�
+������s�kP$\X�Tg�vayed|��a�/�o��(��jhm�mh���.)�(.)�YaaUTP�(�����-M���p��{.�����8�J�����7���@�#�����2���B�vS�����
+!/	�9¬��*����4�+������@V���\qÊ^Թ[
+��u��/]r����H�X�I>�N�+7�YY�V����hX<c��vM��hXW>��N�|S�?���Slz���7�`���'�:����/���&�V6����瀄c[9Y����r�^���!�_�S�C�	F����������ե��ťթ�����h<G��������֫��y���;�>"��8�o�*���|Z�Å~�?��¾�p�(g��!�	iEK�ƋA��#X��C�[�0��sV)�È%�ȫ��$�0��W���2¶Je�G'�f�tiY����w~'//�Gمa*f�Ε89�����={��3����'����G��'U%%%%%%%%%%%%�qUTT���ַ�
+
+��N�:=;���s�̫���.!bm,��/�0�;��p�p�"X�L������p�\^OUmMMCCcK[UmmiyEiy�Y2�$�W����@q�
+a]}]SSS{{K'G�;�6�2�����G����'�,,$/$�J�+�a���`ʼnd��m&EO��\��A�+.Ƿ$���V1XE�*���ȯ󯂬��V�C8W��YA�
+'y
+��WdR1$��Y���WfU�##�ܹ2.|XD�yS�㣁,y�%A��1�hLм�b  �|�ʎF���z�CV�;��i7���*�r����U�cn����=����n�f�#�S�h<584653?��������:3�8<:�Hf��h85~�/����W>�u���O>����;�?~��������̀)�	ߞ�V`a!�]F� Vӳ2�Vtx+�Yű$�U�!��
+�WcO�[�Q+㖢V	�\A�j`pxlbz|r�����g�~�kǏ���ߵ:�{�R=��wKT���]�v�ط���y���?v���O��U��
*))))))))))))�+��3g��x~��������]~�5�_q� �RK�.�p�jiyv#X+��҃M��m>-���UVY���R��XQUU�C�/
+�K��K++K�*+�ª���7����������e��86�����*��bIi+��_�-tw�E�-��[�6�!�T�c�uӞ/&�3(
+�h^Iɫ�)vřW�XEÂY��PP��aAB]	h��;Z>���+3j%%�|�!h�Y�E[I�hXin��gH+�k$��b�+�Jq$���Wb7�M�l+VD��kL[��:��p�ؕ�Ηm./D�(mew��`+l:zz�}��^����e���[�!`��
+��~������`xlrfv~yiymie}n~ilb:��cA��������^z��+7o߽�ѧ�'���חV׌G�,�x�P�E�
+
+��E��̹�JC�U�Q�b:F�B�8[���	F)B�ǒ�Jq�U&�H'�����Tf AQ����H�2>��9�������W������={�=�k�M�n<�ʞ��kWNN�n*	<�w�ȑӧM��J[)))))))))))))�����?�/(�/,<u��������� �b1ܮP�8���1��_����������b"��s8�q����Vc%��������������_�- ���!�UYYQSSYS[�������������g�q8mn��
�N�)�~Ak��,�øx�Kh��D�Js���7�b���+A�ⳃ�F���l^1�U ���0e�+�����fVA3s�bW�/{��$�u���$���3�D��$Y�ھN��kˮݽ^�k�r	"N�	�s�9�������3H�9�AD�����=�����PU{�޽k�:O�:�=�=Ux�y~���H찠�g	lŮ����]����$�U��'�E=A)jE�/�D�d[�W!��n.�0gV�V0C0����L*t��ܤ��W�e��py���ܶ�B�cW81��Ul7Y`[��+�\�]Vp�<N����t�0�My�!_�Ş`&[����MLN�mufbjpx�P���P$�He��Fٗ�7�����7oE#?����KW��@RU@��}�0�٩$H+�Q�<j��+�
�� s���п�v�$M�H�d:����V�
��`�&	BI<�b�V�\�����B�����;��{{��m߾~=�
+D�j�y�A&\����Z&�e�Ν;���Q����{�-[����BBBBBBBBBBBBB��u��'پo��������������K��/.�/��],�s�;F�x�pv��,�Xӳ��3�5�����3}�áhL���F(h�Z��ۻ՚�e[GG"<S�u������Rܛ��ަP(�{z�j��0��isyln@�;d
+�j��W|_5�ja��e��)�	�N�@2�j{���
+��\՜��D͞����.9T�ʀ�jOP[ђ��R�W�����Uȕ�0[�*v%{V�(�մ�t�H+)^��V�jO��5hO��إ�/ �TG�S�
+�V~�.��|����<��9=V:إ���+v6[!p��Sv��`v_�
+"<pETv�[�±d:W*�
���9{n�������ؙro"�
E��x���?=��򫯿��'�޸��w���u���_}㭁��`8N�@������12����4C�J�Il&�	�
+F�p����V��^V"���$���T&%�<�$H�A�3�B.O{)��B�P*W�Fnϟ��Q�аu�6�n���WWk�y�֭;������(�_K!!!!!!!!!!!!�[>|�a�����C����.�_����r�pv�-��B
+�_A�pnZ�r�>;9������	��k��ݥT:�.��׭�i��������6^!lj:u�	SXP!d��B>���=�F#"�ȿ�B�T!\����+Nw_maEd�W�5�#�*)�Wi,(�k�t���
+>�j��|�����Ѣ���f�%A�`�b�t�De•��V5��7��V� ���`��9���!9jU���3��U��{J`vo���`Mmv�7ञ �>��1V2���hd�݃v����v"\�U�~�Xdg�N	+:�\DT��w������D����V���|��?82~l��I�	�
es��M�la����^z���vS.	����]��]H���-���`��c��V<s���V	��"{��J�$�X2K�����lRA70�Φ��!�0a�VU�DHv�s�B���0������ȓO"�j�CQ���V�ڰa��uk֮ewޱc�]�v���9����a�޽�/�������������п��������ih�������������KEB��HEBa�B�<�"�87=95sv@�lML��
1��`�h67�����������ts3UO��S2����C���٭TK�,.�۩<�>�0��\���u���q��UH�t��W�K��������� `;]��*��jhW1��}�0�
�6����dXUV~��"U�Uys�;WX��-�b0"W}R�
+/�<�^���k`V�S���"{���'	����Va�D��Ҋz�v�-H�@`��`� 
�
+��۸[��i����R�dwA�� kz��y���&�y�	�=;151�>��C#�B9�H�}px��ŕ7�}��Oo|�P�o���O?�|��Ro?9c����D�H�b�Ђ�`5mp���@��Vi��b��ȧJ�3	ɼ�P�3��ɹ*`I��͕x��Pb����W��u�?��?Z�f
��ѹ��L���'�m+v���[w��E��BV¹�w����5���֞����~��o���e���`ͮ*.��skFJa!�}����͜97u"X�_�O�c��v���J���������[�f{3��ZX'O�>��@�jmnkk��hW(:{�n4���nu:�.��:k"Xr��s���ê%�ȹ��Hs�J��"�F�
Ay�`$��Bg�Վg�|��+�xKQ�
ƿ>@���B��U`@I.�Lb��e•<7��,JR��\�d%Q٫�!vUe�����P�
+HV��^"���.:�|t���Eh�in V��rpĺ�(i��[v��`X9L��j�SX��r���i��.�{G���]�
ñT&W��?3qnbr������Ro_z��h,Y*���/���[���_ܾ	��]v���_��3��@���-��|��_��QFH+��#h[���GrO�0���N�+"\A�
+���4R��l+L[oU��U�z�9d�gѹ*���k�/����l���c��zV���Um�
+z��@�6m޵�no��@�V													����#�>�Ğ��}�����K/�C�����.!���š]X�ZXsܿ���A�;	�š��������^����A�����,��������Ts7���b;�ܡE��ޡPtuw��j�Qo��$��M!��|{%u	W�W�*�=T�w�+u�>JC�k�&(O%ūx�*\
_�"�T(���Z��}x�`�l�8��U%��8C^�]��H`+��VU�a�R���y����I�`�<A��B�bI�A�G$���s�I�\,2�xC����$v?ƫ�V ;�s����@���.����&��0�dX��Fxv���y���N���C^z%�?L=A�'��z�X�8;9}fbjt�lo�`*�G����NL]}��?��Vw�~A�է7�y�����L���!�`�9W2�*%�{B�Y�8�=Ni�
�G
+�g���Rr�*�9+n[Q7����Y�a=A�Z勽�-���O�j:r�G}t���7n��V�\�x+"\��m�޸o�������'v��%��
+												�����q�}���y�[�*���/C�
+\,��"�lm�Pj���?7=G�'п�8w��4��?�nOWO��a'
+VGg�R�Qtu����F���fp���
+ak+[�
+EGww�J���&��j�
+�W4��\,���g:�.��YX4��G�S��*�da�#��JHy*2��D��.V5y�HӤ������a�U�
+i�ƫm��قU�UMUڂ����dOQ�L�'�Ay�`��{J�U��Ϋ�U��iG�
+~�H\�`��'�j�*yV��c�
+�Y�f��.YX��y�H+�Y�,v�g�*���h���v��Ng��(�`v������a�����{}����� �V}ùB9�~M�x2�c��_��������[��ܺs���;�?��އ_}��r��{V�=+XAt����=D���"�
+f�=N>XU��i%R�D:OgآI����gya��V�g���z �X�ʗz���t���\���O�tݺ��K��	ʙ���s��~=�8(��]HHHHHHHHHHHH�WP�<���C��44� Ÿ�åk/-.]�
+��HXJ8��4���E8�@���>953A�'�M���F�I�Ѥ�i}���fkS(�U��ek{Gsk+�`��W-�[ZZ��[;:]]]*�J�ӛ,F��lwX�n�ۃ���ɼr�Ww	��Ò�W<����Y���hQ�JJX�;�9WU�܇Fʆ����γU~�_�j�j�+��^S���d��L�k8ɪֹ
+H�+y�����Y��4OP2���B�
+j��rz���xVn����V[�5��";&�؁-��뀱r�mNp�ز�Z����=�'��o��V~�+�s*�����L���?846~��V�C��b%��Fb�D2��?0;����o_���[w�u���>���W_?39�&,6����x�T�s
�0�T|��0�<�$�Uq���ɞ�KQ�$F��8:��¨Uͪd{�X)�*�\1KXmΟ��?74B��5kd�j�m��C�ȶ"�;l۾�X�\���������������Я�9��r?�֮�����w�?��/]]X���tAv�䡄h^��#XX$��š��={"X�@t�K�[�V[�_ �T�:`�����Z�����+DY���v�_uuu)UJ
 ���pwX�.��m�x^��,w�3���-E������'>��G���'RIS%�{2��g�ǫ�+ɶ"f�4|�����˒m+��#+^�b>�(�WU��������k̫��U�+we/KB��A
+_WǮ�nɰ���]f��� YXDb�z N�ڜn;���l�.Z.��]V��V6�w0�lN�YY촛�pEΕ
Y����y�!$\!�=vy �����H<�.�*C��c�gύ��+����l$���[������^y��O>�y�έ��o߽����?����ߜ]X��K��J�Hb�s+N��#��
+�Q���<��4F0-�8������4R0��&3�'���*��J�U�@�U�P΂m�[��g�)O���ٗ�G�
���K�����V�@^֖-[���?��s�w�A�VBBBBBBBBBBBBB�!��7�������������x�����K�.�D��K)�řE�`���B�E�sg&&�5�@���j��(X�
+E�(Xm4��W�_5������������毜ܿ�!�WP!���€<vpU
+�W�-B��$�������X�B�S�7U3^P�6��v����W�:������_�QFX�jgP�]qϪ�]�<�U��`��^��Ѱ�z�C��գɶ�J N��R��[�Ĺ�Dewyc�����Hvd[!�
+pU.	lEUA��b��YL��f��m�qb������D7�<~�?�&��R�hx��ؙs�g�

��{�3�B4#����ؙɕ+W�}��7o�Fۊ��}�ڛo/-�����{y^�z�ܼ";:Wd^E�I \��
+�4_�=��J>'�9�f�2W��I�Db�Tv�����U��WJüO[G����O��g��5k�l�m�ǿ��WP�6oޱs�����/�������܄�������������c����l������w�������d:�r����E�Ś�q�$GH-B�r�������'ϝ��>{n:_*;=�F�p:}�J������h;:���ji9	w)��Ԅ���N��Z��f��,��EB��dx{
ŝ�򉄫�Wr�̫j
+�'������8��T+�`A�*U��J����4p��ANk��\�l�H5�j���f�&U(��T����5�[hU=F
+JH��|�
Aɹ��>7���jC�UX̄)~^'8W>:W0@{���91j%�U��r������g%-��l�"ٍ&-na�sE=A�j�=~)�y|֡���C�x:�/W�����L��972z��o(�+��h<���GƖ.������oܼu�ޝ{_޾�%;����/��OĒ���<d%e�B4�b`Ϫ�-H�+��$;@������hU%q�`2�Mg�4I���<Ѷ*e1m+_*��*����A�������?��S���&>��#�p�xu� 5���V�jmڴu�=����ַ�ot�xA!!!!!!!!!!!!!��H�������76{��V.-]X��� /��Bu�YX�`aa
+kj|�������X$���j��
+�����.��K�d�l�
+ak멦fN�jnnnmmiog�Qtq�
+��2�B^!�BūS�9����W��pXr��va���J�T+�B(���W��6��+9p����d(jETv(V�B�*�ˀ5Kb���[`U�
+0V�0Q٫�?$�٫%A)j���U^n^9�~���J����S�Jn�]6^t��@b[A�V��L6~ <;zY�`[���e���E��������n����	HT��@O���������\�Od"�D2��f��W^{���ݼu�ν/���{�Ï�/_�vfr*_�u������a�Y�9I!+Z��"�*E���y�*�<�x2�U2�Hq{*Ë�ܿ�
+�V��\I=���U��^Oo����X,���V��'���������f_�n�/��K`v��ȴiӦ͛w��;t���#�VBBBBBBBBBBBBB��E��O<��]������\��x���b�\��"ጜ‚q��"�����٩�3��>95S(�:=^�Zms8����`�������mm'�NSy�4���_�t��j���+��B�ʎ� ɹ�;}��*�J�_����d�*$��N�S��N,wٶJ����!P3g0��Vo%�����zO0H`�H�(VRC0�^5L���ؕ��7�J�����h� �&>@l+�[�\�!+7�W�H�+��b;��� ��1����6'�C��&��2���2W0U�ƗӍx� �|��V8�Ѓ�U,�ƞ����ٱ3��c���R%�ʄ��x2]����՗^y��On|q�����\��_e��b�/K:��rV�P4��e��`Ua�Jr��	�Ye� ����жJge�ժ���r�YesEJ[勽�b�����1��؏�'��O���~ݞ=�<��c��!�
+l��ܭ�8O��M�7o��u0;���#&$$$$$$$$$$$$�k�_���hػw�Ν�N�Z���ta�+����^u��Z�3��bUgr����ɩs3s�c�DJo6�50`��:� �խR�+:�,��jjmm�P(����*�Π3q��������B�\�^��5��U+(q�j��wH�E���."Lk��
+��ܟWR[�
+��QE1�]�*���.�W|t �*�+n�I�y����W�Vn��S"\QO}*�;�}I0v8{8�~�X����K����h[�]@edž���$h��M�<F�h��V�\ѭ��=A�a/��(�CQ/��XW���p4��z+��#gF�&F�'���J���T6�(�|�<>qn���w����Ͽ�����/��[�753_,�ǒ�������`$�y��G�ʞ
+x�IiOFiv�%�Q�'3Q�cO�bWo���<�t6�=A���J[�q�`��!vU(J������x8�x���?���9����y�u�7Ԧ�����֭_�f�Z�oܴi˖�[�n�U��С��/�������������Я��<�$ۿ��3�ع{����f"�,�V�7�/P��G�)�s3�S4��@X���-�+N�W��X�v#X=�J�N�����N �S8��	�W�
+ٿ��&�esy����xk�>����1�\��T-,)��.�hS(�GJ�e�;Y���D�y���
+�+�5�vh���G��C��4L�篤��^9m%���
+�.B��x%�v�`�'��جDJ���Cܳr�Tv/���сn/�lmN7��o���p�sew�ce�
+=+^4�y�v���؂1n/{^�'�a�PW����B�x2��x������������޾�T:��C�X:[?�|鍷���Ͽ�s���/��p�ރO>��>����D:���^�t�m��1 ���/b[�z ū��Js�*��L����{�4I0�ɳ3&�̞�gs��l^������[f/kd�P�4����򍧟޾c�ck֬�0MD�J[I�+�[�]�v�ƍ[�nݼe�m������_�B��644�?YBBBBBBBBBBBBB��ڷ�޽��'����/]�$E�x����5���E�Y�aM�B���������X2e4�qa��+���Rutv���7���8u�ts3��~Sk[������[�R��:���Wv����v���>0dȥ	���
+�uBvpjYX�����G����yE8wt���hMK�d��%㫶!ȱW������k���C��9W�`U@j�
+2���[�ȳ��`��x<y塜_�\��He��@[��B�l^Y�n�ۂv�c�� ��r=���KmA#�	W.���'���@�w{]_ A�z��xd�����Fr�R����l��
���ko���ǟ޼uz����s����\{嵡��D:�%���7�� ���ND�U����d4���U��Vh[�s���*�J�a.V:#S�1pU౫��ٞŨ4�jũ�8�}�C#�cg�����oyrw]��
[����U�Ն�ɰ�+��ֱ+7oӊ����5#w��!�F													�:�g�e���=�w߾�{�<������W�-^\��
+�b�_^�"���K8��],a-krj����EX���}~�Fcs�!�`�wv)5������V�jiijimS(�;;;{zTZ���GZ�.�ln�{��.��hd=��F�פ��yū���{hau� �W�8�U�b�e`;�W<�Eث��d�*B�+9j孭�!�SU�$N���£���,�f'#��#/7��R+�ֹ�F��m�yVv�]6�٭4Cw&�0v��2Zȳ��n���Z�%�V����'�m`��m+���c?�x2�/�|tW#�bo<��c�h�P���K����G�ܸy떄��}��{|�>W�T�B�
+�V�h<�i�0��B8>2
+HvZIr��gE�@X��dϖL�0@���sUS��9�ϪP���x(�D��-�
��MfsG��x��gw��ۺmA�!p��Ư!�	o�~�Zv�u7nڲu��]�أ�?x�]��)l+!!!!!!!!!!!!!��Ըo[���O���[XZ��+�K�,w���/����H��E�E8;���陉�i���̍���'�z�Y�� ������V�����Ek{;�W�ͧ�[�ZZZ��]]]===��`0�-�r�]��v�h� T�؉s�eKv�F��y(�+2||hCn�S���T�I�q)�U�C�
+2W�钀��Y���Ʈ�f[U��!�9���?�tI3e�%Q�Э�s%� X9+��A����mN��"�
+�a%A��Y��� ī�FzVF��h�Ͳm��I-��P	�{�~�	��qz�o*��2�ro������Y�[�����t6���t�0~�ܥ�/���G�~~����}���{���������Q���h �d�`��z �W�h<+2�b@������T&�̀a�0+�ʞ�V��),	B�*W`�w\E�
+�*+�bo���x�ohD��~���Ӯݻ�nۆ&ժ����:�'�f�����Վ�;�n����G���ĺ={ğ#!!!!!!!!!!!!!����3ϰ���kػ�����C���.]Y\^Y����U��"XX���׶1�,��9`�s�4F��]^�J��:���T���j�^����V�?������.vtvv)�*�V�7!e���
�+��W!���/aɿ������o��!e�d�H�"�=��+p�|�X�,„�v�[1��8����Ճ#4@P2��d[I�gXU#X>����	:���S�Z�� �w~^�esy`���+Ǯ����X;���t�;�v�	�:db%�ț2`=ЀΕ�`f;��\� m�-������=�7i1�k9�N�Ϗ=�B��ptdd|d���șJ�P&[��3�!�S��#����;�]��s��(m���;����5�W ��)d���|�H#���z`2K�� �'�F��	�WQUP�[����4L�v�!X��`�X��U���8W�����1_0����466�0�U%A9m%;W�Z�~�V�v�ܵm����z�k���(�														�O�w���`;~bz~��ʥ�ep����la-�},,���bk
+Y�daMRkvv��D"�6��Z�!
+ڝ�v��G��Qk��ͭ�M��-mmlo��Ptuu+�J�Fg0-��f������������ge�e��|&��I=<�嬱�\��<�6Tm
+�*�q	���x���Q����+cW�*�Um�σ�*�3W>���($Ɓ]�`չ�Tv>IZ�����c�� �$HS�ht#!�9��~0C���-, �[l��Y�!gţVue��6\!W^?�"������8\��Ē�\��7=�����3}��R%�L�q�`�\��[x�ͷ>���V��u�>;��u�ɉ&���0�P4���DbO�x�
+v^�T�M�
+���;��d��VY�!H<�T6�� �*�c�9�YAO���!jEUA	o�/U�k.�z�����S���|�G{�<��m�
�����պu�֮]��m��]�wﮫ۶}g}}ƾk�.��GHHHHHHHHHHHHH�������644Գ���78t���%)��T�%��b
+�"������55�,���O�k��{+�n�`i.W0Rk����N�գl��h�Y�������+�^o4�m��嶳�v;=^��|� @��ұÙYUS�+�W>��WkvQ
+K"��|��)U�Y�KX�skK�
�B_3��
+�UB�T$��㯆�Ъ"��4I���+��`v��묙*h���AhJ%Aڡ!��++���du�lvB��J�KΕ� W��h��,�\Y.����'���4C����#�T:W��ô�x��H��/��C�@0����Ϟ�z�?A*���b�O>��|�j���^���xL��iAI0��a�&9+2��)�¶`4�N�r�t��	��46!j�O����(v�͗p�`���B*{o��^,�K��_������֯��ؚ5�$m�Ab�s�j=U׭[�e���uul�_4���o<��o �a���[��x�������
+���W����DBb�J���o�}jfjvn��D2�5��:�1	;\ΎN�J��Q�[�v��M�h��hik��`O�J���?h��mN���qy��_�X�{�V����>����O%�Zջ����-/�9�"�ʀ0��&�%�&��x%Ŵ���PM
+�wC5��`-ۊ篤ق��Œ�_B�����ۊ�7�}ɝ�$;�_ITvt�.>XP���mN��I
A���
+l+��R�Jg0L����A���F?�z�0O��}����CL*�.�*}Ã#c�#g�FK���L>K������������э/nߺs���7oݹ��篿����Y�?��){��	fE��P$!��9�
+�	��	�`� w�2�LLI�@�K;�q�`a�X��TYJ[�ʎ=�r%_#+�H�ݏ�k�n��X�n�/	\����XA\�}���
{�_�Wl����7oj���������������?껿������ƽ
��Ccc�W.Q�P^���yh�8�s���Z�Z�r��̹�Y�`���!�Vkw:��"�T�
=*����]�hiooS(�߮����b���v��n�υ�A$�{�ł8毼6�ª�cy��G�[67����6�4�,,@�ia��E��ļ���a����+9|El+v�'犻XRa� 8�
+1�no�*_��^��sEQ+��\�6VF��$<�*��&�Vܹ�e�
A�mExv#��<A��!�<���n���py����J����������X�(W(��P8�%K��ٹ���|�S�[ݿ{�[��ܻ��ͷ��`fn1�̰�������b�P$�i�d4��P[z��8����h� ;$ѹJfxIzV�r�\a�z�9�d�
�\�
AX}�b/�,�ji��ַ�ž�>�(�܈mAy����m���7�E0���[w��=�����j߾}�o����������������y�I�<x����/.�_��,ba��U��Z8�<��[��¢��"����������d2�5�-Z�>���vEG�Z��j]]����R`��G�����r��<�s��n��+9WnYX<�����e��dž5C��0��0s�Ӎ��D�G���D�7��	���s�/;W�Z���sV��[";9WNo�
+i�����v	Ǝ�'���.R�<�Ɏ
A^�9�f��FJ
A;�����2����z�Y'�WH��Pڊ���i� �5�"=��b��,�
�����{��L�~�|���k������nݹG�՝�_~zl����ʕA��7�&�I�� Ů�	�Ya�
+�+�F�-����S�H��gB�*���9�������,6����T�r�X�n ������L��^�Vo����M�Z�~��Y=4U�l+,�'��=d�]O:T����U�����������������?��?bk���3�\A
+ke��׃X�y
+k�	�f`��"��)�S����� ��.W(Q���R��]J������S�����]���f���<>���w����
+�)�t�NSnyy冂!�XV�����6�0��"X��r�Um��p��$�*E�
+!�8^�-��5�����"�iI�._�<AX�f���e�
+ �.��C�
+�U�Z�a YX���n ��-6�VF��d�I`+���Qb����<�9���!_ ���������y��B��z��c}ÅR%��Fa`"�͏��Y�|��?�y�����}��o޺���^}���3�p���O ��U���at��1��� ƫЧJB�
+3W�2���J�TA`[es�t&�+V�B�*����9�xVYBZ{��J�w��?��S03Yl?������
+<�h��^
\���z&�ZX�>[�o�۳���_�_��ڕ����������������Z}��~��O>\�ظm�����?-_�rq�ʅ��V.]���e�;�#��AXK�`a-N�/"ȝ������&&S�<"�냑�������T���Ruvw�yխT��Z��`2�m�t�]n��-�`�Ν+p�\��(�`�<l��;W�lq��v�����n�g�Y~��'O�
+��~������`-�][���� �Y!��O#�ij�T+��(p�Q+��ʶ"�
+� �!�=A�K9+�B���a�yE%A�ɊVxVZ�Ik0�fn^�,0R�l����w�z�!o �Tv?��\n����S���F�ж*�+��b�%ӹ������o���g7oݹ���/����g��}����_~���مd&�p���@xV�P��Wa>O0Of(vnU<'�*�����cG��2W<y����Z���ɞ/f�1���*p�*_�����gf?�������;�7l`����������HA
+\aS�]���͛w��}����o����ş!!!!!!!!!!!!!��
:z��=�
���mݶmd���KU���
+e��,,`��}����}zYX`a� �}�op(X����"z����]��*��.��+��G�Ri4Z��l�Xl6ο�@���Dq�ؕ��O[f\'���0���r•&��ds��N�͎�A�r��Nm>������ڞ�jH{
�&v�
+	�NmA'�/$*;��$�V^Zv��hA������8�Z�$A���ȿ��d3bI�->:��fr��*H�u	)�������a�\��rz�n����"�T&_*������{�3�B$
+p�X<]��O��z������������{��}��ko�.,��������PG
+�
+�V�������K}W�X*�H�l�'� d�D��VR[P��Ѱ*b�
+W�����V0C���7804R,W�.ϩ������7��c�=V�||5�j�4L]+�۶m������Wf�޽���������������6}����~���=

;w������˯J�U5�u^M�q�dd]�_�.���y��/�8¹��鹉�����3�S�\�l�!+�;{��Wj4]J�R�Vk����`�X�6���B~����y�~'F��.2����̖�i�;ȶ/�נs�4�s��j7Zm�lv�(�`������
+���yYU������� <��� �$�����<p�F�ZgH��A�_	��D��q� v����aE�N�u��Ue0BI��P4���Vi�&H[��e&ȕ<O���{�A_ �����vBW��py�^ M���b��h`h����@6_�Ł���B������k/}��'_ܹ{m�/����;��z罅����c�D��/o �B�D0�Uۂ�
ĕ�%��8�-�HK�U6�ʐg��d��Y�S�ж�1��
D�U&G�@	�N�+v(���`��T�=�
[�:�����7�~������MN�"�j����{��ׯ]�62�6n޲�nϞ�_��7���khllܷo���}�C+W�]D��"w�0�D�K�b�8,,��_�0�E��yJa-L��N��O�-�
�Ca�Nks:�����nStt)�Z�Q������V��j�:�_��v���t�<���������v���C�e���V� me�ٌ�\�y��X
f�-,3��<da��$�����ž`
��G��]/[I����I��VaԊ�/G�ۊ	҅�G���@Rq�Uu��M&�Ӂ�)p�&v��M:�I�3�$<;D��6�Ձ�⭤�����ǁ��@0O�s�%��F�`�`o<�	���K��/]y��nܼu�����~��Ï�_�x�ݚ�}�{��0C�d[�A0�ЪB�U����8�����U*�K����A�Jnʱ�,�W����U��W�b{�\��73~6�-�(5�7?��o}g��֬]+E�6�6���Z�u�6n�����[�l��ظ*a�s�N�WBHHHHHHHHHHHHH��P�B
+��#G�44���������Z�te��U���e����PB�����#��[87;79=;��8>q.�/�mv�N�ES��llioS�tj�A�ժ0|�3�f��aw��N���ry|�����9]f��b��h��vySHX�n��5��f����df�O+� �%G���G�?��
+�,p������րۇH+����
+�VHb�cCЉ������H�%$;-h�´�4�1meq�m%����A���J�3�U%\Lz��l���v�	�<n_�{����������F��t�P����.�+�T6�A+�c��7�z������}y���ȹ�y��՗^?{.W(�cI�!F�g��l+�	��V�ɳ��S�`���t&�i+�������4���\�a�/�a��_�y�h^Э��0A�J����3}�#���~���󻿷w߾G}��5k�Cp�ׇ	r�j�:\m����V�m���<���䯆\														����`hػ����=�J��՗��Z�R�%�%�WK/-R�qX�s�)��`�����]��[�	F�j��j�er�X<���ݪ�P���^�հ��&����vC���!#��pX!|e7�ge֛��Eo6�=eљ-:���V�ɬ1��F��hb�Ѩ6�F���j7a�PNa9<| ���K��P��G,(-LX��ay�vH��B=���+��m�v�R�ʌl+�[AՑ�V@Y��
+wp��>CP�7�2j�<pw3YL�������^*���{a/��;��z�[�c��V��.���2�H$����d�o`v~������g_ܾ�x�� pu��[�fr:_�'3�P���g6{4AvX�$����&	�SY�$�a�a�T+�ʥs�$H+0��>F����H[!��l{+�J�����{��ǎ������Olܴ�5k����
�m%{VU��ֱ;o޲u˖�;v�|��!�����(� 													�{�7�~���<�lݞ=���������`^]��J
ԝ�.-"ѝ�XK|"���y�r�]����[X:;5�/�]^�Z�
���r����+:�eP��j��`2���_ٝD��\^�ܭv�cW�EgWJ�Ie0jО�p�ʤ����`P�J�A�3�خ7j��-6�9Q
+�B6�EB��`��?D#%����<gE!.���`D�\��Zd��r�c��rYlN+����+��d��B���԰w�3��{#z��`B0��=A���q���!�7�p�l��}�[��ro���G˕�l��%��1W(O�����|���[w��@`v��߸9;�T(��S�P4�C�ue�g[%���=�x*!�
dcĶ�$v�g)g�nU��E���İɳ���l�ۊ],C઀�U��[������V��_�����;v�\O����
��+�ڵ�K�e��m�A��������������������~U428ظo_Cc#[�L��K��\��[�P'����	��/q�;L$�0�x],�bkznavaid�L"�5�L&�9��JE�������ӣ6�z�Π�[-V���t8�.'�����f3Y�z�I>�A���h�J;�C���a�
J�^�{7`��}t�jM�F��6��&�-,Ghu�m�;AK��B�0Hc��mE<v�l���
+0���Mn�7�V`
� W��#�ɳr�q��h�J��Į�2 8Wz�
+
+=R١'�G���*hb?#�����}�?�
����^��:\���Eb�L�P�������X"F�H2�;�|���t��;���'���޿z���0���X��X���V������B��	&�$�\W�d*K$v��C�LK��'f��^&*;f�`{�
+�*U��FGϜ����o~x��C;v�ڴy3�V�f�x�
���֭_��+v��;v�o�s��k?��"s%$$$$$$$$$$$$$��^�F
+�s��f]}}㾽�����{˗��BKJa]� �W2��X�"������xnv~a�������h8���ހ��_)�KF�����[�ҙL:�Qo4�&��f�Y].��\N����1�
+�����R��5�.��[��V����N��K���J-�U�N��n��ht*�Ac0�(�e���0��J.����"(�Sx@�:�ܰ�%Ap�Ч"���@����
+YA�
+l+��-�YA�ʎl+Ne�����F��hE��Y��n�Z�v��W�[���n��<A����
+i]�ග��E=�P$���
+�J��p�o`�X�K�s�P��F�Iv
�5���{���sON[ݽ����>�8K�C�x(�`{8�����@�at GZɶ�Lfc�4Ůp��¢��W�l.�/�9تH
�,[�R��
A�!X���$ϊ�bo���Δ+G��x�駷�عy�r���+�*��	�y�@�Z��ƍ[�m�]W��=����|�j[��+��BBBBBBBBBBBBBB�Z��/~Ѹoߞ��ƒ�k���r����+�����u��X�.a�¢���ź,,����.LͲ+V&�g�}N�Wg4��鑱�B1��j�ZZz4�Ѩ1�F��d��B��fwح6��b1���V�^߭Vw�[��V*�{==t��QvtÙ��"\ߥR�htJ��L�rG���Ų�=V,�b������b��
+@v|>�-���`�&��NH+>-�|� ����`�P�
+2W�
+��Jk�bKg0���n���	#�`؅.Y�t;]�eO$��|�\۪20\,�e2�H,����h��;5����o]���[w��}�ս?���է7n��N:S�#��
+�����T8`�H<M���4�	ƞE*;�4�iE+�%�U>��c�
+V�c'�U^��ʵ���>Z�޾R��hd�̄J�����ɖ-[7n�Tc����'��պu�� k˖-;w�bk���xB������رC|߅�������������~��[����O���Ӱw�|�{o���
+�WWW�P
+�V�E,,u�ȇb�����g�����_`׏����
+f�R�}�g'���T���tkK�J�E�Jg0�Fba�����dbW�4�n���G������٦�j�d��sg������.���gE��S��VkUz��hқ�z��l&�
('9QV���+�Vܼ�;�M��r�Ȱ��0��
++݄Q+��l�&	b
��8II�H�2����H^���{�f��jw��<��7v���J�f��C�h"�/�+�������re �+��)0��S��ؙ�+/���ǟ�������{�������ʀ?Ȟ9�&��8[�x*��A�ZŁj�S�*C�Z�*'0{�Vh^�2@b��U&�!0{6/�i� e�r�^^��P����Y���7882�^̏��';w�Z�2T����Z�Z��qӦ;w�74�رcwݞZ{CC���													�J�g�e��߷?լ��K���r"X��b-_�"�d��ʥ���KH������:?��85,v�م����d&k�X|�������D"��Vv�nn�R����`������Y,��b� K�T��������l��l�P��w4��7�w�s3��P�):١��ٮ���|-EOO�JM),`a9�'�цY,��0Uewb�
+
+��V�U���C0R�7Y����U1�f��<D��n3���E�Ɣ��Vz�Zg�ΕΨ�!|�7A��l5Y�as��ހ��!��.���h[���P8��
+�J_�P��po�`�ԛHf���?��S���/�����ߺ}��*	޹����~����s3�x���RI�	&�y���%�$��XLe(pE�@jr���W4R0�G�*W�P�*HvL[�g�[�1��r�Y!mՏ���[��W��SO=��ck׭���jW�?����6l���h
+													��ַ�����z���~OCß�韾�ƛ��rU*��T$�|�:���ѿ��ELa��]X��_X8�=|jv�h$O-�x2qn����t*����:�ܤ�Q���^����Z-e�TZ-��T*Eww�B������v���T[-M���r��������V0��}��jWP4KEBM�V��a"!��h����8��Uvɳ�����ڡx�&���)���U:�%B��+�B��D9+��5 �k�F�Π��$H#���+x~����C�@��:�����v�}�`$O��������J�P�ԗLg��8e�������ko����/d��ޗ_}q��'�}~~�r�Pv���`8c��(��q>I��Y��@vQ�'H�UrV@�ʳ%e�
+�J����|rV`[�h� �,��=�r�
+eH^��*W�"{���e�V�9\�a��V�W�_�C*�z��ց�oڴy��]�
��w�_g!!!!!!!!!!!!!����S_�w߾�uuO=�t ~���ekE��._�%�c�P��V����š�_�r�=jzn�x�Y��R�4�077?�J']����]�*�Ne0��5j�V�VC�J�Ttu�+ͭmM-���[N55�<}����'O7�d�&\ͧ�[�5�h���nimjmo��hS@�����K��Qk{�:�ޠ2�d:a\J��S��BS�-���M*�\x�I�7�tF�	���ҙ�h^�meR��j���d[a"��q��{�a�?��n/��n����ƒ�l���W������l!O�Q�2�����+/������ܻ��s�q����>�����F��:�Y�yT�07����UB&\eɹJJ0v�
+R%�B70_�R�
+l+b[3�*�*��+�[�g%O,����`g�eo�'���O:�>{��Y�POp}�<A\�_�����w���SO���������������Я������#u{��������_���ꥫ�j-�e��.R�p�2�¹/]�	��B������{*��f�+�N�����
�/]X\\�K�]=]���Z��{4Z�ޠ��{T�����ή�������M-'��N�>}���c'O?y�8����N���X��!�%YX�@tW��5���Z=�FHF�L:xS#���P�k�����֛T:�R�����ѩ �eP�7�*�A�M-�
+�Vp�Ơ�k(�e0[LV����?��.o����@C����=�L���booe��Ro._�%��P��D*38<�~����w�m���ٺs���}��;�M���Si���E���pT�\�S�d W	^�*�K��q\���`�{V)����Э*�3�ʑ[U��V%B��sE
�ށ���!��`$�����~�Ge����7Tm+RMIp=V$v޴y�Ν;�8tH����Չo��������������Я��}�9�7���={���3n���E��AXX'���,$�_^�_A-���K��O�/,������˗����+����^o 04<��ra��B��Uk�'N�:�Ң�Q�h�=jm�J
`v�����Ts3����S�N�8z���c�^<v���?~��'��E��N���Vө��ӭ�%lU(�:;a.a���GݥRwkؓk�:�RoP�BJ�v���p\�w�uJ-�=j]��=J�գf��գV��U�n��G���[UZ#w��z5f���\�<A��	:=r�*���./��{=�d&W(�z�Ѷ��ˉd&�B�h<��78�x�ͷ߽q���_=�ٿ>������g7n�z���/_*U�� {�p�R�*OG)���=�ž _	Z�,/�*�	WY"\�Y�Yex�
+F
+�gUe[��%A�!�/W�*����S�a�doNg0����_����I�j����Xm���ƍ�m��>������C¹���X�r��'�w����~�Õ+W/]{i�굕� Jx��ׇ.K ���>�tav@XW^z����`w;7;W��C8(>sf��K�+*�^�A����N�ttvk4J��K�Rtu�tt4���8u���`^���?}���/��±c�;v�؉��؉O�8ƽ�S'N�>y�4����[�rKѣTt+�3w�����n0�ЛR��u�5�q��Z��N���/eg�R�����Νݪ�\Ju�RӭԨ���MC���h�Yp�����mb���;�����./�I��l�X,��+l���T.�C�H4Q(�NNϾ����?����_~�sp�~��[w������42>�%�[Ţ�t8�9�x:���U�V	[�=��٪8�V�2�s�èU.S
Y�9��:�0FP��Ȱ*�b7����	���E��h�8OL���O�~�Y����񍫇	�*	�s����oٺuw]��#G��]���THHHHHHHHHHHHH��V�����~����쪫{��p{�����X�敄ú�re�&^Zma-�,a�:�pq����|��W�X�|uf~���������ى�KWV._^4[ͧ�N�p���斶�.2��=m�Sͭ�O�>z��O_8���?��������/��u���/��c/;~����'N;y�ĩS')���z������&�wv�FVWOGw�R�eu����\�::�ۻ�����좢�-v�k:�I:��]=��F��+�����4O�jw�]�/��ayDeG��8�H<����r��[�R%�-���`(�IJ�����K�����Ƿ������������ރ�}���W��<95���>\aI�2W4Fx�8=0>vq� �3T�CV�$��s$;���ϊ�y\�_���C=+�
+�CO�o`xht<W,͖現���Ǜ6mb��5k����T�U��:4��\֎�;���/8��7THHHHHHHHHHHHHHH����44l۱�o��GK�/����ի�º
+벴.]Y��	%�;�.�_^YZ&�E�b!�}fa��������[���<�x>_���|�Xttl��e�L+c�#���Sq�ر^|���
�R*Mg��������TS�'!y�����O����g�O_x�_^x���Ǟ�v!�XǢ VSө�f���5��h���
+;:[;��զ�"k�
�p�w�˫���
+�q�DzG):;]�����n�F�ѩ��\���n�:�.��!Ne�����pAO����	�'X�(��2�R,�
+���p,��
��-]\y���?����?{���ٿ��z㋗^y}rz�\ENo �c70����b�`�SI��V#��b1�#���K�mm�Bg"����2�V�c/����N
A���*#ã��c6�����񃿄��o��#�>�KG
+��Vkɷ�:�-[���������g��"}�[�b��#G���-_ ��o�
+�C-B)�u���H�q�Kr��Xi"���⥫/�������_�[<_�����P$<4<x���+WV�MM&R	�N{����}���ӭ�0CP��.V{�����o�������v&!@B�N38�=��q�I�N2)�I�r&��q�q��
�fc0��*T轣��h���Wlܒ�y����Ykכֿ�s��L;��}_�׵��VA[��s}ː�7��뮿������_7���n���t-�
7���z�+l0�-�Q8|xh-~�m��34\�v��I�at=34�ht
'z��5��9"_��0a�ֽc����'��8%Le�:}괙��5}��$�����������fϝ�`ɒeUU�uյa߲��3����]�hiݚu���ĩG_x�7�z�3�y���Ͼ��[ѓ�oo��
/�ᙳ���Y���T���$�U(�Z��._�x��%��*�I�ji*�ʔZ�j�Tf���
+;�y�U����
+�Hb��檪fUu���k׬ߴq˶��~�]?�я?���w��=�+���%DR��*ά�n�n��]�t�͉į鞗�ߣ��W�����Ƃ��K����+���+��,(*���+��iO�U�X�3{	�v¸+�r?g�L#᾽
�G���gO�~�ȱͭ��l�8{�g׭�ml�oݿo��]+��&M�<d��k���ʫ�|�C�
O�����Α#o���n������x��o��B�U8!Ⱥ>:�^?8+�
+�!Ⱥe��a�{XS�l*��B�W�!���p��z����;�v����
+��	����Blu��	�'N�8��)NK��O�5g���=<��S}���1kμ��/]�bemu��L�*Le�=g^��G�-\Y�j���x�^�ϼ�nRpu潧�}���eͺ�K���=w��0+^&�0��N�Fp�x�Ղ�˓yVIZ�l\�ly�U0	���*\ťV˒�+j����[��:I��yV!�Z^�\ŭ�!���[�4֭Y�yێ�Uk�}����?~�/��*�N�;w�Zu햞m�\�&W�srB�U^^�=�
+JJ˾�g����+�����o|�K_���^zi�~��KK���?wނc'N�?t�-I��^�T���%lMf��a��$�jm�a�64�4ij��6�;~����<w��'��ʮ#��n��pьY���X�i����=�v�[U;���#F�=��/��+����n�e���w�U�YU#�ֿaA�a7�r덷��x�1I����8º���n�!N��tӍ7Ǜ
+���a�a�n�{O�
+���a��1<����¼�1��;f�0����&?0q���N{pڌ��5mƬ��9u���>���B�ՃӧϘ=g��EK�/_QS]���f����������1k��G�-[�r���?������ƛ�y�������ξ����Y�~���+�-X<s��9�>�����j���Ip�a�`�V�
+�p�&�E�>������api��jI<�=�X��m�k�W�ų�k�:���*�Ǟ:�u!�Z�i��-ۣ�?��/_�����.���uꔛ�53�*7�$���tM�V�ü�����=z��9���3xeb+�����PE�>eE��_y՞�ƃG��9'�:������㰒Y�M�,��}a�{þֆ�}aaCS<�驧�{ቧ�9���G��ؾ{˧Ϙ1g����6o۾u�����q���u萫����]v��_u�5��p�Æ�sĝ#G�r��G�1b��0��Ρ���!Æ�:��[�z�!7
zː�7���8�aCB#��!Æ
>���s0N��w���7���ƌ��O;a����L������x���g>4}fX#8��)���IS�8�)<�дPo�`ᒥ�WV��[Y����vɲ���͘�H������۰9��<��S/���o�>�w�{���ξ�ΙS�>�y��s.Z6�����Vq���Fp��x�`jo���K3������X ��Y�<u���N�Ǜカd��ʚe�W�XY��YUլ���~��Mo]W��]S�jmͪ�k7lں}��e+n�e�W����>}zt���Wu�=�=�L07T[E�7
+v��=�G�¢����0+�>A������_~=4s}��_��ӧ�����lђe��N�e�`�/�a�*��8��*���ER�tV}S�ކ����x���_z9I�N�~���u��
��[0}��y�׮�]�fuuM���&L�t�]w]s���]q�?_���_���.������[n:����~�]w���6�݂wFτ/9*��ݣF��G�3z��1���;r�}�ǎGU����TX�?iʄ)��j҃S'O�6e����x`��<��S�N�}hʃ��M��L}h��Ys��_�d銪��aBTuݲ���Y��N�֮^[ߴ�ԣ����+�z��w�='Wa���/��ko��d�U�LpQ�!8Qtͬ;�ʫ0�=�Wqc`�CpE�&��R���Y��!���	�j�	Wq{`��V��WW�$���D�5ukjW�۰y뺍��O�����NyEEQ�^]�uC�CX��R0k�`n�'عst�ߣ�g�^��={��UpUn� ����oV٧Oy(�*�⪫�4��T�ա�iK�g�rO�Wq	Vtm��r�OCjVs����g�{��W�{ᥧ�}��>r�Ď�{��X9c֬�3��`��%�/Y�ȼ�S�2rԨ���z�5W�◿�����_�����+��2Td�pӐ!C�
:�����w�AUcF��wԘ���7v�����?z���S=��M�4v���'��8y��)&?0aJ8�:����3e��f�S'Ny0z��ы�8��I�'L�������N�>3�V��-_Q���.�V+�.^�gΞ9���+kv��s���g_x��7�z;[��Ι�����o�n��ُ̟�p�����>��@0l�q`ߤˮ�,_�d��tr�,\���"Ug϶�����J�0�*�_ų��j�x�U��je]�'X��^�a��m��O?�YEeeaaa���$��Tf�5[%'.���޽{aQQqqq�������e���?*�s����F�|�����k�-��(-+�ٳgUu����m�ت-a���+��:Բ�@R�"����[�R����UX��{���o{���^z��^z��_~�{�����n�8w���ӧOy��iӧ͘5��O�2i��{��6��_qՕ������~�e?����/~��+����2���p��7�<��[�
��;���G�u�c�
A���c����	��?1��&��8i܄��&N?i������'�7n½cǏ�o����G����/�%w��I�C���3����K�/_V���&:���yg̜���9/ݸyہ��O?����z�0�*dVo�y��w�=��S���=o�ܤ�j�ҹq�Ղ�q�U�I0y��DZU2�}��'�$Ω/[�o�W-[^�l�K��a�k<�}e�^Oe_Y�jEMa��[�ԅ��Ԯ^�����Y��֡�.���~��`�n��V���Y�U��Νs���E��KJJK
+�����F��.�����W߾}�++�z���W�7�;x�h:�:�n'<������+���[4g���,����8�������}���~��k�����/���Ͽx��齍ͫ׭��`���S'L�4i�q��}�#F�}��a�o��k����+.����/�������_�ϗ]?y��W^y�5�\s�u��F��p��7
r�m�nN<�����1�����;G�1����GEg��{B�uϘQcƎ�w�cǏ�҄�S�L�6}�̙��Ν�h�0)=�K��̝�p��y3B)֢U��E��ǟ|����x��w�>�3���{o���/���.Y>sμG�/J����.�w����:��iU�I04��qHU�d���a�YU%�ղ��*�*��+�'�Vf��큵�R�x*{h�[�n����7m�<e������///�#��n�n��V��ܸުK�����ťqW`iY��e������%����?���s�**��_PP�z���Gj�+���k�ҍ���ǹ�OJ�B����
+��es<�q���d�{c�������g�{��7^�՛������W_N>�x��Uk��ydޔw��{ƌ1�������n����o��뮻�ګ��暐Y]u��W�v«���ʫ���LN��k�����'K	oHo!�e��x����	q֝w�9��w��;N�F�;f����'��0i�)L�6��3f͙9{�#��6��s�Ϙ���3gGg���˫jv��{�ԣ/��ڛo��λ�T�3����������j��̘=w֜����]�8��
+�����O�F�ęX�$�h��K�M�!Š�0�j�򕋗���K��9W��&��$M�5�ÐYU�T�����T����Bc`�Fpe*�Z��\�^�a��˯�����S�ι�A�{&��zn�U�O0''�sNN������%%�������������	���0Ƚ_�~啕={��������v��ࡰ��@|m���ZM���0N�����9=�=ί��M�8��]���>��+����7�z��p~�����/�r���ꛚ׬߰p�Ӧ�7~�ݣF
�㎡Æ�r뭃o�����s͵�^s�u�\}t���W_{�u�G����5�o�ip[�|�[�2t�mÆ~�����λ�q��#Cl5j��c��������'��쓦<��CӧM�9��Y�5���5�\P][�c��#�N<���!�:6	�{��[���O?�m��G�/xh��x����<���jaz{8qx�0�'�W�R�ؗ%��y��	Wa�`Uuj�`UuX#«�_�kkWԬ�oB�U^�U�&#����}�uk�E���+��F���K��)�Xe'W�>���*��0�=7�G���%Yì�V���������J���+*���^�>��j?p�HR��X���P�,���0��0��J�6��onMR�ֆ�t�ռ}מ�c'_~��_����o���;g�~7:���;/��ړ�<w�؉�{jV��=wޤ3n�]#G
6�֡Cn���o����O0\�Ҫ�o���[nrːpn�C�ۆ6���w�u�]w�u�ȸ��Q���g�}c������?���&N�0i��IS&M�2假�<8u�ԇB���̙�Y�hɪ5��44;u���^�~�wμw���g����w�{��7�y�����K��|h��Ys��[&Y���q�UR�gq\m��#�
+VK3kӳ���졪��::�WT'#���V5˫j��*	���V�u!���Y��]�oU�vCu���s�:���O
+
+��8�K�OU[����o�tv	}�={������������˗^]���_V^޳w���h=p����T��.��^G�v�,��������ڗDX�m�Y�qXa�{��޴o��ы�{��7�z;�v&G�y���}���q����Ǟ�^�m��Uk�-\����g��8i���w�u��;�m��!��v�С�]��!Co�c�ۇ�~Gt���y׈#G%g��1�B��}c�7��c��?.T^M�0q���Lz`�>4��Y���]�tY���v슾��Ǟx���~��3��:�}�����������6̜3w��9a�`��*�Y�`��8Ȋ����0�jq�7pE2�*�=0�J汇
+��l�d{Um2�j���x�`j���������5��db�Uk7D��KWL�9�ƛnp���m��y�F��y��*]p�=�QPPZV6pP�`+����?�������[��uk��[��*}${(֧ƹ'%X�R%X���ut:"��P�Uߴow}㮽
'}��W_��{g�;�����ó|]�y��7�z��W_{��珝:��ڶeێ���K�-�=o�ԇ�O�4�����s��{���{�j�]w�=��#F�s��Q#G�9�Q���3��{�w��c�M?ab􉓧$�gϙ7�eU5u�6lڵ�!��=��S/���o���{gߏ���~����|���_|�ԣ�oߵg����=w���!zCl
+���e˳J�R��I3��e�I�큩I�U5�5�Uՙ�*���5u+kWU�k<�*�֬ZS�zm��k�mX�~Ӓ�U3f?���W��ԩ�g�W�R+�ʫ��:f��v͉�X��yyE�z���7�O�R�����G㋗|)�8������%%����=�$WY�XY㰎�a�"�x���e��t#a[�����1ί�k�ަ���F�x���x�������?��?��?��?������7�z�ŗ_}���O=���ǚZ�v�޻n����k�jj���Z�x�y�g�~dƜGf̞nfϙ9g��ُ̙;��ŋ��X^U���v՚�7oݵ���u��N?��3Ͽ��ko��Ι�>���?N���&z�_>y����Y�v�칳�.X/
�Co`�j�'O�3��gi8I���x�U�\-]�2�J�	&�ؓSU�"�b��I�&�gU�*�Jo�Uf���I0�%D��Q���яR�'�O��W��qf�-k�`�m�<�֭{~AAIi�%_���CYY��#����?Ze��啕y=�WT�n?~��уG����у饄I/a���Pae�s?������oڿ�1������Z߸��i_CӾ0k�޶�G�|���^㽳!A:��G|��G��'���׿��7���׿���_��'|�љ�?x��3����^~�_z���{򩓧k?v�����ā[[<�+�i?v���GO?��O?���/������Ι3�=��G~��G�:9~�q�}Cb����_|�؉S�O�z݆����zd޼�K.	�Tjo`r���S����8�Z�"�Ǟ>+SeWU�邫��*�\%�VU5�Ԫ�63�*�Lpmf�`]�3mڲq˶��s�}��⪋����뒛
+���\��	vK������[^~~����t��b+������7����:pРҲ����o�?����R���Ta��R�X�6J
rߟ^G�:qVS�%��K�����W!�jnٵ�a������S����|����DX���o�/���������˯������o��$��ٸ�/4�}���/����MUs����K������V�7�(z����O<�l��{��oܲh��9s�/X�tI���xYV6����b�t�`�Ϊ*�s������"�e+k�u��ت*i�OU�$X�je|��ju2�*I��nܼyێ�5�Ǝ�p������o�((�޲N�;wdV];F��������$�{�nyy���Q����_����OEiyyyEEaϞK��h?v������:]C��ɯ����P���*�x)as<+5+�K]���v�8�ڹ�a��ͭmG��|��g^��g?��O~��L�Y!��mr�gt����K|���~�����_��_>IgV򛤲�Ï��G��w���_z�؉���ݶc��u����;o���K�r��d�z�0�Wɢ�8�Z�,�P��t���H���̪*]d:k�y��̪&�$��mU�άR�W�ԭ�
�U��Z�v��-��o�:}Ƭn�����>}����Ϟw^��x�H��ݲ���F�P�����ߣG�����w��
+�����?5_��W���/��������k���N��*DXGIGX�2C��v�t-��Ùq��@2+Ta�B��P���J�B/aSkcSKc\����yocӮ�
�w��]����v�p�������}��q�P��O�D��$�Y��TmU8���T��'���O���_����O?�~�d�-��ܳn����KVT/X�li2��*TI��iEͲ��K��\��jI��j��$��,�_��"�x{2�}�ʚ���&���I�U���g�I�+kR5W�}UծN�	F�nͺu7oپ+z��ۆ�{�������&�z��*�J���v��͉[��ԪGaQQy�9��{�k������WV�WT����~dޱ�Br��p�gLM򫤩�-�b�?t(�Nx8���{	SK	�����GX�qXa5aSk}S(��R�����;��o߽gW}c}Ӿ��-m��8���O��ʫo����g?���S�Y�$9�o��~�����G�y��7�|��N�~,~߷��=�l[�as��U5�/�Z��zEu]<5�n�����d�8��S���Ir����㤫*�����&��V����/�<�'W��*5ުvU�d�I0dV�Uo��6ί�`���6o۱i뎱�O��O��_��޽�;u��9'';�J%W��I�V99ѓ�ܪ��GAAqI������ZVQQTT���������o|#�~��K�KK�++��կ�~�Lx�t:���:�WYK	wL�:�U��v(i$ܗ�Hظ/��Z�VcKCsk}�+�b�il��иcw�����ܳc���~�ަ��M;�4��۸��9�
+m��ؾ����[���z���%����vnڲ#�[�a�jV�]Y�:��N���Pq+_m��KJ�µ:d�ĵX�Ir�<��O�$5W���M��
+�U��VD߮fU�F0�[����$�U����u���6o۾k��G�]y�5^tQYEE���;ǑT�O0�p�-��*�'��ӥK�x�Ur��.�m-))�
����S^YYZ^ާ_��~��c֑�F¬��G��B����
+�pzVj"Vsz�{sz�{cR�������%���44�nh�S��c5��]�}W����nߵy��M[���jێ�i�
��mز}��m�6nY�a����֬_�vê��W�[_?�]��fU��7�����֮�]*����)��յ�J�$��
+7u�6���4�j����6Þ�Uɗ���Y%߫.|�d$���a0����v��=U����~�������¢�ɮ���*�U0�p�%\%EY��={�*,,,)-�߯_�M[����%��w�]������VT����K}��^e�Wq	V�&5+=�=5�={Vȯ�;�Z��+u�S�P�Uߴ��1�]�M{�v5��8�J����س}瞭;vo޾3i�۸u��m;6lٶaӶu��ߴm��-��oZ�!:�׬߰z݆�geY!G
+�U]��|ie�D*�W�YUWd��jemz]`�X]�2[�\��%^u�u�—�������jͺ�ԭY�H�l����~���)))+(,��-`OҪ욫��*T\�f�.]���z��ջW��}��ͼ�b+���࿉����~L�4�䣏������*�:x�=�&��q	V{���H*��Yq#a|ͬ&㰒���D��}�
ͭ��I!־��0b5���a����=�v�ھs�;7o߱q���l��m�7l^�i�M[�mش6am���uB~�6\k�d
+�� kMr�.���ouum��j�
��ڪ.Xō�!��g�
\����Y%������Y�۸i�e+V^~�U�́yy�Zu=7��Z)����9'�[��E={��ݻwqI��g޲�Y)����a����L<�wIIiy��.����G=���ʜsʱ�SC�R)���F¶Cqx�X����`k[������Z�d�%X
ͭ
M-����\߸/��]{�I"�8�ڻuǮ�l�w&�[w�ߴuݦ-6m�n�oؼ6�_�Z�!:�ׇ몸�fUj�Ta�ԭ
'g%uY!���U�6���T�V�	1�YU�a��*��V��������oڲz݆��sɗ/�ܹs����={${[u�^)�%���r{�#�KJK?c4�󙷬����-������w��ݲ��~�����
4�ޱ�N?�ġ�G?a���ee���R�d�{2+��jKb��Y��,k_�\�IGa�"Lo'��owCc&�
+�ծ��w�ݶc������ؽ%�KƶoO�a�߸e���Iar֮A֚u���Q���8*3+DO��%YVm�Ъ5�5dVq��\��Pf{�WqM8�ׅo�z��G�/���(/?��N�қ��Sp�1�*irrr����,)+���5yw�
PXX�����o�+���+_).-��7���#ǎ���|�
+�����P�� �ȁ�Y�3�v�XI#a��?5+��jiKz	��{���Z��ݍ�8��k{���l۱;�u���6o�j���:
+���[v���Wa�����0��J�o�'���&]~I`U�&X�M�O�Or���*I��֮�Y�&��T �.�V�x�u˫���~��AD�Ҥ��\u�]�W�s�D���|��3oJQQ��L��������>}�����?h��{F�z��?�_eY������饄�;�LV�&��Ƨ%�%��Z�M�����5	��Z�iܷ��)b�7�O��ڵ7:�v�N	7o۹uG(�ڸ5�nؼm����pӖp
)V<k}8k�o\�QmX�ncf�{Ƞ֭���%τªp����<�_�.��x�a��ck�V/��5��o};tb��g?e�C�������&/?�W��>ì*�����������XRZڳw��ַ[:r�D*�Jz	��Y��S	;:
+��J�bJ�bHM�jM/(LM�jM5&sݓ��
M-��^�=�ͻ�6�o��;����J
u߲c����AXa)��-ۣ��N_CG��-�q��Ukׯݰiu<+=�=I�%U뒪������Z�׬/�ئ��˖,�z�i?��_���+��u�ܹ[�U��O���U�Y���F*(,����w��]��/-+��������}/��0 L�*-x���p��'g�`u�dEX��ՄIVa8|$t��('u�Tae"��N��X-��Z�P��`��ܛ�4�b5�K	�	�����ٲ=��JOts��%M�a���P��a�u�h��6%)֚d4���k�����u�'3����଍I~}hݦ�k7nZ�l����o�e��_�������R�ٳ'\e�W!��c�.��a~������������_��^XZ^^XT��������S��c���Q�՞��03�=+�:�+��FcnM�X-q�	[$�	C�����ܚ�d#a��0�%�U��⥄q����%�X�C-��P��#5�=�X�2�Xɦ¤�04�EYa�{�ߘ<�6jmL�����7n޺i���Uk�1��;F|���)�'Su��ܭ۹�չ����]r�īna0{Ϟ�Y}����r�����?}��ߏ�\pA�xa����7�TXDx<+�:vN!Vr���`�\�d;a2ݽ-�'%X���uOF�� +n$lK5���-�!�
+�X{��4č�q��b�^�=�w�	�	�B�P�o'L"��+��j��h�d@V�]�1�bťYY�7mشeێ]�e���w�5�~���|&�p�5)�ʞ�~n�`NNNnnn���=z�..8h`�W]QQ��
����_m��WV��o�v��=�N�:�.�:|���L���K�=��pւ������C�	��\���9ԖTaH
uo��5�+N��P�$�jlji��	�B��
M��qX���=
;wׇ +^M�.�ꈰ�j°�p���q-�歙,+u6fn°�
��lݾs���˫��7��W\��/]r^���LN�.���r�6	�v�����S���z��ݧo���mqq�?0�����������_��WB	ViYt�O�x�����9�d��˱~/�JYaV{�\��aXPx�p[�\��v¶�-��r�dAak[cKf�{kcSKC��P��]������U(�
+�Xq֞�;�lۑZP�
+��v�훷�Lj�6�,k��M[�u�
�t���B��e����Mk7l�2���������fIi�g��3�u��53�=�^e:;�[���$]��="���_��W3��~�]������׿yEEAQя~���t^9z�HH��g�c=�]�un�u�p�+>�8�$�JfaE[���X!�j;����c�%VCsK8M-�M��8��I��'��w�ݾsώ0+�vOR�t�ʱ��M����p��,ܶcמ�����.�������>���.]>{�yaO`[u��=�b���M�[�vΉ^��=/�GAAtz��=��A�_c߾b+����g�D�o}�[}��--/�ջ�S��8�ؑT~u��>I�����B�P���*�jO"����XI-���[��k;�/�Q��k
{	�[�Մ�I;�x;ᮽ��ٹ�aǮ���,(L�
+���X��t��Z�e{������ܲn㖻��������\~��u��9�K�`����\�㭺t�ɉ>��ߣ���g�^}��t˭�_c�޽�-������;�yEeaϞ?�я���s���#GO�W'�ʫ��X��P��h*����~$;�:�uOR�x.����I����^��t���0��u����Մ{3�X�M{�v�s�S�sR��W�4�3�vm۹;��9������?hPqIIn׮!��?=�*n�\�����
+���z��٫׀�����i�������`��\EeeYyy���s�?y��؉�^o?v2n$L����53+5���M�I#aj�{{de�b�
+�Rޓ�X�v�ְ�0�b����qXq~���k��46�nh�]w&֞��S)֎d4��={�Oh=�j݆����.*-+�QP�9���&�?[��:w����(T[�UT|�������V�������
P^Yٳw��яv�m8z�T�\��*�����8�:����~<=�=k@֑x;a|JEX�qXYC���*����&UX�9�b���++�ڷ��)l'�o������5)��}��-��s��/]rI]�x��O0�-ؑ\u�'\u��ߣ�g�^�%%�z��׿c�`e�>Z�������'?In�**��ӥ�#�=~�ȱ�\�"�p2�XYV��Ž��Oo'<r�@2+N����I���v¸�e���0+���y��T��/�W
ͭI�&b54펇b�Z�������S�-X�?~��������2��3}���:���O0���g���e�����g~E�N�������ۯ_YEEo��w�64=��`���!�Jz	���̚�tx�{�U�����R�	�d�v?�_���
+'
+�Z�x5a��ZB��W�Մ�ihji�X-{��6�knm۴u�#F�?hPN�.ݺwϜ삫��*�sr�������KJK{��0 �������JyeeyE�y�;�[��H��*�`I
+��MG�U{V��n'<qn-���h���D+��u�P{<�h^��N�.�j��b����q~�?���^–TGaSK}C�y�꯾�l	�\��R0\S�U2�s� /?�g�^e�e����:~J������(��?�ct���/��,)+��׿޴o��㧎?y4.�jOGXI-V�ѓI�a:�JY��*�ee'WI;a|s0.���(��u?�b�S�䴴�z	��hn=а�uOc������⒒����ۭ{�[��h㭒��]�D*,,,--x���?�O�>������$����WV�שӼۏ�H���~,	��"�캬���S����J���Z��P����0�Nx$�b��?x8��
+턭;
+���?���i�m�����~5�Q?��ϞX��];�3��S���KJ.����?����;�����~�����/,��(-/�򥗶<��W��D��S�U�QxN-ֱ��h�t~�b�AX��Xɉ��'�у���S�x;a(�:r�H{t��m޺}��E������3��Kf�էg�DZU�U�K(��޳W��Yì��K�����������+*�+*;u�<��'N��H�2�UG�u<�H�<Lm-Lw�g�y������x���H��0TaN
u?�~,���n޺}��7�ts2V�������d�U׎e���*bu�ߣG�o4���?����_����?]��]/��?/+�(��������Cxu"a�de"�L��V�ǒ��#aL���h�d@VXJ�Ta%�t/�#ǒ�[{��WU��{�׿��Ϟw^�#u�������}�Il��w햗�߻�8{{`YY�7���࿒�>}�++s�u�>s։ӏ���L���e�&���YG㢬#����::
+�v�Ԁ��+�|�񃇏����o����ӟ���F?�y�:%��9�U�L�`��rr�t�������W���?���TVz7����+���~]/���d���.hO���a���g��̼���=�E�>���I��cO�~�ɵ�7N���UW_{џ�����>�5��n��>��ܜ��0�*�p^~���^����;�7�_V���������۷���������N?����+;�:y�'Z���Uj4։#G3݅'O=�ē�<���6s�#�\{�W���¢��v�2�n�Z)ح#�
+W9�3����{�>�O��7�1,�c����{����_�e�]]/���Ҳ��>}�~{�S%�U�ɜt��|�S�ՉS�T�u��O>���ǞX�b���o��w��/�~�y�B`���v�2��>�.]r;��D�y��=z�.-���?�����������o�~e���%%#G�~��gS9U�d7v\�\�DG�u��Ǟx��^ޱkϝw�����͠A������N��`�n��S�Cl�b���0T[�����
+�.��;������W\]�����WV8���ә��Xv��:�m��䣏=��G���>c��ぃ���+���7	v,�
Sٓ�Vq�Un~�={�.,*�]R2�Ž��A�y������ۯ_a
�����y�X:�:v����D+;�
+:u����~�g�o�|�W4����k�nIl����J�sr�t��^PXXԳg�޽���7����O���ˣ����ߔUT��WċO?�h�\�tf���z��'�}�P��{F���/�E�^���{��ݺ}j�`v�Un��ҹs�^PPسW���򢞽
�\��=�}����S�
PZVַ�[����s/K_e��Blu�ԣ�=��O?;k�#?��O�w���V�^l��2��9]����(.)).)��W^Q9�;3?��������A���?���**�KK/��▶C'O?�.�z����'N?�ؓO���p�M7���v���T�UG�`n�O0蜓��g�^�%��~aϞ�}:���z�����߻��[���A�J�����mÆ?��I~u��c���0yʠ�}�S��]�-�]�}:��Ԅ��8��nz����.�����_�w���w�������%%_��Ɩ���'WT���'ߵk�?�̟��Vq�U�>��隫����A����^�������g����ߦ���O���_��_�˿�袋�';u�Br�V
+&㭒���aaQQyE��!�e�S,��������%��WT�UT��2�d�էZ�k(�J�g����0 ��]x�~������������.���{w��-;����rss��t�J��ҫ����}����?�|��iW������뢋/.��L��*�kn�ܜx${��v힗WRR2�2�د�=������\�����^�����Ź魂�D��Q�=/�wqI��}3����ׯ�	W��������/.)+���5�޽{�������⒒/�˙��������Ov��7G�ˮ����,??�GAA�_�޽�~���?�!�����'�(//)-�ӯ����kO��3p�@������/:t��?y�E�������G����
�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!�������a������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8�c�
+endstream
+endobj
+423 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 1600
+/Height 1600
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 10253     
+/Filter /FlateDecode
+>>
+stream
+x��݇�������.�4Q��P�I����u��32"�8�8ֱ��1"��Y9�RFI�D���������3q��ߟ����>��z]�볮Z�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������X���us]�J#'77�~��o���/K2�4���/�y���W��ʯ�h�+N̬���=��v����zM۟��%�՘r�M-!��@�uw�zxf�^�ݾ���?4����gJiƅ�d��غ׀���wZ;�
 �Zv?�O3e6�G�k�Zmz�4.S.S/j���R�C�=?1Sn˟��5H��G���LŌ��:�k�q���L�Tܬ_������ICF��T�y�����n�׿���<�ntM��q��3�kŝ�+@Vk����d*ߵ�-@�Z�ߘLqU,�;���>9�ym��4S�V��2d��Q�^����T�y����Y�x4X{��M�T��[���Y��z{��u����`[�l�|������F��\t��k�����T�o�u��l�=O{�L
x����T���3�35���G ����ț^���93�4����I�
����{�nf�e�3�9;S�nmh,�c�3�|67�R�$D�+��z^&��61$��u���9K2���Ȱ�Ķ���,-ʄ��K���m}ݔ��LD_�3:����t���L\56H����i����eb��,�X�G�f{�9+����
+ ��fx��L"�c��bh�u��ff�$s��ݎ�?>;�$:5��a�s�K���Wr�@
�x�/.�$�y��ly���fj��&lw�#���$�����m�sc�f�mō��Z�x���g�o�����lw��i�2�ax+�	P-~v�ع�����6C
+P�v���%E������j��NqI&����T��܂}f��-�*��ir��ř�5��P���9����6t#
P��o����2��w�6@e)h���O.ͤ��C�7@���a���eR㝍�9@��oz�UCR�x|��;X��呷[�I��9���v8��f�����>@9u?o�'�3i��	�P9;_��g3iv�Y�PV�>yi&�f��P&{�=zƲ����R߶:��/�+�t�C�&@���K�[7�cq;s`M��Ӳ%֌y߼�X�M������c%�.3;�V������nZ�¼m����ݤ�	/�i����	�O�i��C��Wx���Cu�����-k6����o�6���C-
��z����~�[��ҿ�u�G ��
+��4`�5�L�h��i_<v����xU��w�64w�4߶���U�r�����T���2��BPNs��R��w��j�w��R'��'~������T�$��'f�����c6�Q�ا,]��+ǧm�( ��ʒbo[U�[�U@�ߴ�����ܴ�t���f���3L�W���L/ [�m�ѹo(��rO�)d������U%_�|Ed�F�t��GU���L�Jí{��v�O{�d���?���4{5�m�Y�x�r��1Z����Ҥ����/}|�J�^�zH��{_��u^�_f�	�������k�׻�@B59�cf���ZsH��'==y��֤��MC i�������i_�4�$i{�;�
+��=�!�LG )���`��<¸ƌ 7�}�wTv(36/��
+lx�?[��v�&X��_�����|���zݯ�����S����{�8NIG6�, ���y�?[�wEmS��厧���rN�e{��@��~� �GR|�֌b,^���Ir�IԼ����W9Y�2q������G�T���M3���������Q��4��jH�s^�<�oků�a�t8kԷ�tp�}�O�@u������{�T�����#�#�
+�5���[��O�n����I
T���
��q���*%���@/
�o{���d�%W��@Zk�_�6M�f�)?3��*�|Ӄg���M�q�
+��z����~��iT����y�3���ES�L�v�;�?uS�6�;Pi:���g�5%V\�g��"��-�k���0[�R�|���.C�3�
+���t}�:��5������4���l����4��oa��w�b�eO�����k�/�i�C���Q�w�Th�}�X
+�r���v���(�������n���Q��+O2Ӛ�P&MoW�|�a�ʢ�]��:J��k1Pm�/�l @i5�[k��IPJy�u&����L��s��䇾�N(���m���G��'�����/������f��K~jB��֤���=�T4���f��d%�`�Z6���XU�2��`u�,Ҕ�ԓm�X����$�p���U{���U���������X���`�r���qamVj�q*��X����+u�o?X�7ZH	�k
S���Ub��Is�#�W��������5����?�}�vd����/Q����D���n_Qӛ�#;|�)�g���S#���$i~�j�H��� .��^/R:�C����G�EJi�����Z�R�bK���|�H���������1�H�`]$3�?m��N��u�v]�)�?9
+��"e����j��9E!R�w�f�]�;�!e}������<�)���t��]�l�v�l�)�a�DRoO]H9\P[v �ꜫ
+)�m��)��~MHy��/=�n-_Ԅ�������kEH�l/>�j��A�iR]��4�]
R^���X݋� 嶿Az5����eK��j������V�BH��,C�V�@*��ͅ�)w?
HE�<�/F�J��ԀTȢ�b�T�H�|�0[H�����h$H�B��~�|A�����q�H�Nαʏ����l!ur��}T��d	�&��G%���0A�֏oT��V��RO�Q9����vz��1�a��.��=*ɐ��ir�ڣ�\(O�"�k=*��n)��Q���L�Qi>�/U�����{�6S�Q��,�v��~t�mGe[��pA6k}�sc�:���Y��8�����U������f.RqT�E��d�
�|���D�Q��j*k�U��QTl��xF� [��>�m�Fu�w��A6(����7U�i���IW�I���RgT�'e��x��|�K��0�t��Īӡ��n[QSFw�AH�ڛ��7~�KM�cC9�����k�{Q����,H���1��S���qc�GH��mμo�b�E�6IH��.||T��"����b	���/��,"��E,!z�+�yn-��$���"�>�		��'�`�l.����}0H8oזL�o��ڊp��&�w��"��%�ZW��<ф������Jф���U�]4!�d��"�	�e����"��{D���+eE<EG�&�߀�PV�3��lBt]��*�)��lBx�.WV�3�Dل�6�NWЇ]��{�"z��pBp�;����&��%���w��N��2UED�8���CS�w� ���5��F:!�41�`5�N���o��\���)*B�fK��Z,�T�4��xBh��)*b�!��ox�i�;X[A_EELC�'���EEL�'�V������b�l��"���`Ahy}�A�S+GB!�-?�S��u�|Bd9�)���\@!�mF�)bZ�|Bh��)��{�|Bd]��S5���BdW�)�*yP>�(�Y�P��'���
+(��
a�[_B!���)����B`Ǫ)��YB!��PM������L�RDUt��(B�
�25ET��P�k�o�a=�HD!�k�k)�:.OD!�z��a}���B\W�h)��/�`�p��B\}uquQ+o��"�wE�:]G�%"
+a�N�Q�U�+B+�$E`c�
+)DU�E�
ȭ2
+Q���li!�����Q�Q3!����U�-�KH!�V��(��(!��r{�("{oc)���{CE�=R
+A���l�	B
+Au���lD)����P�v��l!�
_�PD��;XUo
Ehu�R�����7S�����S��k
+��&tS���K5��VOL!��o*(b�UL!�d��"���Si����d.S��Bb+����'
+���̕S��W��l1���?�O�6���BH��+(b�NL!������u�B:F?����b���m��b
+!���m�mb
+1�QP��e;1����O�1��>PP�6���BD9��'b[p��BH��!���B���~"��}�Bj0DAZ�Mb
+1��؀ܛ^ᅘ��YAڼ�b�WA�]9b
+!5\A�;��b��A����$)��Z=����b
+1�PC�+��bjiBh3��R�E*��NR�ٓ���l"�ԱsT��mc!���<��l�.B
+Q�hBd��(D��EE`�4R��x{{��
+^�Qĵ���BX�}���kO��^+QR�uv��Z��뾦"
+q�\���jXk	���*�RD�d#	���yBX]�]I�	�
+�
�RDu{����RD��_�Chϩ)���J>!�m�Qu�Om��"�r�"�ZM���"�XOӲ��B��'&�nc����ݫ���|Bh��
/Q�!�Y�[�A}�\@!�n"$���"khBTKz	(D��,=EP��+��	�mj���P�l�iz����-�X�j��>q�-D��5ET�`Ad9wk)���:MB!�d��"�:K(���"��J(ĵ�WZ���z"{\K��]$��s��"���Q��O%Z����#��N��E\c6Q��Z���/�VׅJ���ϕQ�	⚶��BX))���G��#^�"�E�j��lq{����Q6RD!�6*��~#��]*���חQ����"�Q2
+Q�ܢ�l�UB
+a��,�Q�h;!���VQV2���BP��([�_H!�:��("����BP��QQD�ZK)����4���G�T�I*��w��R����5���(��X
Eh�
+�BʽDAڂ}�b����"�W:�)��OA�e��B��cEh+vS��&El�'��v*(b��,��V�Dp��)��u�~"�O[�)�t�
+El��Bn@&�'��ON!����'b��O��&_�'�{@N!�;���� �Q[ݔ��
+��,�"�Q�9��
+/��4[�_�~"���j�H=���!"ޢ�*X���n�Β
+�F;�Su$�=K;ݒ�%��9K;��n�
+�4�����
+�䟡���LQ�x�LPN��y7Q�x�c�ѕd�l&�N�O��/�nr�n"�9��*��a�r"��֗U�&�d�D��G�N�ẉ��l.��麉�(OV!�M��&�:Y�p�VM$��d���o���(��E��((��Fo�&`���
+�\�L7���5V�����$<B�_X!�~����w��B0mF�&�`���
+��Ժb�j"��˕W�e�1��$��Ki�`.��D�YZ!��4��{G�@0}�k&�`���
+��}��H��W��4�D2��X\!�Ɋ�D(9TZ!����y'q�X�TL$�͍�B9\/��b��H�)�+D�s�^"!��!�R0R/��W�2��+D�w�b"!���;��p�^"!��/�H�j��8M`!����%b����؀�o�I,��9�DR\V+Gd!�C��	1���B ��RK$ś�$9�H-��nX���j������B ',QK$Ĥ���zV-���X���z�dxK\!��/�%�a��B,�~��H����b��/X$�����mB��_X!��o�&��?��^
���
+���g3A��
+DH`Ӟ�jW)���\���i��kl)�׻%���&�~Ħ�	��BU��A�ti$�ݛ6 ����[�oI�C_��[���+���
��"�?�ʧ��i-Byֺus��u�E��sg��a��颼�Q�K_?(_!�r��`Ԙ勿�h})����+1jF�™�AH��QdԀ�S_:����
�Ŋ�߾Ÿu!���A�Q�f�w�/��٠{�F����|���R١�@�F5��x߮"�c�Ez�j0��=��d���VmT��8`a�l�c�v�JM�}��|eY��}
+��S���oY��J�*2�����d�UC�D��wY���A6�9M�Q�^?�Q�e�,�w���rM��ơ�OUxT�󒅏���D� �G�(Z��)k��ǁS���|ބ��'H��t5oҳ���N��ꏊX�Ű3�
+��s����k��Ԟ>B���u�!�E��yIQ
��?�B���@RV�<�g{(O@l@(�ۺC.ڽ�����.׈�ޘ���C����{�D)R:�q����Z�TF���_��?4X3�F�^ݥ��h�k�Y�'�iP )��xD?��G�g���P`eڪHV��d��H�*9w)JV�x,[�lO��V���䧊捼��l��Wp���G���`�kֱPc��?}tS��J�εJ�=������,@im�Pq�w�^�qwq�ʠ�ժ�·��j%@�l5C}�����P�
�5
+4͖
>s��b��G���hj
�p�6"��SmO@R��[w�P[����q�*M�?�ס��TH���4m>��Z�*l��j�̻�k}'B��f��%��ء@e��$k��/oo���9 )X<
+>���T�=&���V8�����@��a���oG_��IT�n��l��3f�f8PeX�h�Qј���4��*�y���>�r�6�6P�.W���7��k-�rgi�l2��#76��jq�' Yc����{+���?_�f�Oݮ��T�;JTo򍾴ۺ�@�Z�P�&ܲ��l[�L����&�ГZ4�g]�&4�I�i�up�Pc�Q��T��]�z�ԠzKTq┬u���.P�r/V��R\�u��L\��5S%'Ȣ�/b�!䟧���pڈ��MY ���s"z����MW ��>�9��#�3A ��Dݘ��t0Q�x��
+:�g��^�=�4"�8FI��z��[��@P�g��F
8b�l�Q�:������h�����Ѽ{�6-ML �-�Qؑ|�۟�.0-�$�Pg�1��u|�$E��v�ٲ���	r��`��r-@�l����Y��/�(Z ��-Q�5gE��˚��@"m6R�א��_=��$w�L�ׄE_�x\C�H�
>��տ���K;�{@�]W�ϫ׌�w�e���v�F��wuG����f�����LtFW3��&��j��zxdd��V��������5׀�Ro�v�b_�s�&~�d��|�z���}ed���:�ʌ�x�~�d�s�|���ޝ��5���;U�W�aG4��ߺ@v;Y�W�W�Wv�e�����JTR\��&�
+9�����h���y��u&)�ʰ|���:�N@����+n���3���i�����}�I��ii"����B(y��m�" ��y�"P��߹��F��R������'nj��)��5KA�}��Yۛ;@�m5(�ۺ/_�{H���jE(������Y�w'�XJ���ur-��6 /XJ�S7lj����)E��5��M��,�?��%�Ú�[=�c��f
+�O�Yj�X�Ni��P��l@^�F�BI��۶4C�V�V��Y��_6;�V��0k��.s?>o}s`��[h���}�9��ż�X���-?�p���s-@i�����/_��P:�GX8�aګ��a�Pz�}�����[kc.��E�{���☻�o��~�"Ջ�����̟u�!��o@�=wg������>2�]�����rG�r���a�52���w���}�5��.@E���ţ��zN��{�i��kς\CP)r�N��3c�lm�*M��iX<
+�}����T�_���c��a�40�����!��3>��a��U���Y������T�d�,]<�}�����4y"W��9{cP��ʺ��.x��}�X�*��,��n���U�j�ߒ�Y<�<xԖu
)@�l@��-��s���:����]6,�.��}+�j�$��9챮G��խ׬d���n��P��?���c��q"@�8rFRp��~��Pcj?��������=���YGMO�ƣp�M7����D��g
�i��"8bfb�e��8���y9!����o��p��sN��<ܫ��啒���'�t4N���(����S�j��"Zv�X��o�of��b�)�A��o9xc�א�O@>|��
�
@d]�C������D�L����k���cT���4����/Z�7$���x��cęm��/;@blb�}�9�H��k�P���z���X����œ.hn�����;j��{�0�	�q
���~�hW ��
���ǔ�.k��$�V˪{�����;@�5��z�q�1�\u�,��wշz��gKW ;4���>|�׻��zd�]fV����e��w��I�[�|�2��M�\i�,���}[��c7i�*d��۪p���-��z�d�����ţp@��u]_����*Y=^8�Q�e��
ȄJ_<&�k�g���v��ޒ���o����+m�(Z�ֱ�\Q��x���՝7�ƍ]M�����JX=�Mz��� ]�Tp�X<i�m\G����M��P���?s�hЊr/��v{�:� @:u�]���{���H�NJ���ӷ�w��ҬӢ2�/�ݥ��v��յ{o�Pk��2F;��N
]2��wgiW���wl�r�/�J�
+��˶Z�#s�~��5���[����G�Z���cd���r�Y͡�����+�N���e��>��`U
+._��l޻�L��i5���s��hX�:��D���V�U`�6���c������4��{2���p9�(�M&}�[�[ǵ���j_�w�q�������ڡ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}��
+endstream
+endobj
+219 0 obj
+<</Type/Group /S/Transparency /CS/DeviceRGB /I true>>
+endobj
+225 0 obj
+<<
+/D [217 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+227 0 obj
+<<
+/D [217 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+223 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F44 228 0 R /F45 229 0 R >>
+/XObject << /Im2 220 0 R /Im3 221 0 R /Im4 222 0 R /Im1 218 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>>
+endobj
+426 0 obj
+<<
+/Length 26        
+/Filter /FlateDecode
+>>
+stream
+x��	
+0TH/�2PHW0Pp�I��p;
+endstream
+endobj
+425 0 obj
+<<
+/Type /Page
+/Contents 426 0 R
+/Resources 424 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+>>
+endobj
+427 0 obj
+<<
+/D [425 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+424 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/ProcSet [ /PDF ]
+>>
+endobj
+471 0 obj
+<<
+/Length 2380      
+/Filter /FlateDecode
+>>
+stream
+x��\�s�8�_A�Ӹ���to��N���Ml��C��Œ<斁��{]u���4��L9vH����h�O��n}����ެ�C��Cޫ=��0\?��q���3D�{Jz{������j֋q�\�K�o���=]L��x0��t�#  ��k�vu�1��^�c�+����ā�5q�Cʈ��?^�m���^@��tݝd[�탃7s��@�vbooƶf��]a�:�2�B�x"�,ѭ�Z�c\B�T)ĩi�*���춶��t>���
"cJ,B]�����1tJL���;����8�"a�>�z&/�*���IONeQ������g���u�o{x�i����'���S�w�f���@�r�ۆ��c�K#¡k�n5�:y��
���p��G?�6�)j9SI���y�ɦ�m�]��mW��y�|�)�,���,��!��(*�j	�X���@��g'�S��@��S�4����|����[��g�fNx�"`*������ʻ��\��B`���@����+��2ym�,/����#�8N�Y~����>� ��$��A�„x���Y���e��*n
 b�:����G�U��b�9�-:M��b�f�*Q��+q
+4,��aAx���H+3Q��5���y�E~ !�^@��!�K+0k����Ƭ��SY�Y1�D��Q��I+�2�%��D<�x��E__��n��b��ѩA���8�d�n��c�����Mm�g�"�(J�#���q��<�P3���M��5\[�^8NwM�=�`;Y�6pmA��5�N�h�8|���yJ�g
���n�3��J��T�?NÝx}!Db4��
����R7�)V�Mg�2�`D����	F�X�Y/�,�VA��S��<8��\_�j#U��O\c&�G�Nk���o�
+�6��w2_��VPY���X�}t��B1dZ��E��)���Te�П���?�T�(�@���S��Ź�_n;ߕT7���������|$�~�Ҫ���bJ�NG/�ûq���2�K�Oo�iY*�E�����g��O�΄��;�EG�:�b�&]*�Ey-�9��E����2���
+	��*�}MT6�9x�����,o��h��vF�Ȉ�#!9D1�9_H�Ƶ��GDh%]�n���թ�2��kU6*�6���X�S�e���xR?q�&	���ټɓ���u�4<*;]��4�RE�˳r�����"����>�<���,��j��V���v�����3�6_���8�샮��0#-~l��$���3=��fQ��s�y:ŏӯ��0�![�P�9~�~{x�t�3b��LĽ�u������*�vX�d�iZ~�q�J+�Mz�<���
��թ�����cL�P��$Ei��I1sƍ��I�6*I������Os���>���N���)嘪%��I1uϔ�i�]Y��ʤڴ�"��N8F�ץ�y��ɉ#�p�!�o��XD��AK-gg��f1?�S՜W��ڨ�68�dJꑲ����K��^�h?�����ms�2�7U�mP.��|4F�;2R{����*�B�3T$��3�fL��qN�a�6���A(t��L���̜��Y��Z�.�a,�����52���`:�a��	�T�l�������E6�u���%���K�c��)
*g��ō�Q�<^�03����jȬMt(��XlX���.��m@d��/���:L��-SM����d�`P�l\S�EK�:�;K�5���R;(��Ou�|g�_H%����A�Ԉ�_YJ��N��yI�r��[��~H��ߌ
+�_ڭ���l�r}���lF��PO��A�g����1"���x8Q���Jw����b��~]5���Z\���W�W���묾,��(�L�wݪ�z����T����Np���ZV��ۣ0F~g������_��P�k.�aO"�v��<ﳶ��� C-�2����	�l�������۶��=����7�3K6ߢ��<D��B����H�ߵ�Ҁ���" �9���R������kO�TJ@ɠ@���� �1�Bw�d�����{o�^a�SJgwٖ�7e�W��_�˯W���\;N۶-����$'@q{��9�_7�ν�qu�%
+�6�h�(�d��M6������K�����4V1�Y6ޘ_�us�������ўB���kj�i�Ձp�&����ݷ��l�"��3��.���6m�?��œ$�J�b��i��D�&ō�z�U��J򶀘ȿy���>Rr��i�.�9ʹb3@��ΛN�������4$Z��7�en��$�[��[@$�Z
�=�!Y,�l�i׶fŴ��w[l�؅T���ky�>��-/{�f0ֻY���9��M�d
+endstream
+endobj
+470 0 obj
+<<
+/Type /Page
+/Contents 471 0 R
+/Resources 469 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+/Annots [ 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R ]
+>>
+endobj
+428 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 632.024 189.599 644.56]
+/A << /S /GoTo /D (chapter.1) >>
+>>
+endobj
+429 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 618.633 234.697 631.136]
+/A << /S /GoTo /D (section.1.1) >>
+>>
+endobj
+430 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 605.084 268.668 617.314]
+/A << /S /GoTo /D (section.1.2) >>
+>>
+endobj
+431 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 591.534 221.126 603.765]
+/A << /S /GoTo /D (subsection.1.2.1) >>
+>>
+endobj
+432 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 577.985 247.21 590.489]
+/A << /S /GoTo /D (subsection.1.2.2) >>
+>>
+endobj
+433 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 564.436 172.024 576.356]
+/A << /S /GoTo /D (subsection.1.2.3) >>
+>>
+endobj
+434 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 550.887 303.413 563.117]
+/A << /S /GoTo /D (subsection.1.2.4) >>
+>>
+endobj
+435 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 537.338 210.479 549.841]
+/A << /S /GoTo /D (section.1.3) >>
+>>
+endobj
+436 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 525.774 154.428 536.019]
+/A << /S /GoTo /D (subsection.1.3.1) >>
+>>
+endobj
+437 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 512.225 207.773 522.743]
+/A << /S /GoTo /D (subsection.1.3.2) >>
+>>
+endobj
+438 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 496.69 251.453 508.921]
+/A << /S /GoTo /D (subsection.1.3.3) >>
+>>
+endobj
+439 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 485.126 192.042 495.371]
+/A << /S /GoTo /D (subsection.1.3.4) >>
+>>
+endobj
+440 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 458.71 194.453 471.06]
+/A << /S /GoTo /D (chapter.2) >>
+>>
+endobj
+441 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 445.133 135.893 457.053]
+/A << /S /GoTo /D (section.2.1) >>
+>>
+endobj
+442 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 431.584 177.741 443.815]
+/A << /S /GoTo /D (section.2.2) >>
+>>
+endobj
+443 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 418.035 165.61 430.266]
+/A << /S /GoTo /D (section.2.3) >>
+>>
+endobj
+444 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 404.486 193.341 416.716]
+/A << /S /GoTo /D (section.2.4) >>
+>>
+endobj
+445 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 390.937 215.933 403.167]
+/A << /S /GoTo /D (section.2.5) >>
+>>
+endobj
+446 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 377.387 153.675 389.618]
+/A << /S /GoTo /D (section.2.6) >>
+>>
+endobj
+447 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 363.838 332.856 376.342]
+/A << /S /GoTo /D (section.2.7) >>
+>>
+endobj
+448 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 350.289 333.544 362.52]
+/A << /S /GoTo /D (section.2.8) >>
+>>
+endobj
+449 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 336.74 251.661 349.243]
+/A << /S /GoTo /D (section.2.9) >>
+>>
+endobj
+450 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 325.176 126.195 335.421]
+/A << /S /GoTo /D (section.2.10) >>
+>>
+endobj
+451 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 300.047 70.177 310.685]
+/A << /S /GoTo /D (chapter.3) >>
+>>
+endobj
+452 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 285.183 234.119 297.686]
+/A << /S /GoTo /D (section.3.1) >>
+>>
+endobj
+453 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 271.634 318.424 283.865]
+/A << /S /GoTo /D (section.3.2) >>
+>>
+endobj
+454 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 260.07 255.926 270.315]
+/A << /S /GoTo /D (section.3.3) >>
+>>
+endobj
+455 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 244.535 282.97 257.039]
+/A << /S /GoTo /D (subsection.3.3.1) >>
+>>
+endobj
+456 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 230.986 336.326 243.49]
+/A << /S /GoTo /D (subsection.3.3.2) >>
+>>
+endobj
+457 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 217.437 411.511 229.94]
+/A << /S /GoTo /D (subsection.3.3.3) >>
+>>
+endobj
+458 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 203.888 310.242 216.391]
+/A << /S /GoTo /D (subsection.3.3.4) >>
+>>
+endobj
+459 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 181.399 167.759 191.808]
+/A << /S /GoTo /D (chapter.4) >>
+>>
+endobj
+460 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 167.866 158.333 178.384]
+/A << /S /GoTo /D (section.4.1) >>
+>>
+endobj
+461 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 152.331 184.155 164.835]
+/A << /S /GoTo /D (subsection.4.1.1) >>
+>>
+endobj
+462 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 140.767 199.919 151.285]
+/A << /S /GoTo /D (subsection.4.1.2) >>
+>>
+endobj
+463 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 127.218 174.446 137.153]
+/A << /S /GoTo /D (subsection.4.1.3) >>
+>>
+endobj
+464 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 113.669 144.13 124.187]
+/A << /S /GoTo /D (subsection.4.1.4) >>
+>>
+endobj
+465 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 89.194 204.741 99.603]
+/A << /S /GoTo /D (chapter.5) >>
+>>
+endobj
+466 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 73.676 260.202 86.18]
+/A << /S /GoTo /D (section.5.1) >>
+>>
+endobj
+467 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 60.127 204.752 72.358]
+/A << /S /GoTo /D (subsection.5.1.1) >>
+>>
+endobj
+472 0 obj
+<<
+/D [470 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+473 0 obj
+<<
+/D [470 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+469 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+488 0 obj
+<<
+/Length 1287      
+/Filter /FlateDecode
+>>
+stream
+x��YKo�6��W�(%çH��i��.�E71�C��qTؒW��]`|��dˊ��i��`�	_����'�s2����y9�h�(�A1(�BE�*bCFr��B�Cw�Ϗ�O@Q^��4�I�l�I��v-��4�_+C�e(Y� \ɾ���U'�&L�HF�^�7�7�oT�XH�u��24���*@��ݩ�J��'���`갱O�1�n�R��Fv�
+�E)G�(i�~ҫ��q�%ʂ:�Q%���ꀯ�)_�S:�|>�q0�A��������=%�J���qK�1Hۀ�d���ӼL�ǘk]��̋�%�/����I�&U��X�S��_�h��M��[-���`�@t���ΔY���� 섰����ˋ}>0�Yω��_���͋i��Y�X�3W;th<
�`��TC[|�����r�
+,�F�
�1�Ӫ��0����8z���,}�'�˪�G�xt�%3c��VHk���{�d�����C�R���SҶHy��nK�ܤ�j]�T����u��/ݝ+\��GYq�k(�<��8m',�3WMӅkϔ+�"]�;Q�d���@�Gg��zo
�����ա��
;6������{���x!�G�{k
���^Y�$y�'|=���� ԯ��o������#��9��<�ثa�^��T��\QJ\1��on/���DG�{sH�� �0��_�),G�E}a���r�E����k[M����V2"��+A	�Y�O�,���I�|	[�Q�JW<��k�~��Gg�j����_�ӭoTy(��i6w���oiu_�a ˫ȸ��#hl��X/o]��k΢ӫ�X��~:�
ŝ[p\_��w�Qj��f��.���"�#�^�vR�R�!��dHPt���N@E7	�Al���(�x\�_����N�_8���SLc�{�;����AӈY���RB��ihp��(�)?~�����om�#�b[v��j�F�7�{�qg�o�6���V�?W��w��~\վm�q�X��	5ub�5���[O��y��YI0�JŠ�0m�I�m452�HM�|�����.��8#ᗡ�n�of�)��`1l���Bu�qД�����0�cۓ)�ѻ�"����*�z�B?AS�h�(�v`>-fi6�i�=����*/��z���߫E��GZ�U�U���U��2����j@EU���ΜiȆ���i�uߜ�۟S�˴I�U�.T�C�s���5���"���ˋv�l�
�6j�ڕ+��6g�����yrW
+η�G~�%���� ��
+endstream
+endobj
+487 0 obj
+<<
+/Type /Page
+/Contents 488 0 R
+/Resources 486 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+/Annots [ 468 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R ]
+>>
+endobj
+468 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 728.179 207.184 738.424]
+/A << /S /GoTo /D (subsection.5.1.2) >>
+>>
+endobj
+474 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 712.644 218.977 725.148]
+/A << /S /GoTo /D (section.5.2) >>
+>>
+endobj
+475 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 699.095 204.752 711.326]
+/A << /S /GoTo /D (subsection.5.2.1) >>
+>>
+endobj
+476 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 687.531 207.184 697.776]
+/A << /S /GoTo /D (subsection.5.2.2) >>
+>>
+endobj
+477 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 671.997 225.653 684.5]
+/A << /S /GoTo /D (section.5.3) >>
+>>
+endobj
+478 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 658.447 204.752 670.678]
+/A << /S /GoTo /D (subsection.5.3.1) >>
+>>
+endobj
+479 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 646.884 207.184 657.129]
+/A << /S /GoTo /D (subsection.5.3.2) >>
+>>
+endobj
+480 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 631.349 296.584 643.852]
+/A << /S /GoTo /D (section.5.4) >>
+>>
+endobj
+481 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 617.8 204.752 630.03]
+/A << /S /GoTo /D (subsection.5.4.1) >>
+>>
+endobj
+482 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 606.236 207.184 616.481]
+/A << /S /GoTo /D (subsection.5.4.2) >>
+>>
+endobj
+483 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.156 590.701 230.486 603.205]
+/A << /S /GoTo /D (section.5.5) >>
+>>
+endobj
+484 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 577.152 204.752 589.383]
+/A << /S /GoTo /D (subsection.5.5.1) >>
+>>
+endobj
+485 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.247 565.588 207.184 575.834]
+/A << /S /GoTo /D (subsection.5.5.2) >>
+>>
+endobj
+489 0 obj
+<<
+/D [487 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+486 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+492 0 obj
+<<
+/Length 2556      
+/Filter /FlateDecode
+>>
+stream
+x��YK�ܶ����[�p ��,�a�b[�6�A��Cbg�"��ޔ|h�/�h�NU*U+
�4���ss��
�		�^�����'��@d"�(
$gQ�EЩ�������H6�m�E�ȶ�n���Y40������hP4"&��ӥOώ�iD�$H%�e��psLF�4�� Ib��mp�駫(&1p3�C�tV�n�o���Q/�����y���j��aA	.��I�f�w���Ev0""F]��]�S��[���l�AH��������JGO���.`Y�J����>�/u_�w,�����Tq���W�o�P.l��2�J���o$(a򇀀QY�`�6f9�u�a�C3*$��S& 4"rBX�KS�ߞӁ�$b)�(���������]>T�E�۱*�U����'H�F ?�0�A��I �)M#F9�F�w!O�XW�y1�1�G1��1$�� Ϣ,�GD�Uw_�����可q�&o��q��~u$��I�b��#Z`@�����s�
{{T���ao�"�n:,�y�ĽR-�J�W�V��`�HUm���S��~���D5'f�Ǧ*�����u��5*7��Vϭz0��B=&�
+4���W"��H�$	u[?�F׻�K�~��qQ��8ػYm����r�e�+a��@6\�h���'U�4a�M��t�+O=��T���Z�V�4|�Y��7��uF{��d����HXK����o�ОF24�F�{��q8���|�q�����R��΅GPx���Tm�T���N�����n��9����[Ղ5k��pT.�f	�y��(�e$ᖰ���h;��1=0 ��9K(�^�u��E�X�����:���‡���|��}e�_��NwM>�������A��-c����b<�NႱǥ4��y1U@��}�wn̜_�ڑ��΀]I�4�w�r���b�D[P��Q&�`��X&�n�
lLа�/b��ZPg��. l�I���ǐ��a̻̭�|��N`�
+�
U��n��W��̄�0�P
�ʝ�	|㰇�01d4����,�ޱo�ؚ���N6��L��<�y��9~Ժ�n��P��A��Ž ����=~9h]:�U�����`v�^���l�s��:��m�'O�sp�Q؄Q"Qa������Ԑ��Ih�8������HBP�A��޹���� t=z�,�~X���UM���d���3U��,<�D��+�,6at��l�y�A�@��V��R<�Vf�)�bm�B�,1	j��#��	l�\� ((�E��<s]���%/��ˋG�������d������	S<j{�w����
�G�����?�>Ȼ�@�Y��U2�'hN��GL2h���J�i�v<a	�3����}:�Ͻ�V�e�w�QCW��!Wg�)�NgJ���ވy�u_�q!77�cE)q��Ca�`sZ�	�>?�&?m�Ĭ�T�|�6�V�b��m5�n��z:j���p��O�!����u�W�#[�##��Wᘭ
+�l*�"���F�z���n9�Ad��ViY==�b
+�O(����m�2pn:�,�1 :gu������Ў$�pU),�YhĨ���U��J��H���b��Y�c�.- �6f�*f��Y��٧㑦�S�T��ͷy��bN�����U��}�5�dQv�E�E¹ݣs'W�j._�bs��ܕ�SL4�{9�v�8�ϕڟ��?�y=���wp��AT'���Bܦk�f$b��t��u��J�Y��q\�&��0�;ߡ����U�'g3�[����M�k������C��="mI�o�Ls����5�4|rC��W�c���cq��6M��u�>"��S]��c��i/�\�ŧ���X{&��p���ݯi�f�Z�"�·��t7vm�C<����c�Ocu2	�x�qښ�G���_��ļ�-�8�lu���vؽ�d���. �+�lS=eӣ��9~�2��O���b���>���?� ������(K���2�8q/!?��Z;"�OS�@�j�b�a>X����L���_4��{3ulo&Z=�v���9��ň>��f���^�RF�?��"�a��;�����'B���8��8�e�Q�+�g�W|Í� r|�^��
+F��i$����LO����
&�_,��[y_����$>ڠb��Iv��WQ�{��8��/�Pr'��Apua[p���`)���)3�Ed��QsK�g��b���n3��l�-v��~�4n�n濝��_�?Ո���m����ED�_!�[i�-�E�9�N'���pb�T.�ɭqKl4M?nL�^�1?�̇�6�20�m�\�s��(����B`��//q,���W�m��ᄉm@vAy��y4��*s=ڱC��$�/s8q���@m���#�.+@�޾��<3�I���ԩS�˱�H2TP�+��X�
�{��n/B�
+mlɂ�N�-W������ܰ���@w~{9r�����w3h��բ��Dj~T�U�b���?73��
+endstream
+endobj
+491 0 obj
+<<
+/Type /Page
+/Contents 492 0 R
+/Resources 490 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+>>
+endobj
+493 0 obj
+<<
+/D [491 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+5 0 obj
+<<
+/D [491 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+494 0 obj
+<<
+/D [491 0 R /XYZ 29.788 645.141 null]
+>>
+endobj
+495 0 obj
+<<
+/D [491 0 R /XYZ 29.788 645.141 null]
+>>
+endobj
+9 0 obj
+<<
+/D [491 0 R /XYZ 29.788 645.141 null]
+>>
+endobj
+496 0 obj
+<<
+/D [491 0 R /XYZ 29.788 483.33 null]
+>>
+endobj
+497 0 obj
+<<
+/D [491 0 R /XYZ 29.788 353.522 null]
+>>
+endobj
+498 0 obj
+<<
+/D [491 0 R /XYZ 29.788 250.812 null]
+>>
+endobj
+499 0 obj
+<<
+/D [491 0 R /XYZ 29.788 148.102 null]
+>>
+endobj
+500 0 obj
+<<
+/D [491 0 R /XYZ 568.097 63.19 null]
+>>
+endobj
+490 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+507 0 obj
+<<
+/Length 3217      
+/Filter /FlateDecode
+>>
+stream
+x��ko�6�{~�>*���DR��-�}4��]��ݢ�e&���������o�C�e;�8E��ysfȳ�_~����$�n���x/^�/�z2�,�"O���Bz���O~�|P�D0�i2f����ܚ�Z����*Y��,�b��Ӂ<eO�TELF1E�+�)DI�E����U�Q�_N9@Cأ�:`:�.6�{W�Ǒ}��cd�.�D�YĮ0���I���A�ă(.���V(9�:4��*�u�2Z��'H*�Y�%8�����Pʈ�L��wu��K��Ҍ�}��~���m�:
�T���j�����W�8y5"&�hx�2�B���zK��/��ޝ���������H*��X�j0x�Z�x�>���
�LX�F3".�O4\T��i�+���+���T}z�	�	`���@C&��D�0�Z����TĿZi��}u[6u��U����î��T.���F/��C���ˤ4���y��$�U?�J7�;�M�5<�"ւ�B�(�ZF�
+ܪJ��,�6#&K��GW��]�������
+��v����^R_W�3�M}�ҡ���J7�Z��5���M��6-tۖ�
���r�뺱�,з?�G�P�� Ȕm��J��@(A�%�ŗF���-��f����Ŵo���
�n�
�:v<���F�����t7��������!Sqd)35���9�aYQ�_��5g�]٭�]O��rY��	�����Rߖ�I��@da���p���w,�Ԉ�Ʈ�#.N�X���p�X��Hg{ұ;o���ͦ��V}�|�&��df����z���8���]}k���e�
+ɳ��|
+5B�Þ~[����Uz ����	����_M�Q�K]���!`��M�(�2�qF��$?hT�ƶ�S���WG�y!0V����v����N2��<�0B��m�i�d�9�Gh�tFd�(���U�fW�����m}����"o�#腜��m2e$c+#�vR���0�H���1�i֘���7��
+5k�
��V츱��=ba7�P��2e��efꧦ$�T����/��V~YQ��M2�w����Q��k���X��f�ͽ�^bC�E^�0���i��^��ڊ�m�c���;Y��\�u}��V����&�i��u�b:[t�F�(lalյ�-�Y����M��b�����$=8�Y�ӳ�E��	�J�M����
+�}Xnjm�<�`�-Pg�(߂��\��W�
{gu�����n
�rFX'�����g�\��gn-��l�bf"#�wv�D�����a���LƄ��\�OS@=Og&�\:����
xpۆ@�����\��o����mY65S�p���L��b��{b?W�[����0����(�3��4킩��fo����:�c���Z]X鼳��5�n	lY�\�rdN�����gZ�r�I>4�Y��Yd�*H�XDI٠���^�(z _
+հ��o�G	�s���~
�j,X�;Xjw0��Vu�m_NJ�\�Q�7��UK�9c��$.)JA&Nc��i1c�Un��[��]a}���zI�޵62np4��fTo)��R�CBP���z�
+��6h��쳥����*��1���m�Xkz3�<�w
���rN�FB��hm��гD�j�`��Ao@6Y	�=k??����:7���!5�2��^�q.R��y2/�p��]F$���T�yuR$�J����%�Q��R�Ƅ��S����nJ&��¬�I�!1�MJ�硩����Ln��s��+R�S�G���dD�[ь���X�.�t��O��!8I�3��W����4��!,�#��&R�	p��"�����=}�E{�W���u�y�_��a'��v�!���~oO<���ش]�1Y����w�؂�q�>��}��X�H�q�G
/�(�i{e�8ޞ�L��9(�f}�>���k���>��>����Ü>��*�����dB�!�/s��)��Q�J3����{D�
+������z��[�Q�Z�����'��#��Y��)�GS�>T��6
+l��<��>� ����&rXmX��m���;�Н/
��0��L��	��5��E������*[z6z�+��V*��w���sYk;��mWI����z�]~��ҍIe'�-�4��$)-��A>��F'3�.�������0���ifu{Y����-�Z3�5o`Ͷ�_	Os��D���
�jG��2�nݽ���&(w��؉���-�y���i�\?"ď#�Q<0}��ҡ-c�j������^i�l�y����6-�ņm�亯�+���'���w�%����b�f�x���{wg���rHT���;:�p�?_�B�L�#	�]ʧ��_cn��a�q�k�(��#g}�y,�餱��AR��ƒ�f��HRF�;��6*(�|>C�{X�"�1�
+��:�c�y�R�2�թ�Z:2����^��>�i��I�������Yy;�J���vm���z��73��M�j�s����H;��ʖ�ƶ����$0�[̝7K���2oɘq�S��	"ǹ��__��.�L�N0?��_Q�����Lk_�F��k�ٹc"4����M���;�}W���r��z���*s���5�؛>���r���3y�7�X����9�J��4?�Kr��Z$��X7��ÌG�����wy���v���.:zA��b�Wh�"�����C��a�I���nc�3`�Y�b��`\^���/�����\<
+��	Q\�*�1d;��"G��j4I ���B�+���a�[�j�dfa��"t���	APX���09��U�8�� L�h^�N@����]C.1X��U>���4��:'&A��)�?���������q�q�� �,��`�5�MF�p��?40��?��O������qih�ABX����,T&Տ�H�����<��+���bʢT�/�d��!F��{���'c��Q�_�Wy�Q�՗`P��d��`���&� 9��K��*�����u	��kʛ�9���Bo(V���>�䍽�����7�,[�O򵙐���v]���.`W��M
ieߥ|��tՍ� ��\�Fs�
�B!��cos��mw7b��N��U��󔽿���qӗ;D��[ݸb	1�ݛH>L�x�R�c�d2��Ǣ�
+endstream
+endobj
+506 0 obj
+<<
+/Type /Page
+/Contents 507 0 R
+/Resources 505 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 230 0 R
+/Annots [ 501 0 R 502 0 R 503 0 R 504 0 R ]
+>>
+endobj
+501 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [47.105 229.798 169.497 242.301]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+502 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [210.217 229.798 294.11 242.301]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+503 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [126.417 136.761 247.853 149.264]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+504 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.213 62.194 343.853 74.425]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+508 0 obj
+<<
+/D [506 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+13 0 obj
+<<
+/D [506 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+509 0 obj
+<<
+/D [506 0 R /XYZ 29.788 708.67 null]
+>>
+endobj
+512 0 obj
+<<
+/D [506 0 R /XYZ 29.788 461.522 null]
+>>
+endobj
+17 0 obj
+<<
+/D [506 0 R /XYZ 29.788 442.979 null]
+>>
+endobj
+513 0 obj
+<<
+/D [506 0 R /XYZ 29.788 342.236 null]
+>>
+endobj
+515 0 obj
+<<
+/D [506 0 R /XYZ 532.587 219.312 null]
+>>
+endobj
+21 0 obj
+<<
+/D [506 0 R /XYZ 29.788 197.739 null]
+>>
+endobj
+505 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F97 510 0 R /F89 511 0 R /F32 514 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+528 0 obj
+<<
+/Length 2888      
+/Filter /FlateDecode
+>>
+stream
+x��[�r�8}�W��I�
+a�\����3�JbO�Cҕ�$Xℋ�Ŏ�����!��,��qUW�!w���^\�@�Ey�����7g��!p�%��@!!N�)�p
+�ܜ}ܨ|R�Pb��E���.Z�k]�Q�����3K *�PҮk+�3�9~@� T	U���(�qp�y�S%��N����1�@��ݹm��h
+.ޥ�y�����=��.���/A���[:\S'D��Ы��.�%L�8�Âi_׷;|�|]7�(�x��`d�"���?�>�x
�$���������u_ϝϓ�y9[���&W2+󢒳�߯={u�q�p� �B�i���;sx���!�Թk���:���Ĺ���%"��̧��8�	�Z8�}z��"<D}2p����û���"��<�o�x.������\�x��?��)w\B8"�9�G��������6�h@�1���A��:�i�J�sY�VБ�W����_���oVIm��Ȩ���&/v�H�aGr�1�%���q��H��L;><�Y�\�*+/:���$9w�d�ߙR�e@&�}Y���,�r��tX�l-��D
+J�H5Eq�K�b.]��Y�����ƫ�N��<+�te���ue�����B�>�v���i]�y.M�gyՃ���2:n�T��S���I�"���aS�T$�۞^�e��:��4LЁ%��K&Q]�)��LW�F�o�"���i%�ԒΠӚ�w����G�%:w��`]Tx�(+��e�-���ty�'�o<����v�ǩ�Е,�|����$�wq�cV�l&��6��m���?��#��Oz\�Ҡ�
 ܮ����m?M�Ҁ��1�]ӑ�
+��L*�L�E�n]�(�k���ƣ�p�`�x���
+h� <���(��I4M����O�c�����8��C��A����f?�y�1�:�]F�d������'��+�4�Bu��tWC%�+�)�@)B�"�
+���.��`�qG �5��R����荒�
oT8i�po�G �
��\�$����1���I-����^>�ɚ1�G�����0Jy;��`�M-ܩ價~[�5��3	V�f�d�t	u�W^����"�#�UI������V�06{�}����/�yf�RwSY�I���>�!/Ě�e@�͌҉ϴ���e���
+��*���H���\�r3���Z\�X%��%>*��A{6�"�&���`���)�
�*��Y0�n����$��a�$G�Q�C�$rda��5����-®27	�spI�d!3H�f_���V_a��CjcXa��cC�=c~�v�vժ���1�Zb泞�^�yG��DS��e� � � ���=�ycXa��5�����k��ӻ{c�m�������obD`NO���{�"ʶ��!�����7�^���}�C�%�������7��՛r~�xH��(��J|�����y����g�~����^_�����e���1���7p�DPzZ��}�	��]��	X]�pG��$z�����ڷ��`���k��ջ�Eo�z=�c���o�D0rZ��E=6N��=.����{cXa��5�����k���{�|c�����0�;Z�&�@'��z�3��qr=Ρ��{�xo#,��V��z-��z�N�ch�����@�;Z�&�@��u�Iȣ>�Ñr=F�[����ư��k�������w/���j���a�w��M܁�'m���dl�@�怚��ݲ�˛�N���K�P�}�n�v�L�g���q�?��0�j;���"[m1bvj�n�G|���M��b97�M�_�d%��72�+iXA	A��|�V����h;�(b��x�wy�%��G
+��'tF9[�Є0��k�vW�C!gq)m���ӯ��f�Nc�Dq��)�f�����J���x��m<�)�+�'jg��O�B!U�[�fY��<���q�Ҽ\-��1'0���_q6��]};��Qb�_��ˏ�v�>8 oerdp��Ӻ�%���*�gf���
9%�oe�T����{^�qa8[&�;�jʰ����rs�s.�����c�,e��������}j�{���c!�Gf[�g[�N������:��-0������:��o�/��$�	�'�mo�Ժ�3Z����l]���֬����:c\d���]����
+��G���s@VW>m�mrݟ;����I~S���M�$��E���Ds�c���w��U����Lm����͇+s^7���ńD�l}�ӭrW��EY5�f*NU���ڙ!��0�k���I��m%gJ՘S���� �^��u�m!R�b+X���R���x��k�B��/��[�?����������i�a��>�Ǫ�-�rσ<��ŭ:�22�C]��eTE�qYO���j��=aN벻�Z浩��J�h�/�Y���T�ө,�v����
+��\�����:��v��p�O1��b���&FT}���ü��B��n�ê�9T �7^�
+���,�����>lW���z�z���^���K�:�b�]�Aם�'���d��!!�����9���٩�y�! R�9�c���@*n�/�@ϴ�N%s;s���Sw����R��j�����Z���}_�R��[?���a�Jn�y�ELM�׽����j51Vq��#��ϱ�h2uL}�}g;�WG}�V������/s��\�w
�-��ͷT��>cLt>��|�&����ѹ+�\��I���K��QsoX��qH8�2o�e��e�Z�<.Wy%M�p"��<�"�ת��0���-
+W�r3��
+ �*�i�i��l`����F-�L6T���A!o7f��T�_�Eo�����d�.xup6ޛ�&7����o�D{��?-<��I;�
+endstream
+endobj
+527 0 obj
+<<
+/Type /Page
+/Contents 528 0 R
+/Resources 526 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+/Annots [ 523 0 R 525 0 R ]
+>>
+endobj
+523 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.649 568.316 416.641 580.852]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+525 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.995 393.76 259.035 406.263]
+/A << /S /GoTo /D (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98) >>
+>>
+endobj
+529 0 obj
+<<
+/D [527 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+530 0 obj
+<<
+/D [527 0 R /XYZ 29.788 596.638 null]
+>>
+endobj
+533 0 obj
+<<
+/D [527 0 R /XYZ 562.881 396.823 null]
+>>
+endobj
+25 0 obj
+<<
+/D [527 0 R /XYZ 29.788 375.876 null]
+>>
+endobj
+534 0 obj
+<<
+/D [527 0 R /XYZ 29.788 253.285 null]
+>>
+endobj
+526 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+572 0 obj
+<<
+/Length 3255      
+/Filter /FlateDecode
+>>
+stream
+x��[ms�6��_�/7#τ0�Ɨ~�Q7q'�SKn��xh
+�y�H�����R��,F�^fҒ��}�}yq6����iy�9S�sޝ�����Z<�GE;!#(`�)�s��F�3��������h���Z�Jv�g�������@��uI���8F���!F)T��;�(�����SF��_���)��	�iR�u��������9u��`�nc_���[���!�`���<�D��0
+^D�2��F��Z�y�j���X�KXW�XJ~��)E8�����'g?�Sb�"���!
+��	"=�����u^&�.	��Hde^T"9�}������W��i(�����L��O��J�'�u.��
ԙ9#���Ҁpp
��Np�������m0�	������"�Ĵ��4�tûe:
+PWz��M��~#p?x�%c�0����0�x>?�j�
p��
�_N���jYM�����1���x�f"-���q6�7���4���,M�7e[}OP��.a�!���W ����e�}��^ijʰ-�����]�|��'����(-򹨊gx��o���r>E�f��G1˓�z�Oi61X�B-�R��i�G�\��h��I��D�O$��~�C_2�<�YOE����>pv��G�G��Aj}�^��x���}�jNrw"�t�5��o�E���^�^��,}y�e����F/���狙��6��˲q�2�-��|�`�g�<��J�f�k�4��4�n�h�OMk�,+�|�٣��[n,d��@\�w`�!}ZT��-K�X]V�e��(�M��/���q0 T��9�N]H���B.s��_��a8��R�v�[<+�U���A>��$�_A�!!t��&5��,�����OXC�͹�'K�O����"��i������n&��;�S��d0��tK������Q
+
�!F�rHeg:��
�k���0(�I�Ui�̗��S�C,�?i���yZZV���޺K%�G�m極r�! �zZJ��IK9���ubڻ�H�`���p�� `�I�Q��_ɋ�ӣ��cK�l'�Cd�Z��nO��̞"0��a���Ԭ�.]��s�eLC�!���x
�@�p(�j��Bs���&�}�_�=N!�u�0v��	�6�a��z1'@Q���1?r`�#9����A~D{�	ö@�"d(���@!H�q^d�qq$�N������=N'�!�6�{0?���`�:N��4+��|b�"�s��f�	L�QaO�Vpģ���C�`��Տ<�s����͠DA�@������^��t}>�\����A���[LjB�mӧxO`�C+%!�8lk��=4�E+�����f�u1��ܽ��M�>i�c[r���)&���~zsu9�C��Fmr	D��"^�����hF���%!�۹4>����z8>�N���G'۬�0��Z������}/�z�jhe+�L�>ihe[r�:�I+�aa=�V4�Ԭ��K����n+���|�x{1��˔�n�J� j���D�EgC$K�>������ٕF�����2�u�i�E�EG&z4��n��k
��`ѻ���u5zϒԲ��a��B=h��Һ�B}(�j��L���2�
+u�i�A ���8��;`9�s�����w0�����c����V�0��
�l��۶�
�zQkHdkm�h7u�P�p��w:�I��M�(L&��}a(�'���|�#Nl�._�ht~9���}>߾���ҥ���R뗪�O���-���<�g} ��?�l��%�"ʉ�b�83�������vn��v�kl���z��p�־w��E�����@���������w6j��<���Q݋`�%/����?�:�h�Ӿ�nK���fz��d�qݳ�lp����Ci�n[�^v��հ�Vz ��P߰���;��n/x���I"�B�R2N���(@��I�h<|}�������ե|����`�j�2��,�M�>��<ji�ǣ^�j�tF�>��,j�?�E�m� ����#IH��{I$+��]�\�^t`OW���Ƕi?{z�ڰ�ֺ�=}(5�uȞ�7��Þ�6m�$0N�*��?�؞}Zr�a��{�JǺ����'}_ĺ�����E�G�g���PWS��)QM�|b�����3�y��|�<�{���i�r!�*}���@ՊQF�S��Ant%�x4����ب1�b/����7����Wk�}˲��.�Y]�����)��	w�z”�M����u�X:���*��]�ES�Ѩ����]�������;�l��jP�~�CD��c� v�������q��a�,�81�eWu�\��3]�WG����<,�;��!+Er�K�n�~�k�vlW����#$������"Kf��z}_]ɋ��q2D�o
+�#�Vx�E�gu'�U�ײH�s��r�`�>���n�U/��lS*J�J�b�n5����.�$!<)���d��Gpt9�?���j��G��O�⏺e*��
lx������cZ�U��U�mh����\_~����ׯ��>��2����	���
UVw��)�ym 5�K���ek]y�t9��8TEx	_,뎱�$yV�e�����=�5�u��;ш�#>��Y_�	"��*�����k��Ǿ���@֎%�ͷrVú�%�E>�`����
+c��D���pF#�/�&|K�u�Z�C��?�Ӎ��ĸ�9��|_.J�x��Q<�K^��m\��u����Y�A�C^��8�
+y�%����F�-�/-�m�,�ʓT���N?����c�] �z�>\u`�^z^�~�i�:/��pk�igp��G����,q��d)@�k�u��:!Y
=��0G�K��޷2��f��$���|���<	�7�3E�+���L�d�g�N='*�0R�s�B	��Cr��'{�f��Z��m✸koݵ�]�+ٽ�ּ���]�_��}[�����8F
+[s|V)�w�y�:ȉMO��}�̝o�F�uz�}h�*D�}L�M���f�[}��Օ��o��̱{��_ܕ�l1%R'>!�ba��*$���Uxd�w�����my43s4ڊt��N:P�D�W2%�lV���)�*��q��EO�r���L}
���,O����l*Ģ�'ˤi
+b�ʢ`�A�t(һ��M\�`K���m�D��e;�jV �ۛl�~ש�&[J��R�+d
+]��Ӄ��&@�B���x}h(\��࿸n
+?
+endstream
+endobj
+571 0 obj
+<<
+/Type /Page
+/Contents 572 0 R
+/Resources 570 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+/Annots [ 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 577 0 R 561 0 R 578 0 R 562 0 R 563 0 R 564 0 R 565 0 R ]
+>>
+endobj
+555 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 432.46 215.371 444.38]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea5f42ad42c6bb71627b5ce91d4c410985) >>
+>>
+endobj
+556 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 416.553 237.789 428.472]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea792b0fbeffceea19513cc0bd31ce7ef7) >>
+>>
+endobj
+557 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 400.956 208.084 412.876]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfeab9d6e7e5bb1c5f99d339a649d588b3cc) >>
+>>
+endobj
+558 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 385.049 178.4 396.968]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+559 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 369.452 142.64 381.372]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) >>
+>>
+endobj
+560 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 353.545 275.302 365.465]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+577 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 339.996 162.026 351.915]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+561 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 324.399 275.302 336.319]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea1c0eee38a61b05c5239c871f9cdc85a4) >>
+>>
+endobj
+578 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 310.85 132.32 322.77]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea1c0eee38a61b05c5239c871f9cdc85a4) >>
+>>
+endobj
+562 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 294.67 253.575 306.59]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea9fe6dbe27991e3f9f1a444c40b30af3d) >>
+>>
+endobj
+563 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [35.168 278.49 213.549 290.409]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea1aac5358fbe12702647de81cacd6d062) >>
+>>
+endobj
+564 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.891 203.604 307.126 217.365]
+/A << /S /GoTo /D (structbsec__output__t_ac4e7ef20f713075472bc953efb13957f) >>
+>>
+endobj
+565 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.486 62.194 222.391 74.698]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+573 0 obj
+<<
+/D [571 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+574 0 obj
+<<
+/D [571 0 R /XYZ 29.788 651.283 null]
+>>
+endobj
+575 0 obj
+<<
+/D [571 0 R /XYZ 29.788 550.741 null]
+>>
+endobj
+29 0 obj
+<<
+/D [571 0 R /XYZ 29.788 535.188 null]
+>>
+endobj
+576 0 obj
+<<
+/D [571 0 R /XYZ 29.788 464.237 null]
+>>
+endobj
+579 0 obj
+<<
+/D [571 0 R /XYZ 420.936 206.667 null]
+>>
+endobj
+33 0 obj
+<<
+/D [571 0 R /XYZ 29.788 179.642 null]
+>>
+endobj
+580 0 obj
+<<
+/D [571 0 R /XYZ 29.788 139.98 null]
+>>
+endobj
+37 0 obj
+<<
+/D [571 0 R /XYZ 29.788 139.98 null]
+>>
+endobj
+581 0 obj
+<<
+/D [571 0 R /XYZ 269.297 65.258 null]
+>>
+endobj
+570 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+595 0 obj
+<<
+/Length 2032      
+/Filter /FlateDecode
+>>
+stream
+xڥXYs�6~ׯ`���!�x��^[ޤ6���T���"��9䘇�����p��ey�4"��}��7~aަ;��ƣ��3�x�/�PO����y��$�k�ww���_B
+�Z�!��$���r�sދy�M��eBDʼ|�R�p)֒N=Gq"�	#/N��k�Z��8��4��aE��Z��^��匄4�4-{�4Bg���]�m��ie�7�Y�h�d$J��,�.J��)�4~֪Y�qx�2++*Ck�<a�x�֙e�ɯ/6J&aHXi�77g�WJ�Tıws���I�ũ=����i�|{�8�U�5m���?o~:{w�0�	i"<NR�4��?�I�ȟ<
+�r����49t�ʻ^�@B�d�0��A�DXm�S����dDx�VF\�����ǺW�6�˦���CY(c�K��'4c$��k�!I�QH�b�`y D����Zeպj��zh���Yc�O��H���px@FaC��o�ZZB��I���n�z�طͽ�߼��.��+��Tg���2��W���>�؆N�n��]��˶��B;H�#i,�;#@���Y��1��Rj�a
Cx���N�4��Uz1Icj�4:H"2b&]����OL����Kp�zF(��u�D��1��a_�s�����r��*)~��HAz���l�[]Yo�2��s���|
+\�7�\����
A�߂���%⾽�rG[��ա��u�6ea���c��KV�G	a�3~̷��[gU�d�:�n�|3�cT�}�Ι=�g��<o�¹ �"�Y�"����ޢ����C����\*��x*�]�����E�w�;I��$��z��́O�G�6Չ�@:0�ڲ)�Q'b��™����y����G��;���׾��}��De��W����'�/M?p}�U&��>[u"���{�XZ���Q�X�����h���6��Pv�[e7FoT�P����1�F�Yg��^�>����W��ꇶ��t<�c�Zy��D��z�S}�$�\f��C�"_�vh�+��	��j��i*\p/�)D���{�1I�Ō#�g�œ�`?v󔠽Gf 	u!F�S=2�r|U���Q���jn��BLߗ��ΙD�Swg��Ʃ��i��'������W��ؘp�u])����K�J;�uPv����J'A~]v��W`;?X(4ja�Ϧ.�{���5��<���'��)��-%d���]��삺!�^�W�[z%�����(�g��;z�1�AY�E-
i�}�����y�6�XGh	('�7dL���1aF��Fa���xO�oݟ���@���:��ے���"V
+ŘR\����b_ev�Q(\����>��˱���,wX�Y��=�-��dby�n,���ηmS����������L3�<����v��T�_/}7q'�휯������z5��p �����ݔ1�ѯ��ܠ��2c���������f�����K�0J7�@�۽B2�eSO�ͣvʪUu%"�u��a�4G���%��Zd�<�����ʼn���g���c�(�Ř����!����E�Y4��+Z�E��~�۬�(���C٣=:���K=ijY�o�|�U��[բr���5
+���,QB��
-0����?)M��K:ᘰ�"�9"9����B`=4%a/��˩�lq9E�����76���H����	׾����Ms�AM��4
+���"i��q�Y챔��~���N�y'�ѡ�"�<͎?���I���7F�0�Ɍ��[��Y��+�`���G�	�0���k�C�[m��6�MC
+n�)���&�Q��r�����SȠ���1�Q�r����8Mӷ��h�w�yk�d0����T���`�#����
+�_4>��\|(«���n�n:�Q�%�k݈4�-7۾skW�.t�F᭺fDl2w#ԯY�dEe�o��2)�߾j��jJ}1�(�UQ��@Dߖ�Âc�)6hU���j�lM�,��Ick��j�W�x��������A+�USc…�w��:�|u��!j�D~"�������q
+endstream
+endobj
+594 0 obj
+<<
+/Type /Page
+/Contents 595 0 R
+/Resources 593 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+/Annots [ 566 0 R 597 0 R 567 0 R 568 0 R 569 0 R ]
+>>
+endobj
+592 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 924
+/Height 679
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/SMask 600 0 R
+/Length 26176     
+/Filter /FlateDecode
+>>
+stream
+x���ϯ$g��y�,�z��HH�`�b�^�`��^�@Bb�^|�Y�Z-�$�`��n1-!�߯��[�ֵm\��r���QȦc�uoU�}�C������ֱ""##ofƍ�|�uT�ʊ�_��O�8�y���h��������@�Կ~�J������0L�����*V�荷��>z��?����}㹿��g���.Do��r鋗�~�K��3�^=y�bn]�����̀��y�;�x�����S���'���on�������4����;w���뇷y'1����/$g������*�`�I����So����G�~�_c�~e��[��r��~~�}_x�M��G~��\����`c
흻�z�E�H�7>������Z��6�d��䀡��<q���
4�q���ϯ�CbJEl-���C���^<QC+����M��l��MܾsW�1�NQX+U���$i��WY 1�
+W:��&RX'o�1����tGo���� I+Ĩ�៾����	����������Ǿ�O����ƒ�7�f{Ĵ�77o)�����Ol�<b��^���`ڞ��abf��i������<��v|⻿�i����M�{�GL;>��O���=�G��y���1���J�������V����B��������������<�<-���i��i��O+O��O+O��xZ!xZ����
+�����{���v;������_�ݻv+>�ǟy�|=���k�OO��O�s|���l}�6�R�[w�_~#�I}��WWOފ��|�n�b���y6���V�iX���ON5�dځ���'��>�J��8��i�O,O����i��������f�����\��%��\�Ӗ��
+is�=m�gzKe�S����C�a���+�i��iWɛ�t�v8�Ezg����$g;P��d\���jڽx{z1�Ɗ�MG�ebC��XI�3�=��б�������������]m$3��@�����is	D�Kc�zI@z=���c��i#oY���h��<�<-O��O�O<��Ivq�/WOު?s{�(Mf�2E�@Z��<m=�{�(͝�δ�dGgy���K���Ïtw>�dt��3��Le�i��������y�()s׹���i�j���R�d>?�g:�D����#�ai����T|Q�-kŠ�Z�Rgyڴ�(	(e�:�=,S�Kz�e�sO[�.�#���v?��_��-Io	�6��z�s�b�����Ӧ5�w�^������x�xP^qG�k�A��$k��OiP�~�cg#V����+�����W���Y�.~���J�F>Ҝ�͎�2�,gJ���̟B,��O'!�?
+b���Ff%��J�L�_�=O��F�i��)s��h��JcAB�2��kh�=m�t��&ӕ[�r���Ӗ��H+Y�8����+���Z��Ζ5��[�Q��xڼ����yn>����C�15@� �~e.4|W�o���L��z��X{�;�Ͳ�Q��X�0w������x����UZ\.�m��C:�0�y���!-g{��y(O��O��Υ]ڴ&+��ȑ���r�5�\�!]-��c3՜^Ԭ��_������+��ZS�_�(r�Hc�O��6��6��u�'�ljeTX�<��K=m�}
+��%�R�F?���i�{�n�-��i#wZ�wU�6���o��8�io���:K<-�����
S�ؠ ��\�T���'���vk�b�¡eO;�[l�����M�DUì�vO��|�`���tk{=m�������Mk���qr�z��;�ǻ��[W�����i���Ѹ��찻���픕�����k�4�-l��m����'c�K���Ґ/T(��>�X�����-���`��������F��J����A�2q���{�{p=���q2��>����Ӟa>ܖ�^��?��R{Pڶ����Tޘv`V�D��BK߃��mYm�?l��ƒ����?m�d����[�f�<���O���H����������v��p[lg���,����W�U#Vڶ�փ�Y�6��F{�^�}b��T_yڼ�����zGO[/<��i����#V))$�չS�����'�֟?�s�G�/=��wӶ�/r������|@t��������Y��`��S�b��Xx ��6�G[[:$����iw�O�o^���i���b5��A5B
+����p:��{���P�o򴂧��.�N����s��ฬ�����V�r�����l���jKg�{�cRxZ��.�l���j�rL
+O�9��y��=�:<�f�����C�O�=g�X��fY+����ꄏ�Ӟ��P�����-�@�U�X퓚-���E����	���LU<���K�V*���lY��	�g�r�'�i��zaO5�`��Wm�D�Z��X<-O�g��"g�ظT��}���l��b%��w�V��Փ���FC��K'o�}7�y��W���/��?�������^O�JR���w%�߳�L������w��[w�j�:�L,O{e	qP��H�"���u�I�ND�bځ(��*���zz��D*+)�*�<Օݨ/0볘��}�����$� U��l����=m2H�k$GT��DeJ��<X6r��J�R��2i��6���,O���Xᢞ�~P�
V�p���`�'�<Qi�������3Y!����H����G��u�R�����W�l���&����s���$�n';��������f�����RX��F��8;���X ^O�̎.�k�ڭYEi��ZL;+I�DJ��^�R{�v;Ҥi%qy���Wr����L�{+��ȋ擐v)m:��/�Tr�q�˩u��XK�֑�-�=��i�؍��i����<����Ù.��A�j���j����ӆ;�n�����]�D�ƩL���}a�JU�[O��ʙ���+	��|�,O[���Q�ߒ��Tm����Y9�2w]ݼ��;~��ϮLۖ�\�,&�i��l�"���j;8��kc���έ�$c�Jr2�X��Ƨ��^4۰�b+�Y���X�eƈU�c�VZ�s����o�v�K)K��X�$�����;��:��h�,��i�"���j�i%4|O����ig՗���F.79��c��\����kZm�	I��斧U�����]U��3�]���i�=R�2�=:-T��{��/�˫��.Y�G��*4��.kc���&gO������Ӟmb���QBp�z�ȯ�G�é��1�|F��-��q���i���6�������d-�i�qn?��z�M��J�����ᵝ��2�m2�q�=cY�֏G�{�n�tnz{<o�Q��t��?�u.E����_��A~X��?��by=���p9��uc��:7}M�<+Kmc�Jڴ�rCQm[���CN��}ǢZ#{.6ȍ����`�=�R����f���=��i�ڟ����ꅸi+aɲ-�S����N[��ʑ�eޥ.�����e���bu���U?\����u�s�A���<��x�2�5��kJ��-=ۘ����j{�2�XrA��O�5�G�I���cɒ�+١�Dqv��<b��Y=c��̆����2cW�L�Ӣ�c������;y�W�1be�ڹ������u?Fr�[�7�<�Ǒ	1O+a���o��ˀ�V��{Z	[��Hҳ���C��
+1UO+a�2��w���.y��
+1O+a�bz������o�����
+���V��0��B����]]��=�!�b\1kB�h;�ڭ;�9�Ҝac<��-������3�{"O+�--y���1�F���-��n������{{�;����b�n6�̖	s��i��s'���O�N\�;&����ҳ�7�PoPI�𴢟����'�(G�8����c�������u2�X+&S�p�z��/��i�@<퇿����'P.���LO�+l�$l�����o�9��B�}p�O��S���15j�Il�s�Ν	�ˤ�M��e���6/SY��)tۏ"���'q2�'*�9p7]]��#/��ܽ<�n|�%�G��K'�-)�l��iþ��T�nt7��>�����`!v���Wo���ں߳��&�-J2'�I���1=W(�qsVH����߇�T+�d�n�B9�i�Qd[k(��~�����t�ѕ����w/�i��-٦�o��ic�z����+)6O��aG�`El]�2�_�Y��
��G�]�)��a�?	s��I�%Y�l䒱��E�[¡e?�+���?��S�4�J�![��h�C�|<N�޵[�ڴ@z�|z&-gP�&��Ϯ8-�V�=�N돌hzc�[�(F"4�3�.2�ӛ=m^&�fΔֽh��#�{;w[��̚bc�SoL�Ӿ��U���X��k��#(����6��$gi�<Y�k]�d�kH���xY���!��2mX�ga��U��Jn9��� ��^�S�die�󮆗��X��3PI�����i+%�s�u��vg�����l-����aנ<m���<�N�2�^7��gk7�w��2���>T^�͋�d/�9�;�Y��J�v�qXa��r�ƣk��h �x�����9z��Ĥ���&g������c"�i��z��P��o��G��K�/>��'W�Za�}��isUC�ߑ8M���yڹ��i��
v�;�sф��K��h�@N�S��o��ƹ�i[\VT����s�$�鯪��������<D�����QY�R���V<�;O^oL�ٞ������N�Y���ױ�n���1�iKf5�J�=�I�*C�UO[֋�-ڇ3x���X C�[O{������G�XO������s�{�x!L���n��nh�,�vw�zk[y߃�j5�_s߃hUZV�����<H?7qͣ���ٻv+�=�e�f��Z~�zڴ|ً5��t�{pO��rӦ��v��-�6g���FO{����i����?m��<����O�������7�L��쟏�m�O�ح��a�)�������-�ힶ�Cl�n���g����^g�Ӷxڜ
�VsV5Ţ�i�k��]��}σ���a���p�w�M
��FW@[�]ٳ��F��ϖy���aS��Y����	+g��y��Gl�}�R{���0O�Uy
+E�s�;�Q�#��4�M�;w�vO[~��c�Z��x�Qx\.���ƒ��6�t���H{���j��x��A�;ZϞV��bt�Kvo;���:0�_����M7�;#-��w�V��D�+�Tm2�e�o��68>6�Qc�f��Mew�mz�ӊ�E��v�NT�v��VO��(���1��Ń�!Sh��b�ʕM��G'��i��"���c�JJ�|Oy-�lI��f ��::�v�G9�o�2g����5R��f:������@O+D?�68��5�"����&������i�X�����c�����&ihO�Ў�I���9���!z���hȃj�q
�ak`Z쌮	���@���97Ѕ�|�iO�${�(��l�f�0���R+���wۧ�m+���7yZ!z��&l������q�<����
*}xZR�;�X�iO�BmW������n
+�0F�����A2yƭs���i�8Ol\Ӻ��Ж��K�^�u,��G<����ۼciW[���Ю<=[������iO�&vo��ng���l-����iqО�����^0O{�޽t��ȣ���iWN���4��
7���Ѭ
+ZC#����J�i?���1���#;髞���K�őL:v�������.]ҶP�Y��E�{������yĴ#�p;/O{��=��;!bk��]����u�I�fO�Г/�<b�������}Ot<����������;cp���}�E�v�U����/^�yĴ�kO�r����?�ek��ک���j}o���z��#��G��#��[����]�ޠ�v��=��#U������S��~�b$i��i�}�2�:���u�̸?.�i���{�GL5���C(<�^��=�Z�@S�r�R��ޠ�iw��3Z�x {��|��#����/��x{���=�:[�`��U�4��3%i�j���K?���
+J�����N9m�8���5��Y��o߹���l�@bJ�/_8y��@F��_�;�l-�l:�C{�o��t2l������)�v��Yu���|�:���f��.�>�Ә�>��1Bb��_�/�(<�{�!��.:�6��#C���������~��c�Oo���{#2���������F��em���M����L���M_�T4�ڣ�gk/(B���q��nȃ�F��.R��ĨK�ܽ7^C\<t#�=��Vdh�\op��ڨOo<�M��_^���W��<(lԆ6x�������֎��
+��`�Q��F�"����z�g�3���
+_��o�m�ݻw'`h��`k`��v�`R㲭M����?}�c�x�wC��~�b�r�La��Ў豔[�L��_�?��	/�m�77o��W>����O{yt����Y�J���M_���K_��U�?������)l%�B�d7&�X���YW�3���9�u��e†�][;�f;�E������l� =/-��st���o�dp�S��h������!*�&�011fa��s���_`m�%���ϥ�kC�ă���|:�0�aέp�K���t����9^�c�0�aZs��8_ںv�X�Z�h0����E�������g���h5�A1��>�عknj9���iokZ�C���s0\�Z�@�C��΅Ӧ��-�,hkW�u���>������v���`k��%ƠZ`J�N�Qԅ	�L�A���4ӕ���)Y�20��f����G=��g�8�����ȣ������Hߺ�����O��ǟy���[uق,A���$�ɛw��W?���\1���w�ͭߧo)	Yb@�|�,c(ʙ��}�n�Ϳ~x�*��$�����.d�e!�26���ݻ����O>����J1���W�����OLQ��eA����3�|��W���g\�b����~�x��A�� ��L�s��CO����������'�	�,YƦ��fQr@9�4�3Ox��,YƦ)g|Ǿ��.:1��]�dY���z����b-1���nz��,YƆ(g�����ӊI��
+.9�e!�26!�_��B�~��bY�,c����7���-&���荷�'ȲC���2d�X4����dY��ɋ�I�Ŵ�c�x�x�,A�1�'\Go������ܼmHȲd�<�}�����=����ȲdO3ԈM����2�Y�,c����'\Yb�����xb,������fY���re��LJ�!��,�/��%׬ ������Gw]Yb�xb,���/_p��
�ecİ��� �B�eO!�'@�� � �BO�,�O!�'Ȳd�S�	�e!�2��� �B�eO!�'�2Yd �BO�e!�2��� �B�eO!�'@�� � �BO�e!�20R����ϴ3/ݸ�	W�^K��$h��iYF$��z���x����ѫ'o=�̫�����n:����n�I����~���>�QO���,c��3��fK�����M��t���񡴟��� ��O+Y�F�g�iC{�ne/��S�ċ�/M�Ӷ��!x�.'|b5�dY�����[w���|����o�<-�xZ��#��],Vzq�ڭ�ϴ���J�8���+�IW
+D���X^O}��K��ż�9�\�B��*K,��5�������\����G�]���Y�'v2�7{ţ>��I��d�>�Ey�#HF�t:�y��!����S#� �B����3�Q�۴{�(�P.�֖-eIZU�z�,�^����+��o_���o�X7���V�c����a)W�i�;��w��E?5�	�,OP<K����K'�>�J��V<m���H�-�L�D�/����J�/�WzK��
˔V��{�������W���}��ֳy�t���m�����ɕ̱��{>Wg�=�ub���g&o�˧F<A���i���g<I�O��!xv��������2�g��2�_=��_��w��V��x�J���k�����Mg)NK�8ayO[��؁�	�]~"s?5�	�,O_<��Ln-l[n�U�X����9I�H�a������堺�Ӯ��V��\���SٱJ�z��f�@w�Ԉ'Ȳ<-0"�^<_���۶F�8UO�s�����ic%<-0%O[��<W��t�!��x&���K's/�FO��0�c��<m�ʣ�s�������T�Z��ӞW�6�
��O=�BR�\�������R��?HR��GBÉ���i��HV�4?ޚu���|c}�m�0�=w�l�S��R��Ii�_��Ğ��8Ǧ�<-6�ӆ�5~��ʧ���D��,=)ӏ-��i���d��
���=?Y�b�\�:���O��S�iA��I#4�ۘ^\yӼ0T����y�Ʈ2ٝ6�]�q
+�x��@��t�xے����2-c�yZϕD���U���O=�B��s�J߃�<:�O�3�D�6�!��Al+�3�$g$�}rc���f�3��G�/�i�L���zV�i���荐}l����f9���8������ �K�m�������3WrM��y�d�Qi_�J���0���{ڹ�.wA�mmr7���g1ϿS�񮬤�{���\SD������Ӗ��Y�NK�z���������=m�C>�g�������$�����\e�2#F�Q���v��xZ��e����v�O�'�i��V���8,)X�?�����ɮ�}?+�k�fcC��sM��%��L�)/���D�/Z��*����U���q֪<1Vl�R�����+a��i��O�2�1?��r����ug�]>5�d�lU-�s����+y���Чr��5��X�g�uM(/��\M[L����~�b�gR�J�Cz��8-m�J<mZ>�^9��DMv�̞6NŢ�Y�E\��3�;Т���̟i�3-��b�<���	1.UOL^������%��mR���L����iʤu�2�=m�-%���޸�<�b�Ȟ6�d�K�d�����ï(�*gl/7�v)�7�ɜ�Wb�XI�n�>�Nݍ���.SX��||�<-xZ�V��Jd�{;���+'Cg��]�U<�/=^eo+�1�_�U0j��,ewO��+�������P]Y9P��AZ>6T&*�o���,O�>ey�C�Պo�T��qĬ��	繦:N9�g]�4�;�e>�qN�g�<-xZ�V�@Ϟ6���<^i�*��M�{�F�kX��V
+��4Z��j�^X��Ƹ�|��-�2��q���T7�=�������t��2l�'@���O��
+�����2?�ZiGO[�Ӗ��E=mc��\ٱ�6w��Y��ӆ��$j.<h�]��gl���di=�������(i��;[kt���i��i��reѹ{�Y��y���UV2�q�e�A�������=c{�`�;����vV2O�)OJ����Y
+�ћ�
Xv'(W0u6O��^^��ˉ�KO��<6��,�i+)�FO;����#˺P߃\̜��6�O��#~�����Э����Y^�?myY�1Vs�i��aYۧ;�7����{��L�2���+�6қ�Ny�g��v�ev�J#��O�>A�����ŭ����ݧ�l�V��i��"I��S5*gL|���;,z�"��pYΏ�+�*�w�{���m��p+�2�\O�+Ns�7w^m)'�[O[��<�*'��-��i�e�ƈ�.j�z�z�����w �G�3�h�A}4}�ӊ�F�W�fA�z�rz��иک<�'6A�g�ۘ^,����i��=�-Xg�Ϊ�
+h4ou#�XZ��B}��<]���\O;���˟�&[�����Fh�%n<��!�'��r���ӂ�S�X~=�1���<-��S��b��z��dk�I�;�ؒ}*r�3���
+c�������wOe��c/��>��̞�>�ڬ)2ˣ�3�UJd�J�Xʜ�Ι����@:NaY~di���Dod<��isΡT�p�+���xb�dy�2�h�*r*�2��i�Қ����o�r����Z�YZ�$mbQs��>�O�^_ì�l?�x=��Xf�De����޽�?'����}[uO[�|s'"� ��+y���\M��	��!{�J	PY���P�u�X�U)�l,��>�h�}h�����<�-;�xe~2o�ޚ�K��M/9�{������mU<���lnL<A�GZ~�X:�ߔ�i��x��@�\Q_�!�:�ҫ�a�a����>`�pb�l{���~#g؇���n*y
Qh��\e������g�W��x�Y�g%ӻ��{;w[���p�G�	�<�Hr�KvC(���ɋ�i��yږ����~�=�eiʲ�XC��,������	���cll<X�4X��ݬ���gy�ro�l��6��
+A�1FO[p\6s����=w��ԩ}�h��}��.��>t5��d\����W��>���i�fy�E���<�d���uCR��Lf2^��Wـu�jq��>tq}�/%7�	݃�mOK<���ưs�,cDyږ�O�%/�v�.Q���B�3�CGO[Z�xK�FX��m??<-�O��	�#�����N ����1Y�0=m�ֳ�Wî4N>�P��2�Hv߇E=m�@Y�ѥ�v�ci??��޽����-}�s����0
+�ڧ��o����пUe�2�i���}´D߃��/}�����!_�>-_ڰ(x�	�c��}W�s]_��-+is�E��MdZ��J�w��q��{�h߃Y�i�E�iA��9yJ�$_-��i�+|�F�1dO�؟��[i���Z������:7���>�u}��1��:��]U7ȼ�L�-z^s��.ڟ�1%����9�Y�iO�PX�jE�Y��J�.��������х��܇.�/�R�c}"�r"�Y���P��Y~z��#n�s�U��E�������≍��)k�<%�#.�,��#�l_�b������Uͺ�'j)�$?��x0�5����$��dBl(NE�����ò8��0c��	([f�l������N��������j��/?��%	�ѐeL,! �rG1#[R�U
c!��Yn�а�g6>�)gQV���+f!O[y����B�}��i���� 惊��Y�n�
+��=i������{�_o�PJo��Cn\m��xZ�Bt�,��&!���'�ri�Z&4�?(I�U6�No,��˙
+��JǪ��=H�*6��6�!1: 6�����MeN��Z�_����_%Q��_���+�X��U����P���V�*���Y���Y�N���~@j��
+�}8m}F3�	�ܽA���]�i˶0�O^U=mcaC�e�^:-۪��2
+8�(�̔9������ؽ��مf�l<��9ˮ2-�N�����e�}l=�U58ut�{����	
�R�j�C+�Mg�ś�y�Xe=��}*���cCѐ'g���jtOk+���l���Ӷ�m4>�_�!���xZ�\���i��d�eB��A��%�����������nzg�P9O��!��i�4�b�T;����Y�—�xb3e�>�a����ݻv+9��c���.�j�l�}磊#N]Z�ˤ��*�]��2O⹁�v��yZ��M��	
+�x��J/�(�<O�-��+1xy�˖�*Q�Zٓؽ鮔"G�.���q������4O���yZ�X�,ϝа2!`�o�|W�g;w7mQ�0��so�M�2�`e�y*���5j}�.��}������j:��ϴ@�,B�sc�؍�I}�*�L��5�[��Ԑ�s8��q^���|@qy�P��vԞv%v���i�u���	
��KXË��Y͆�����l������*ִ�� �e<��f��Ac��83q2��PYo`���l��	�q�]>�\��|������i�'�r����	
��3O�I��si{)f�PC��i�L>8��!�cU��l%��>�V:Q���鴢�,?�2CeZ�<����P��C���#�i�Ӯj���������]fԍ������w!(�f���Y�ʛB]���c8w�����s��\O;w���.�yZ`sR
B�el�x.9�`�q��gJ�7wz��C�ʃ�.���N���8�����]�1���1;�����Ν���0.�xZ!�2&)�KN;X:�l����;�`.��tbc���\x�'�T��ZI��ʦ��w�ǰ�p�<����y���2ge�=��H���x<�d"�M;X:�����N/����4Z��i�(��~�W��Sm�Jx�e�n��P��R�W��i��Y�x*��&��O+Y�T�s�i����W��ܩXMڢc�f-�>
+,��b�˞�ݧn������s��i���3�T��O+YƄ�s�iK�T���VL��1\�=�=�<-��
+A�A<*�]r��|ED˾�֖-k����g�ǰ�]�b�.�|��m���<�d�&���v0Wo��pr1���+�?���vք�g����=�2��B��]�y���;ge�s�X=-��
+A�1a�\ɴ�����M���s߃���}�3.�� ���U�x��c�xV�C�i.�*c�9���`��ܞW����,c�⹒i+G�י�;�`��4\Y�����s���[9��~��֟�<�����p�'��
+A�1I�\~���Qԟ��D��bzǘG,�?���	�{�f����󈥽J[I.4�X}ù�U�N�{��G��H���.ZL<A���i�)�Y�,�x
+A<�,Y��xdY��)�Y�,�S�	�,Y��xdY��)�Ȳd�S�	�,Y���dY��)�Ȳd�S�	�e!�2���dY�OA<�'Ȳd�S�	�e!�2�ƽ{��w�#��������mO�y>�/����<-��x~��ϻ���#�v�i1Y��7�s͊�LJ�!�X�x��?ﻲ���o�i�xb,������f�����~�,c���Г/�����s?�L<A��N|���d�����UW��||��W�'Ȳd�$j����������[#�,A�1��'��+��p|��#@<A�� ˘�x~s���/1�x��/{��,Y��s��y�_������Go�M<12Y�M�Y���s|�'���dY��
��w�~�+�.41����/��y�0�e!�26G?�m�5ך�X�`���-�e!�26��������&&_���nO�e!�26M??��C��@|�{{w�ޣ� �B�el�~&���?}����r�o��[ �B�el&��K���֝��('Ȳd��!����MCn������dY�O�B?���?=����-F���K?�m􇡜��,�}����[dY�O��޽K�q�6q��[���}�9W�`|����3��ah�1��6Yd8��&~s��מz�s?�������Gw���u�����^���a�6����OSҀ,�eA���Z�(0��Y�2����_W�\����6A��2�20X.]z}��zo���9��@���y���?r΁sdw��_O{�����K����3��K~��X�@/\���������=���̥K�;�������i�sd��7l�?c�s�@���g���9�����sŴ����y�Ȟ�p^�uŴ����{���
�{�e.���>�7���v��XL��+��<�t}>����e*�o�}�f�M�s�@��|��D8�˼���m���;��R��}���1?]��s���N���Ĉ��l�����|�
+
+�8/��y���@��+Ό���M��	�o8�@?Z���5=����-��U�Ā�^��ڤ'�9����z}�x4	��N�W�_���s��
���Fήv^��ں��o��`c<m��i}�����5����C���9�@\���b��s����xZ���Z�<�`��+�{05Ok��`��}<-0�뚧��?}�ݹ���gK��{~��Ο��G������טּ<-�` ������
'X��^�0�����kJG�`ݿR���
+����i��k�����6�����������ڞ����UM����Q�;F��S�����`0\��ϥK�;��4.�<-�`H����>��kb��H1-�`����'X��(I��\OkP	�>���q�'O��}𺉇�)\��e����<�����e���賝���4<���
'�0(���cz\`��O���w��	�`x��}}�qs���}zڭ+W�s��������t�{��k��l��5�&0����������pi`��:y
+O�����U����:<���������v^��:���<-�`��G�����^'s�y7�E��`�LU��6�n��i�K�u�g��$b��a�ggK���Z~��Xo1��0�3=.0zOk1��z����|	�Y
+�2}&y�m`�l]��Q�������+�ϒx�K��<�&�:�=8Һ����[{��N8���W;>��z���[����i�<�I��upQ;>������w=�VI��xZ��z�����=�ߤ���D�D`�ׯ����D�X��{�v��S�{L�=�VK��C�������������iyZ���������[��M�c�{�i�����5��i�F�
+'�����O��O��i�yZ��z�����+e�����xZ������O��O�����xZ������h�9�������՟����iyZ��O��<-��<-������iyZ��Oۣ��9��#���GN8���=���<-0VO�sx�	��<-�O{������;�i�v~�����xx�GO�������k��=����7F�0\vyZ`��������{�A��.���&�`�V=0Z.����$vxZ`��I{��9�`���>�!�i���&Ջ���=����j1�5���x��+�>���,�i�f��1byZ`�p�V����x��9�������@���[[��p`����
�,�%y0��i�+z���N8�`�\���F@�����i/�&�����
���Q�g���#'�0Ļa�����k��M���x�J�0�<��O��ݐ��M�c�T��i�ex��{�#�L���iT����ޱ�q�N�#�/����k���l�����@ `�����UO�$}��tx�	�����������W�L�l]��k���|�r������i�g;/������M�$b�4�e����Xϵ|��`s��<-0.�9�<-�``�x^	L����q�|4�������D;/��`غr��q%���k���r�l$�6�ҜX3��	��`0w�>��4@X��<���������|E�k���D��xH#/`J�R�>�����������i����k�mw@`ݞ��>��	��.���p���:��뷵=����C ݏ����B;���=m��]+(��>����=y�>�yi}��½��|��@?�U53������'��r]�:�������9��Iw�]�h��B������5���97�㣁~~�^��k?��#��p�\�7��@�(����)�Fu(+���C�/Vm���<������=�Z���p>l\�1�Q$@�<E��p~���r�K�����q����N}��������į��>g^p��·~�K�����׷�\q��=��u��1`��܀z�01�@���z���8O��D�Jj���i{��]��΃��t?]��q��5{��8�+}�WO��u�9��F�Ŵ��6��>]j���s1-O���~]���tos�N�i�!���t�u�A�Se�b����*��1�{gZy`�~�jr�臾;���9_������x�;���*�Γ��7����G�"w/�p΁�{��ݿ�^�}�_�_?&�2YY�����\YN]� ��YZd3Ks���~~��'_������/����|�?��}F�֥�^����7�~���o�**?��L%Y*ϳ�l��_�⏯�o�+W0�7���?ӝ����A�� �@VΓ7�|�'���_?���g���ol��޽{Wf�ӓ��b�e12Y��,a��4���?n���ۮJ1����/<�}�{��A�� ��X�L_�;w�}��W\�b�����Kw�3�E
�,Y�f*�ɛw>��=�u|⻿:z�-i�e!�26��V�E9�d�SZ�dY��
T��5�lKL)z�EC�0^Y��.YS�eCư��[��?n������g^��Y�,c�▓7�N+&9�6*��'Ȳ����2֗
��O~�B��������l@�� �؄l����G�ń�~�\�r �B�eL;`��|kD�	�,Y���Ӥ�b����l{��,Yƴ��77o����c��7��Y�,c��w�[?���������\ �B�eL8!�Г/������?$� �B�eLX<���]Yb���o?O<1Y��2� �����7��W�؜�.|_�
d8�x~�W�؄ ��,�L+6G���J��kJO�,A�A<� ��Y�,�x
+A<�,�2@<� � �B�eO!�'@�� � �BO�,A�A<� � �dY�e�x
+A<A�� � �BO�,A�A<� ��Y�,�x
+A<A�� ����x�,A�A<� ��Y�,�x
+A<�,Y��x�,A��)�Y�,�x
+A<�,Y��xdY��)�Y�,�S�	�,Y��xdY��9������|�t�SA<���H��NK���Q*���x�o"	��ϼ�Ӷħ{��_�=�F�{_�u�ͷ�����mm��F�h,v�����64���>��I:�X �%�s��"��iI�~|�Zy�VTqz���?�u��޵[��}����
���i#��%�z�����KR��lIr��xڤ獫M/��O<A�'fh�t4^���M�ӆ��w
+�օ�azڊX=�̫aT6��<�p����+o.qJ"�_LR/��൳]�؁���`�_B��>,��&��iO�t���P����)yڹw
+����H>��vx��{�Y��x8XO�$�Y��v?�x���%���J�?�<�0e동������<-O�����$_ˏ?�jؘ��K��eV}fYs��"���"��d������G�O�����J�̏���+�$v8�3?�k,-k?��Ϝ��@��i�q��4��3jwWr/#��i��i�IY��]����B^��/��z�T���Vy1��֓w/m�G�]/�<�*��xZ`y�p}e�d,��e{gc�UYpո����
+I�J��^�U��c�Fw�.\O�]����i뵩�w�Ə/j*��q&� g�e�'xڡE\�Id��"&�U��"��7������v���݋,
+OK�1RO[����1Q�O��x1���W򻲶�$��I��O�P������g^g�<��؊�LkN2��ı������J�жx�^Z���u�L/�-F6�Ң�i��>gyO��$�;z�$�񖴪���z�Fr�=�x���E�K�]�Nf���5F��e��dyz�B���K����?���U��M!��x%n+��J<mܿ�j��=�օ�az����q-W�2���S��O�|�74˺ט�KJRYC}`~i>��7&i++�ݘ�S]t�C��e�FO[����|u�O�ʬr�����O;w�h�2e�daV߃Y�o�~S�uV�	M�%G�=m����XyZ���z�J�j�Ͳ4y�"�;��s{Ϩp��wzc r��,���6]�\�~�=l?����*cˣ�FO����/C.ʭ���m:���f��6�ӖR��+�_�J��׋���Ky��,���i+��dc�=�8�s���k�:�A-S�Ͽ�+F�Dҕ�Ғ���ig�]l����p��Ӗ���_�J���f��&B<A�70��Y�5�>O�Py?OK���.�i�yi�X�E}��wV5B�Oβ�]<m�!2ճĪ>�!?�O/Fa��u{�R��	������J��#E��@�'Yr�.���ժ{�vM�">�y������<-x�Y�*�t���6��c�@{��,6��z���J*���VRӘ���q e�s����5��O[�A<A�'���WQ[�I�o����7��z�x�6K�B�J���yZ���c߃�K��jZ,�_X�����5H+	��e%mZO)Di=e��<Ru��:����� |ZV�����?���q��&������Lr:?9����i�=mn�Q�G�^VG<A��T=:��"�}�0�ң �I��2�a9��ܛBc߃p�-όB�����Uf!O��<��?<���������q
y�YE��K��𵥤���Х|t������✼͖5�;[咹��V�i)�s���Ne�o{I[E�g�6����c�<����rWn]��V$���p���u�N���J��i�ï�yZ>��is�؎�Uz]&��_~{}�X���k#��9�kUai
���L|�6����j\��+����`}�6�E�s�镲�N,Vw�y�<1P�u�͍x�,�=[[�oR�hP�}��,�]n
+y�IZ;�#�w5nC��Ӗ���,�x
+A<A�������EP�eO!�'Ȳ�i�2@<� � ˂�%� �BO�,�,�x
+A<�,Y��x�,A��1��xU}fE���E<A�Y�͌�_:��b=h���V��,���i�-��x?��I���m�ڹ�yZ��i�+m��=���D$s�]�O\i��ڭ;�g]�iA<yڡyژO�}>��Ehx��8�I�r&��i��f�*풞6���S���O�i���a�K�V6�ڬ�<-��N#zPڞo<-�'O�Ӗ�_�	����l�<-���<-YO���Ww�YL�V�Rzt����d�~|�Z�w9x��]&^��q���z�&�U\��;�I�S{�'︕����<��ȋ�4Z}�|��d��3�>Uz�إ�Y��.z�<-pY�IWw)�qIf�H֟��Ww�g]c�.�v}h<���lӆb?����ۚ�\mHzZ&?rjQ�/Wރ��b*�O[����ϴ��m�崷FyoӶ������>H�����6_��z�+L,_�}�,P)�̒Xҽ*�������Z�/�-4�+�YJ�~�Ei�Ԣ�g8����y�Y)��t���i��zڊ֥�:�������)3��R��\}��i�=�ok:���f);�����o1=m}����p�g{[�C��=��u��e�q��E����jү��b�&-Y��_�˧���Tg� %_��]��i��]"V����N��r���ab�2�{�>y�I��'bi�Jn6-SI����3G� i��J�^f֓�xc��<O����9{�$h���O��ˤHҗ��Х,�����,2y�J޲E:z����ώ���CΫ
��+Ɏ�K�A�ic���|��w��Jz�����u� ��(�3<�3�{�]�[�� YO[�""+��6.�Y�0K|�Z+�P�^=1�������<_������ڇ����O�|�s�p8���5O�Ӗ?�#]Y^�ɚ��4^�I��
[\��]s�����<��ok:��jgKt���ݓ$=m�[H��r��6�>H���6>�G��"�^�L�\泈5T*�V5���;}y�O"]w����{^l��'J�$�#0���-���02i-�L�GꑪM�S>Y���\}�^O;�Ϊ�ok:��T�2�6?�K�6Y�.�x���xڹ���C�r����2x�F騗�'��OO�zd����.�y���I�撼h�{����v���e�?��_��<-0"O��Qi�P/�lч!xڅy�6��{S�P"	ӛ�����i�1O�r��8�\���V�5����>=mE��j�Y�v�g8*��gL<-0^O��7J��vGWׇX��<m������i���ϖj��{��Ϩ��m?o<-x�3��F
O�ޖ�^y���	_���-��7��}^��v��Y�9v�����p%���0FOէ-�*
+A+�������eqW������ۚ�O[.p.�v�g�r�]���� YO[�W_�c�2�t��rs���7����&G�BY�#:���bR�4XG߃�ƴKe%m�Z�DH����C�6���D���'��즘�Ė��؟6^ԟ��ͣAsO�(�M�O�c�<�=kcy��Շ�<�>�V�E��ok:�.����Gt/+ic�Vo�v�g4�����.�A����{�Z���ެe��ac��	�ƾ|�����mlXq��H�!o<������g�q����)����:��@��v����T/�,�wчzs�����g�}[�!��F�m�8E��ڃ.�Q�C�{޺��26�Ӧk-��͚G,�W3U#�}��ɶ:�#�GO�H��yl^f�y�����c�"��g��8�Z������@��T�d�f��O�q��rf�<uTT���}�>d]��8v|��q���r�ר�-GZ>��:�1b�Q�C�2�d�� Y�&{Zя�[���QF��xZ�,A�A<�X<mL4���,��&��Y<-@<��z�\pU�z�xdY��9��ޖ^�+l�z��e�}��i�'@�� � �<��xZ�	�e!�2��� �B�eO!�'@�Y&� �BO�e!�2@<�Ȳd�S�	�e!�2��� ˂,�S�	�,Y�$��xdY��)�Ȳd�S�	�eA��)�Y�,�x
+A<�,Y��xdY��)�Ȳ ����x�,A�A<� ��Y�,�x
+A<�,Y��x�,�ZY���dY����޽{����l�����}_x&}��wޅ�������K׬�i�E��o��.+1��ȣ�<-�"���E׬�|����d��Ooϕ%&�|�≱����Yӏ����e�V<z�EW��||����dY���g�8 �X�x~��W\Yb���O_&�>Q^H�Y� ��G�\Yb��̕��x�,A�1�T�G�uq�M�`�-Ȳd�����Oח�p<�䋲 �B�eL^<s������KLL5~���'ȲdrBL �	Ȳd&�$��������X�����z�G���e!�$�o�e�5'�>{͵&&���=�Y�,cs�3�����\nb2��_��$��,߽{�,���Qם��>��_����o������Y�,c���荷觘�r�o��[ �B�el�ӮH�m\���V��Y�,c���ǟy����YW��p�}@9A�� �@2v��[�����K��ܶ�lbz�C�Ȳ�,�E�1[��?��$�_�vy��_?��d3��1�dY��Khb��7��˟���'{�#�����t办�}_x&}��70}ӷ�+�o�~�M�e�,�20���,U�����e`���_Tr��J�	�e�e��f�����‡`DMBw��(�Mdk�>[�g������֕+>��������1[�����sX�ya���`�S
�����0ZC����
��l�>Ack`>�����^�?���;i�������hh���ƅ@�����0"��9����'��Iw���F=�8y��`��xϸ0�hb���v�ڕ��p~��
��i-C���>�6D[+����%1�F�0�ݽ����ڍ�hFQj:�
�K��0���x[�����ۉG�v���S�K�T���s��f�#g�
���l� �{�Әn��be��x������|�3O|��������ÿ�[��\����?�/��ϼz�䭊����n\f
��a��p[;DI�I19[[f�N޼�_����^�������7�~r�δ����a���������{:���m����������ۼ�r|����M_��՝��=P�a&iݒ��̜6�����	��d	��=�[/�|���%1���W����M��Z����4��u~g�:��}�ʕQ�x����_}��a���⑟�.�!�Z�v/_�����Jl��(0{����5�w��{��Y#1���.����=mq0�_�Z�XIT�Z[� Ʀ���D�C+&�y�`�E9�Ÿ㲹�`���!���g�E����W�!1�"�������k}�`ʭ����Nh�dE���^<QC+�����U l]�2�v�-������z�Y���}�.bz���v����T-����.?;��N�I����UHL�a�
+v����G0��������)��7�XALu:��7���=��[��0�l������JҊ���?}y����'ᐛ�0���ֶ�#.^����c/p>b��o<7@O{ab���[�z�8��Dym��6�#���y{P#�^o���[�P��,���}b���ӎ�=��@R�ï7`h��=Cl�gBxZ��M�-w���t�����l����CO��'x1���wu�v��-���K�C8�t�����v��iLJ�9GO;�z����UM7v��ƹxڏ<�����y��=8�/냡�x�ؽ|cw���}����s;��][W��s]�!C{�����g���3�g�5��iO����H4'��-��*[{u,O�w���i����ں����Em�Z�{c2���9a��
+�v�\��� ��Fͻ)	[�V𴛛��_�i���`���_S.e]�7xZ��n`z6jh��`�d<���$UxZ��n\z���������{#��<a��
+�v�ҳI��q�B�����5��-O+xڳq���cL����e����2-��vg��񴂧=���'��
���l�#�C�?��M�V��<m�	�3F7��L.����u���(��׷�\�i�X��g��&��������\��yZ!��i�Zl���l0��5�g�i�/.���iO��x�
�no��.�`:����xs2;�<g�iO;��D\<�A��N�k����^�ح%O+x�:�Qo��i�����|_�re�`Ķ6��<g��
+�����껣-98�Q���y���x��v����-O+x��Έ���\zD���m���'l��7>��iO����v�x����a��������w�l����b�=��|+S����mk�N�֞>��3
+�bc=�w�Y���U@�X��>����	��>v���<��@O��I�����[Yh��p�����V�{:O�=��_�3���n�>���o?��__=y+m�ͷ樂���g�.ޝ�����7�%#���x�֝�_:��Ww��i��|����tf�Y�����+4
7�����BN������i��'o�`���?�jZ���-������f��i������@<m���3�	��&p8�6��s�]�i���6��1Ϣ;vO��ѧ^�ǿ�<�z����=<��i���6����޵[��nc�7߾ˤ��W�n9�Jk�b?��_��n��Ƈ��[���JZU�6�[�H+/k*����_igҚ[
+n���V��N�R��y��!^O�;�ޘ��v#N`��QC��Uo�����^��ӞW�6��JIj�ҋ6.�(�\}�0~-�6��l�˷��]ݪ�[��M�VK�ЬZ�O�w/o�q���+��r\���C��?<���v_���o��\Wy��=m2��u�y���x%�pY�ȝ�V�G�]�6r���̯���\k,_�ƕG��^�LZ����M���6�3\n�s�k��������d�
+ߞv2���<��3��x%~A��J���m������v�����V����3��c�{P�X�5��e�g�a����Y+�V��Y�-��p�6�.���ږefy�2����aMsD�6�<��<��Aya�{��Q��TC.� ����eo$�&��+9��FV�ן—�ɿU�o1����������ӚӒeB��,O�|�޵[���>��VV;��D���2q��:�xK�r󴫘�Zz� a�)�y@Vi޺x�d+堽y�Y��-��^�;LO;�6c�T��$l7��6��rӺ�G8�dk���K��i�N�1Vi�x�_�V}�q�i�}�8̹�������H�nn߃���㿒]�ز�p�e�B��Vc���z�XCe���6�N+�;<�ӆ
�T��m����F��K=-O�����݃#R	����XOO���<V+�}�b��6���(d��L���t+��2��=�c��}�гX v�R{�DmjZ '�'{�h��O۽�O���������i��k�YMT�eUɆ��Y��J��-ԟ6�V�rIB��m�O�F�^!�k'�������ҳ��9a;O�]V���y�'�J�.Ll�or��Ul��?/�����ګ�|[��m�gi�ʉƒ)�i�� wǭ�ؕ�DK�^�^���"���l�<b<�:zϦ��ҳ����;g;"O+�d<�΁�����ak�����1O+Ħx�������0=.읎�i����=m�u���D�0aΫ��<m?�^<4�-�`#8�R�V�k.�=�������q�\���
+�v�c�v/_%k�����R�V�kj<�������Jx�Y�0D3�zc��~�2�le�ƞ���̱��K'�޹�r����޵[y.��JrK��]�iך�M�/� sZ�p��=�i����	�Jw�g�-#�u{6O��h�������&�\����97���<0O�V+�����,��3���"[��e��<�Wi_Ý&�X�ƛ#-)ֹso��FZy���`�ّ�T�i���?㕴�Y+�6��p�iWާ�7�@�����1Oۛ�͵嬯�d��>����bLt{6O�|r��� �@=K\�'6Zn.��2qt��e�vE�����;�7x�s���z�%>�̫��dA��i���e���jYf����\=y�~��e��@0��Α����v͞6Y��=(��*�f�|�����i#���!-�imO�tR�m��	Q{��u�$���V~�BO��>S���N#��#V)0Ȟ6j�€hS��i�.:���d%�&�$�%��Y	��<m�9v�5��`���ʕeZ~�s=m�V��Qc�3�i�l���Q~	�dA#���3��akyZcg�v}����`Ǘ.�Nv��X�>{Z��Ӯ����_�Mf2�m���ӦH�2��ƒ3��>TƈE�n.�
C���%���v}�6�~$5����ly��ˮ2�W�i���6��e<m9�2,R��R�����iW�iw�Y��Ήw��y��x��$��i�� ���K�8����d�v�N��Ǟ�{���=u����f�8gg#��y�e=mnGP����M22��f�l�6�h�� r�at����1j,�a�'�O������f��]��yڥ�iK�X��f�ƒ3{ڼX��q�Xڟ�g���\�yĖ��GD����sx��Ԗ�����qn�JeB9}�B}*v4��p��zyE��N��6���j���6YY�'��0ޝ]�����i��U����q�ՙ=m�F!��ڭ;i��R�p�{�ne��^����r�J���Z�ӹ��uA�����n�Vl���w����F������1O+6�������iŦyZW=��<�<-���i��i��O+O��xZ�����V����B���������<��i��O+O��xZ!xZ����
+�����V���������<�<-���i��i��i������V����B��������������<�<-���{��G�exO��F�i?���1���#;髞��z����i���y1�H?�xZ����iz�E�GL;>��C���i{����U�GL;���+<-��S%F�\=y��ӎ��[ƈ�0�T�'��+�GL5>������i��������91�x��/+<��`��ٓ7�|���1�x�y���<-��R�B�7����*<��`s<��;w?��mHL)>��'o�1:��������$�?�=Vu�����>��1Bb��_�/6O�����~��c�Oo���{-���ik��>��S$Fmh��X���K�j!�Q�ܹ{�����
g�//��	A���A����\[��?�鑟��tb�+|�'���]w��eh�@��&��x�៾��o<�;���G�~1}9c�0Z��0��&~s��מz�s?������C��0T����W�?���?����U�?����f
+��]�min��p�]Z�����eqq�&6]����V�+�
+endstream
+endobj
+600 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 924
+/Height 679
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 7343      
+/Filter /FlateDecode
+>>
+stream
+x���-P\I߆�#�"�@ b�@D "D���
+��@D ��@ D�@ �UĤ
+1U�w7��~da��10}�w����WߧO��F�dlu���>��ˣ��	v-�[WY��ٞ�12~�՞�I�C;�,��s�������fv;�6"b�G��E�
+YRl0�Xzʹ���-q�8ƚ?���s"�ڛ,9nGxG���%���{�;�)��[-���,IΘG�3�%���o�R��.��o�R����kƲd1��f5�lڹ��f;�l~�0�l���~�,�l^��~�:�lf죟�d�M�dS6!��	ȦlB6e�M�dS6!��	ȦlB6e�Mلl�& ��	ȦlB6e�Mلl�& ��	ȦlB6e�Mلl�& �=������K��k�;��;�@6���I���ٟ��h�-���Y�����2�p8!�ŸZ2i�����iJ6�q��NB�:���l\RY�w����霗͢}�q'z�q��ې͂��E�=�8�b�)��l5#������f��Ζ��v�?GO�Yl�Є���~�����;�,�����u]��l��5�1������2,���;�-����o<l
�f�OiN�e����s�'��Ύ[������q��b���8�[>/�x��g:[���o�j����b�Wc�[�W�y��b���S����s��+��v�\�y��.e����N���ie����ī2v�ȾȦ���i�>6�%��u���8naS���īu����5$��N����Y��uאM]'^���<m�L6u�x��5�]�,˹K��uΆ�&��i/hxxih���]��f�j|������j\6��b\�����hTM٬�vI�3liRW
٬�}�x��B
�l��a���r�;��C�X{ڒ�?hL�O��'
���nmN˲�g6����ۮ�/�nL-��+��F�t:/�4G���e�4,���f�l�j��s��-�!���f�1{Q�:��$�`�LC�.��f��\�+�S���D����59��O6�w_:�~�lX��h��ϲ�D6�k���IM3uf�K����d6��y�!_�$�J�l����g��h.ݖ��
�3a�[�[�l>��߆��%~����tg��7ț�l>��Fc��/^�h�i2|ZA�<�ͮ�l4�K��o}ә$e���W�|!����'�i
5=��/�__���?��K�l4�n������Ƈ�_��?���r6�_χw|5���;�V�Ѽ�����̀l6SŷxXKIj��kᆲ�s^����ݐ͠l6������]���I��d7^Q���<ҹlf��/�O�Bg2�,�v���7���ˁlg���R��O� �!��OΟ�fWZE'l/}�����;�t��nȾ�ͮ��/��I%��f��s����_2��͛0n��A4�������8��8L7�g�
+FNlBu��|b�������N7��+Xk��/�]jwO��{�y��?�����pW‰G�ا��}������O�K7��<s�‰���|nW�L����oR��}��;��D�h�u9��$�kp��^N�7‰?/���g��F��L�$��[��‰��f���';�$9Ͽ���P�Y7F�D�ŋ9F����4�9S���p&O�u͂Z���o�߅S4�s\�ۇ�����-h��S�9�6���k�z�;�E�S�V�"�)6����R�?��=����'�ys0_���+��Ղf�=(��Rr#�ns������s'!�!�NG-}��RB�����������B�S`��[���t2B?*�~�(��=��)pQ%g.���o�UT�Y`��W�;n�_��Xџ�N���D��]׼c�c���Vu}~������[���t��/�Wo�*�/��;�j�-������V���Ը+%^�r۾�����rϟ=ؽ)C�w�9�M�-��~�(i��t:�jo�p�[�=Mc$�� G���5��W�X挏ܫ'��!����w-6r��l�Y_�Dr��(Z\�^=��f}Bޝ\�5��ܫ'���Z�=�""�9��O��]�r;g<c�c/�I���4^%o��ۇg׵�[z}v��:A.����l]eu�f;�y	r#f�8�?'��Gn��$rN�����In�L�$s��mr_GL�s{Z
�.��ҡ��V4�MiR<v6R�&�Q?X���-%�k��p�G��dƜ�F=���=�#��В3;Y���Mr�^��<&�/��Zr��8K���In�Lg�2W�h�5[��ۭ6ɍ��d���?����X�.��
"7jV�W��{�F�v���,n֗���&����<JX�i����wU�l^$,�:~}�	�k�=��	���ח�W_ȥ�>rɥ�>re�>rɥ�>rɥO6ɥ�>rɥO6ɕM��%�>�ȕM�d�\��#�\�d�\��#�\��#W6�#�\��#�\�d�\��#�\�d�\٤�\r飏\٤O6ɥ�>rɥO6ɥ�>rɥ�>re�>rɥ�>rɥO6ɥ�>rɥO6ɕM��%�>�ȕM�d�\��#�\�d�\��#�\�d�\٤�\r飏\٤O6ɥ�>rɥO6ɥ�>rɥ�>re�>rɥ�>rɥO6ɥ�>rɥO6ɕM��%�>�ȕM�d�\��#�\�d�\��#�\��#W6�#�\��#�\�d�\��#�\�d�\٤�\r飏\٤O6ɥ�>rɥO6ɥ�>rɥ�>re�>rɥ�>rɥO6ɥ�>rɥO6ɕM��%�>�ȕM�d�\��#�\�d�\��#�\�d�\٤�\r飏���^'l�]�l��f̜%l��ټHX�M���wR�l%,�,~}�	�۫{6w�{��Մ�m�=��F�D��Zu�&�qs����fݳI���&��V�L���Mr��$Q{���%7r&�7�@4ɍ��$�}k$�Q3r����h�$7n�;����6�ܸY������4��ܸ�H�ɺ�Hr�f)�7��J#)ȍ|X�ΜA{�������u�;r����h#9ȍ����3�$!7r�w�j��~o��Hr��n�\��7Ƽ:��l�LrS�]H���	/�Ҕf�)���"�a1�)}V�`�B
+:�Nx�ѐ�t�N�����:�eB���)���}&����C��#�Ȭ�&�b9�1}P�@6
7Qc�UrR�auB!;"N�)���.�	A����`cA�C��muB+!�iB���y��N"�b�O��g�M��iW�* �(*lO�ĕ]V��U�̪��ɨ���,-u
+`:��s�@�LUE��:!��[B�*S�;��P)!�A'��wSA��
��UC��T*e�Dm5��
+B�m�R��h*�3hY�^䋩 ṮO8+��T��y�M�^��T�`�t�L/r�׬2!A���A牎��rĤ2��L���ʄ\�x�Q�^ ��B�!!׃n*�|1M���Ԫ^�	�E���%oc�42����&�^�^ dFmZ���a��_����C���ԕ��+��	=*���;!���+rr`�4�5�W&�$deC������!�({�ԕ3W���,�8Ϋ;׎�E��XiB�PF�	y	9!N��t�€:�/d#�V�'��oV�����M2�d�tzB�Mk�ԅEW�'�ljq_Q7B���}:��_��SV�	����ڒ���'��d��ض ��9��t�mA�	�6��ڶ �M{�T��.F����<^<�#B6�9��܀ݖ=��TF)�Lt�G�,ϹW�y,B�-��R�Rٴ�
+Eش�������}Q��e�Vw�a6?+S�l�+������PЫ���LϲfL��`.��c��ʄX�}6[��|u6d=bB6K�wcT�P���y6G�	�)��M��l�
��;��9�MȦlB6eS6!��	ȦlB6�aO6!�}��MȦlB6eS6!��	Ȧl�n�<T�R�t�6z�M{��e��L��WǙ$�Ӳ��l.*
+r^к2�&^����l.+
+�\�r|V?�O��l��R
�P�-eB6d���F�ؕ�RX��[f��L��w�H�P�#�,�{�
+�G��w3�L�P�UB�}�T����w�J(�u@6��T�����<�۪ԅˀl�W&��]@˺V���	eBn�Z֩2u!d�{F����m-ߔ�6o�7,��R��
+�)r�в6��!|Q&�櫧~I��y�'-�d֦=�Ӏ�5�L]�i=!dW����1�ٴ�^б��,�v=���l@��qP�1eBK�ԕo5�S&�d.�]]*SWB68�yY�e�4!�7�*r���	��	9ӉA�ˑ��҄��w�L�ɍy�҄��g9����GQ=�7+���*'䂿ez�S�vTΚo(*`�"
+*g'�U�(SO8�(�Ǚ/�+`�"
+*�.�U-(���U�1��<�N�2���(#*f2$����%B���L��R@��W�90Q��	���]�^d]Q1��X	![8�E8�Z*a"d�>�N��I���E�>��N�iڊ���'�g�ݛqP�ceB0!�O*S���P)���L�ܔ���	��z^��TJT�BH�Q��BV�6�	�|1H���]>RG(��Se�Ly?�La4��*#h�xZ��THsZR� FC��	�r�M6�Na�\��� �r݂�4B	���ST6�<W�@B>�̦�	U
7��)���L�UuBU�M�5�t,��ɨj�iWP8Wvr���>gϴ7^q�鬠pVB
+�T4�\V�`&
8��M��񎱶{|2�������irɍ��������$|m/��:���y+�d�1��Y'xx.�13��R�Gr��� 7�U�N��iE�ܘ����^J�$7�k�����zNr��tR��eɌ5;��N�ӳ��Hd���r#�0K�DNU$7�U��1IIlje��r����N4"7ff�TI`:�ܨ�IV_���F�M��8��ܘ���e���$7j��W�p�5"����gs7a�58�[��j���8a�����=a}�?��2a��f�b���l',7�__F_}!�>��%�>�ȕM��%�>��%�>�$�>��%�>�$W6�#�\��#W6�Mr飏\r�Mr飏\r飏\٤�\r飏\r�Mr飏\r�Mre�>rɥ�>re�>�$�>��%�>�$�>��%�>�ȕM��%�>��%�>�$�>��%�>�$W6�#�\��#W6�Mr飏\r�Mr飏\r�Mre�>rɥ�>re�>�$�>��%�>�$�>��%�>�ȕM��%�>��%�>�$�>��%�>�$W6�#�\��#W6�Mr飏\r�Mr飏\r飏\٤�\r飏\r�Mr飏\r�Mre�>rɥ�>re�>�$�>��%�>�$�>��%�>�ȕM��%�>��%�>�$�>��%�>�$W6�#�\��#W6�Mr飏\r�Mr飏\r�Mre�>r�}5n�ש{6d3f��w]�l^%,�6~}G	�;�{6O��=~}�	�;�{6S�{���	��Z�l��3�	뛭{6ɍ��d���Mr�f�p���5s��[�6ɵ�#W��g�ܸie�I���@4���1�I�;k$�Q3�N�^g2�l�� 7f擓��-6������6��j$Cz���%w/��A3�l���Ӄ5�h�;�Lu����ܘ�<Ie~}���F��E�>4��ܸi.���Ͷ}��l$
+��30�u��~g@u�O��4��\��_Q�>c%��]%����H8��c�}Z4^
+g�|��w;�f�0z/��D�aR�bb�#����W�G5���L8���6�,6v�3F��j;j*Zl4so#�R�7���W�堪��P�t<�ߖ����nGU-F�r�!���<ͽ��m�L��>vQ�J������u�6�]�n�NT�k8�v�ΌF+yWʲ�f��g�V�/��ٮ4c���4�xɽ���MW�J���'սS���|U���W���Foh������jD��`f^=rr��e�O�ى�T����Ec)���@㎜�A��Q��&t�N'�4��N[��?�������h%K��ϲ�#�s�]5`��]W�K��Ҋ�c�Tn���l����j�p���R�����s�8f�vL��c��[�`�&K�ۑ�r�
+�g��5�0Q�����
I޳^t�t`7ʹ�.γBc��N�W���h
+g�p�N�Ki^[����D�p>,��;Y���w�� �(��k�A�V���}D��~&�(�Ӝ3�W�f�.��ܕh�\8��s-�dɒ/5��gES8��v�|��f3�νbﳢ)��ٻ9�����~��gES8�hˡ�0�l���}V4���N�]����޾ϊ�p>���N߸N7�Y����3ٷo�)���w:k!���fW�<��ʗ'	���`�;�ٜ͒*Z�K�k&��i���$�e��\/z�٩Sa��l�Ɉl���y�_>�dh���S6��4�}�v��f�x6&��Y��tmj�~�?�6e3g6Kt�ٚƚ:��:e��N�����G�]]�N��/ﶊ?;4��-�/Z��͏%�|k�^��^�h���e3 ��%~�|D#M��o%����|!�e^g-k&�F��x5'�]�Y�u��+�5�e��Ѩl>��R��Yۥ��3Y������'�Y�u6���41\�{�ۏ���l6�K=�
+����1�W�M����/�\(y�ހf���u�5���l�#���r?���I�̵K���	����'%�=�A�o�J��~0*��1zP�g�G5G���ҧWvvG����N��lj�WVJ7���ᤳ�n��oX��SL^�n�)gs��Ox���=��}ϲ�  o��Ytc�BF��x�vWJ�Ϣ?Yl��Y�%c��ʜy�E_��5�z�(�/Z��z��+gJH��Jt�u��u��ʉ+o���iB׉0.�42�:����b�t�:M�:���Y���L��^=G6��+��T)7vϢ"����9��w�����=�)��mr�xx��G��4$x���%͖F/����ͳ���nG�
+�^wC<z�衜X7�q�&zO鋲����xZN���wS@x=�D.�+��S���b��`��,^�*/'s��Y����uAs�7�x�tz�}v�)�x�7�k1|*��ƙx�Y!�l���d�/�?�&s^�@���&�r���WL���e;�P@�1�����͚O�џ~J9��&��Ǥ�M�!��	ȦlB6e�Mلl�& ��	ȦlB6e�Mلl�& ��	�& ��	ȦlB6e�Mلl�& ��	ȦlB6e�M�D���M�/I�b�������3���l�����Ϭ���M���L�����knR�潋�`�ٗ�q��f&�l.p�>�$�h�{�E�3�f6g�G߳�b4���g�6�h�GyGLwR�fg�uD�b��R2��	iu�[�#�z���5՘3�	�ƚ�l�� ��3����L��s[%�w���do�F=��yn��𳱛��͖`���_:
+endstream
+endobj
+566 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [526.874 692.208 567.119 704.712]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+597 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 678.659 136.095 691.163]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+567 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 651.561 136.862 664.064]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+568 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.144 651.561 546.214 664.064]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+569 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [85.756 638.012 197.82 650.515]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+596 0 obj
+<<
+/D [594 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+41 0 obj
+<<
+/D [594 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+598 0 obj
+<<
+/D [594 0 R /XYZ 297.956 214.77 null]
+>>
+endobj
+599 0 obj
+<<
+/D [594 0 R /XYZ 524.558 63.19 null]
+>>
+endobj
+593 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R /Im5 592 0 R >>
+/ProcSet [ /PDF /Text /ImageC /ImageI ]
+>>
+endobj
+604 0 obj
+<<
+/Length 1941      
+/Filter /FlateDecode
+>>
+stream
+x��X��6��@�_z�[s�m[ �61p���%��U�=v�@���!)Y�ڻݤ�6!M����pF���0�kWّ�ܭ�a0~����Dф1KN#�H��v���[�B���)NC�,�n�3�g1�l��b*F��Bʕ\J�6⤈(!�bF�(�a��4�Q9����e��T��/+*�P�dj��
0�?y[��ו}ٌkf��]��0��������*'ыV��/̊�Y����<�b�|��3��__m8(AY"�������J&h"�����'4�c%6��|���m���y{u��M�����?�ޭ'�0�£8��(��o�a�g�S9y0�$)�ǩ
Tp�b�W�
*AO�Վ\��pw��B�#�0��X~�:�kҮ�+�p��6�O/���$��D)��BB*cA�PP���� ���?�E����Ǿ���͋]���L_�pr�΁Y��24@�$d}8�"�^��1�-��9�^W�Ս�c����Ǭ���^�'���;}ün���Pt{;k���z���ڞ������G��M�����l��	I��D>Nh��ݛ�-���.��޿�^��!�LY��u��{0WI�n$���)tebŽN���7��V����C�����+#
+�wH�F����Ȝ�XP�@P��p���j��GԭS�=���ۮ��v��a��3����M;�x�m�f�k���T�vvK��Y�b��`��9�q�_m�c��u��ɾ���r}_d���"��zo�����`1w��������q���j����ǣ8���Kw�;�+ۧ��ڍt����3/�c���tyWg9R2>FqxNҦ�7}Q�V�0����#�^���U<�<�^����8溄;�`��������h�P��@�����bӤ��rb��E�v��c`JwiQap
��Q�xe\^���.du��W¯秽c*D�5�a�]xs[�e�0�@�k��P��þ0Ri=Ĥ���	sg�ݴ��.%����^��4�0F/<���P��p��
+H�ã*����`n������	HJ��! 0�w)*w�1<����D�� aQ���^΢/j,�[ �%��I �����*��F�Pb4��P�@���u�8~8~f�[�fMq���)�e��\@	Ȑ�A���Z�-M��������s���7z���w�� �C�3�X*0s��9���	&<
T\��������>��
+m(����[�^���)p��C��K:��>�F�Wú{�1Y��d��f�fC"���>��WrY !����CK�x�^D8����ÓL�W�<�^y.��CDg��Y�N�S}U�^���X�4������sG)E��|0���ڸo�H���U$�Cd�l���y�W4Km(}�P����ǫ����w��~�����>p������u��J4me�i%����`C�6���Ƈ7*���R�o#�#��=��W�&7?��C�P�ؘ#��������x�I81�glF�^ħGB������y��'���� ���S�R��^@�fa	���DVW���sV�
+<���'���#(�m�� �aa5�"7���_��f…�ٸ��?�_n/����hZ0����6~��^)�qĦxe��M�ف|�WǓt_\‰АE���M�Ƒ4�_��`�h�K��k�h�ؿ�L�|����$���oJ�OuB�ɧ:�)����G��؆�J1��P�v�)v{l���e!hy��F����]��[Ÿiu����۴4���e]t&y��F�:�q)�4~רv��DtM��'<ik�
<�c�l��rޱբ������M��/�|kۿf`�{T`���uӹZ�:�>�r+x��;�P�ς�����
+endstream
+endobj
+603 0 obj
+<<
+/Type /Page
+/Contents 604 0 R
+/Resources 602 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+>>
+endobj
+605 0 obj
+<<
+/D [603 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+45 0 obj
+<<
+/D [603 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+606 0 obj
+<<
+/D [603 0 R /XYZ 305.067 642.616 null]
+>>
+endobj
+49 0 obj
+<<
+/D [603 0 R /XYZ 29.788 622.006 null]
+>>
+endobj
+607 0 obj
+<<
+/D [603 0 R /XYZ 29.788 551.055 null]
+>>
+endobj
+602 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+615 0 obj
+<<
+/Length 3103      
+/Filter /FlateDecode
+>>
+stream
+x��Z[oܶ~���$#R7�oi�.��6vч�8�J��Z����[��g���8I]��ND�:C~3�
�/���ĝmw�;[�w�\�����j|'J#�r��P�$��V9�?����"=�rX$X��Q/��Z�����I$Y�r'߯`"
+�3�{��� a<��Drq�'�z�&$K�
+q�B���S;g'}�?���ܳ��tR�T���ΫD=/��j�S˳zE��2�������IY�4yR�Ip��%��tP��u��gt
��u2[���V��A�x����]�x
��K�$q����DJ'I��
+�7����w��H�{��i{�_�~�����LF�LaO�����}����6U8G�u����S9�sX x$�o����B�`�u�5�}sJ�L$|�������Mݫm��eScś�,�Q�s���$�}�HK�Y((�d�(����!3o{u�6�^O���+�����7l��g��	$�\
�8��%��U����V]��Rw7�ˢ�/�н�����~���ЪNչ�����j�����f��>�*�+�w���q��CV�Eg�I�
+�-�mEK�6���]Yo٥�	��އ����<"0�c� t���0�5p�Y�����f�JѳD5�S�J���5}�ϡ�Σa3����c����4uv���[�ZO�i� @s����u��3.#���f[�:�Y�{�u��ϲ.���`ýّH���7/�gk��`�,��`yp#a�d�~G�ԪV�ʮ��*���.��tD�%*�l���E�`WX��XE�U�RuÊ�d@'���.�y
�&o�Z�=��S�g���2o��7Ue�
��>���/�O�ם9>h�j,X�BwCM��i�3�
V[^<n��m:c���m�e�/�ɪ"�O�C%�xL���›\u�j�i/�uVu�P�E�Bє8S�BE��l�S��i8�vZ�R��L&���m�`O?��.���vơ��$@��V�AڇK��Usث��:U?�mSO�d�����U	��)sE��v�ŘB�m��ݛ3����!:��oSl���_��P֍��4��� D����3N}�뺷�,���A�p!��OI��%���9KW��f��4Y[�"�
�3�	h���#v�j(ᷩ=3����{�F@�Pe�5k�`��B�ݺ�;���%�$d	�	!Cߴef��[��D��.�Si�i�}���O�͍dP� )�=B����rm��4���^��T?�Hǎ����5�l�}>m���8�d�ܖ�[�<YR�Z��5�)�8i��L�
+!�U��.3�Hr�尩�h�u�db`:4>"��p8@Ǘ)���C����j��^F�aSPC�ͧ�>��G�@2��L�l�~��pZ,NTW�B&���������m�oN	4_$�G�7l>4o��K�W�a�Os�!�$��ی��H�e����;�B~C��5�%�[qZp�3o-3oOjY'͝�d[�R�v�-
�ٌf�t��j?� !�Nn�t�զ�/6�'g�QR���Q�ي�	`gI���!����I��k�ǝ 
 ��N���/���&C�s8$.�j���\2@�r�CVV�h��L���Z�\�@	R�j}��@!~x��v��u�[��n�5d]���pPc/N�[����3HR��݊�ό���BI��9���)�7��7%�eEE؝��[�PCF�\��%����~��ؖh4d�A�G�AE:���6�(,��nI�C"WaS���(}&!~-�ɞ"@2f����fH��DS������^�CpB/K�#L(�I	��y�5KV>K�S�~�>�p�~�*�
+tOr���A��l�ʨ�R@a2��ق6��?$3;�Br/ƚѼ�^?�u�X4Jh�@S�
�$dU��F��G���f|<�Y����6a)k����L��8�O)A�C�/��NY�J14��Ԃar��zŦ�iY���
 ;Ѯ��]!�F��B��OYP�~����SX�N��j�>�+v9���X�y�_w�u�kp������h��f��5{u�4��s(���i#8m��v��?�28p�]�2u�D�0G1,����t[��^�6�/,�@)�ӭ�76��qF�?޻��~��%q�7E��=F�nF�Rҳ�z���B�:ҭ X`f�i7D���;�[�����}4{����80c��&�r���K�.��U�@:���JGL�-]�^M��昛&�Y���Zy���Ca7u�MS�'����@�BGsP-ڱ.Y;FqK5�$��eE�n��L6����:�
l�?��ʐ��1��i��	]-���:ᔀr-vA�ssxc����]�[�h����Mm��N-y���������H�9P(��%_���&��<��������F�c�{e�6Q9f6˰����U],���}�x�"�y��N���/���7�����d�Р9�6'y�!����l�N����_P�|>q5����ݿp�V���<A���?~�d�� yf�צ�a/F��oO|Z�B���Y���z� �{�P��\!�cWl��M����}���n���/���g��j}m�x�k�3tC�����z��q�WM>ୌ�`(�ח^"t��j(o���3_l����}���՟>���Ҝ)�ʓ���f
%GD,�/��/�l���:a�?~���3�ߨ���NJ
�������?BӅ�����1�?��o��lE���1�¹83�9��d
+::z8�����gz��g2�p2�9�D�ܹ�V��j�7���nc����4��y=~9�N��[=n�n��G8�.��`�4����S�����e�:�p�*���r���	Mԇ�4�?�{�G�xdZ������y/���M�9!Jj~r����	�h��<B��~�6hl/�x�4��Z��uT&/t���6l����kV?��E��.������US��yPU���ͅ�UEII���S�m�fc��
�~�󅷙X�����L=���6=���\�f���]ܠ�i4H{P��R����k�ܚHS��E!�x����b`��^c�
+endstream
+endobj
+614 0 obj
+<<
+/Type /Page
+/Contents 615 0 R
+/Resources 613 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+/Annots [ 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R ]
+>>
+endobj
+608 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [160.043 485.257 200.094 497.76]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://fab-lab.eu/octopus/)>>
+>>
+endobj
+609 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [510.593 471.708 533.919 484.211]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/using-arduino-ide)>>
+>>
+endobj
+610 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [76.072 444.609 109.253 457.113]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://github.com/esp8266/Arduino)>>
+>>
+endobj
+611 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [111.704 389.978 207.551 402.481]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://github.com/BoschSensortec/BME680_driver/releases)>>
+>>
+endobj
+612 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [79.903 357.522 235.74 370.026]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.bosch-sensortec.com/bst/products/all_products/BSEC)>>
+>>
+endobj
+616 0 obj
+<<
+/D [614 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+53 0 obj
+<<
+/D [614 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+617 0 obj
+<<
+/D [614 0 R /XYZ 29.788 648.325 null]
+>>
+endobj
+618 0 obj
+<<
+/D [614 0 R /XYZ 245.013 606.185 null]
+>>
+endobj
+57 0 obj
+<<
+/D [614 0 R /XYZ 29.788 582.541 null]
+>>
+endobj
+620 0 obj
+<<
+/D [614 0 R /XYZ 29.788 411.866 null]
+>>
+endobj
+621 0 obj
+<<
+/D [614 0 R /XYZ 29.788 377.425 null]
+>>
+endobj
+622 0 obj
+<<
+/D [614 0 R /XYZ 467.558 284.213 null]
+>>
+endobj
+61 0 obj
+<<
+/D [614 0 R /XYZ 29.788 260.57 null]
+>>
+endobj
+613 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+626 0 obj
+<<
+/Length 3654      
+/Filter /FlateDecode
+>>
+stream
+xڭks�6�?��&����n^M'i�؝����$Z�E$U>����﷋]P$-YN��$�X`߻x\�|� �Us�;+�wޜ�G��W���N����*�"��:s��~z4�f�4N3FӁ�d�ui�ܯ%D��#{*΢��ZMg:���)yB�NO��'E]�b/��8h��T��O�t�N��'}	��܃��tπ\�-��R�{��cl��/-�0V�H\�8��U�D'�������Z����y�Wu��=�`����q 2��I���ޜ]���KT97wN�xQ;QB��Y:�f�V�b}�Q<��ʦ��lq����g�n����Gq2�q�O���:�w|j�����
��8�C<�XL�S@'���9����!�� &�_� ޖm���6�J���ef�Z{:��S,]��0?�";���t�Px
+���9��4_�A���Q��!�(D-�y�-n��~K��&�*I���&�0	%,��f�jPt�����)R�%��,�O�M:�dԑ�>�:sU��7ْ �L��H�.�㉚u�mxP�i*j����WXTu�-ZB�x������jv���l��㢭�]sH
+Њ�^
+�a
+KX
+�*���Xκ&C��`��yu�!��_�|A`�@���
���`�!
 �|^�H�����+;/��ҙl*���t��.AܗL�%,�0�
��	Ih�@��X��I?dN!F�+E�{Ǭ�M�!��m����@q��3�vB�=i���\�����OB�F���XTh�
+���$��U����/Y�X�ҔRFiȖ�؋j����
5��d^�s��J�4c���˖WK�sWm�YM#˴���tk�� �a�(��!�AXM�5�E� �{RA,��Ã]�0���'�]�i��5k��f~��&���59�Ao�����2f��gimɬ!'�g�������˨�_���G��]U_x�����Eξ.�!D`m�v��&Ĝ	�pvWn�;쀱]����,�1�?|�j��=a�	r@��I��PC����`l�8K]��#��`B�UW�y�21P��u��9�'I[r�)O��wQ�m���izP���L��
+���>��
+嗄ڊG�u�b��S^�mǠy��v�ZO�u�f1�����(��@mb��$�

�;��D��h
瓫��!P�F��?!��	�Y�8�tA��ɕ��;OL�LHM��N(����o�
�����d�h��؋�1c3/�6O7�0@�P(Hc�椑SU$������]��5-�`w[�0�y�(�-c���#��-��Le�6�b������3A��\��(b��v�?����*�g��LE>X�y�
+�)Y�tv{}��ûW��n^ݾ�0�*�7����wܜw�����l���%�l6Y��.�d��dڴi��n�~4��]�2�Vk<q��1Z�!��`Vk�w�lRc�f'���Ac����M��*����Ȗ����U�����MR�����κ�|������_�Y������PmO�*�G��C0���eڦlOPV-��֘��m�-$����16�����5��5��x��>�Z�\�������x�c��e�$*/+-�f��ڎ+�kQ.,�Q\�G��C�j-���L	��͋����v��k�]k|��:��K����
���9n�����ӑ��ӥ3��P�{aS��]V#�2��E*�X��P�g幘�{�yծ�e26�>����N����q�e�|P��0��F���Ѐ����m�L��N-	�w3�� ���sj� �=
lj������N�.��[�1�œ��X�X
��jBJ/�t9�w�F�O�+BHVTc�'MOH=Ƅ���L}����Qb=VW`�)�D���
�ܽ�Iv��5t����@]v��V���p�)�h��s�x�p/�)qgX]�/L(��l�º�����@�쭨B�t�C��pT��3���˶�6�� .E��U����>�
+�FJ�\I�W�%��LXW��p�̚�6�!������*9�Ґ6�A�oc�"ml��"��A�QE�?�f�}0V��kL!�m(�ʮ�j���I�U��oꄔ[��}�>�M7o�t�3H5�=��=|�†4�DP}�IX�uWW���(�*ۻ�i쏵zs�ƺ+�e޲a�������u�9�RZtڰB��iKeƾK�����Ʉ}�8%A�g������Y�Sq"	��������)Z�� ʨ1�p'i�$�5�%�ެm�=����d�&�v��:y�9�ڈ���PJǝ���}^u��QE�=�l,�!�D|�f�&�¸t�+PZn�
���������h�Y��|jR�~��du��6�xC�>=����� "��|��C�[�t:�R���_O$���{!�&�(�D�3�1�,(�el��4:6 .�q��g=�gͫ%�s�.���Z��Ȏm��͹����s<���4!��f��@���0��Z7�0�D}��#���'̧�8��DF���Υz��
+��gح��y"��vD�UdT}�A�j	��x)�8��.{����#ޥ�LE��z�U#�g�/�"�����N��Ii8�=�S}��e/@�U����Slm�c�|QCM
�²1��g�<B&����y�6-�I�;��d]��,R���K~=�!�Fb��~su��*G��Y����.|��4��Y��aAM:z�2�k�l!$�CR�r�#"h�A�7K��I�9���LH�m�J	`��|R�x;
+��Ѣ'SmOq$ ӆcl��$���ٗ�@��:�Y�˲�:Z;�F,��h�6�� e���NgO!��h��ZC<��&Ul6�\�m���Q���X1�z�m�pi*O�`4�ݥ�M����h��ګ?(����8������7��K���B�{�f��ȣ�&
+��ٕ���~������j�%
+b=[�o����k�G�*_Р��L��͈mQ
�͠�俺��ܹl�mb�i��碫?��p±@+�K۠q��m-y��2r���O|zA�y��g[��Yʠ*��\_�ͳUn٦J��eƾ�G�/a�'Cu����Lg�1�T������dC��=��P1���X�=�fT�š���^
J��9c"��w������n�����0w��]��r������j*8�(�6�I��w��e���ft�<��v�F��p}��(������<,q�~��إc:���\!Æ��=�Q(	�������a���aM�X�:�Oi�
+�Щ�ʬo�}�ۘG;��i~�~����'�� =)�M� ��Z��4��:h���a� :��Ipp���%�XƠ����9s'���`�p;��?4���?�⏧_#k������?s�d�����_�G�a{Q8N��Jv��2��"�������cx����Y���|�_��陁�[:�Q.ۋ�7��$�e��ÎG�ܤԃGn�S����mϩ���:_�ۆ��.�H��*Q�*��h��M�̛mդ�:��~�n��r8���*�nу�Y���r�`������'m�N�T+�(��2{�oo��r�j`sV���t���}�5�ɪ���	�@--�K�p�'��@���!��"��}�_�/
+endstream
+endobj
+625 0 obj
+<<
+/Type /Page
+/Contents 626 0 R
+/Resources 624 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 535 0 R
+/Annots [ 623 0 R ]
+>>
+endobj
+623 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.215 442.815 210.71 451.526]
+/A << /S /GoTo /D (group__bsec__interface_ga157748484a31501acfeee3df656adf54) >>
+>>
+endobj
+627 0 obj
+<<
+/D [625 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+628 0 obj
+<<
+/D [625 0 R /XYZ 124.457 641.626 null]
+>>
+endobj
+65 0 obj
+<<
+/D [625 0 R /XYZ 29.788 611.515 null]
+>>
+endobj
+629 0 obj
+<<
+/D [625 0 R /XYZ 247.26 63.19 null]
+>>
+endobj
+624 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F122 619 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+634 0 obj
+<<
+/Length 2884      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�6~ׯ`y_F�H x��[��G�d˶T�'5�B�9䄇'�����F������l�-�8}|胘˻�o��P��փ�Zo���b��z\ˏ}'f̊wB�[�����L�*��d��|�~<]ui���b.ÿ�9"f�z;a�ᾘR:�4�:��0b��8Em�G�4��i�
+�(�_�����4�^��qy����%�z���b�6r��	"1���܊_DqxR��q�qВˈ�\�#Y��Y�)Y�%�M�}���d�y�\�����o��sb��ݽ�c'�"+���w��q�^o�mF�[Y�e�����wߟ]�
�a�W�t!��?�V
+��[.(�[{5u�Ӂ�ʭۡ�Ǚ�\/�>@��'���:6��͜����ׯH����U�deAo�,�J�/�ө'p&@1�'�Y�8"�,;��{�wĹ
Y|'�$�^�iYV�UV���$Ϛ�#IhЫgHC�L��F�ˀ�n��f�Z��[��S,�I�POSҳ���f���_��9[��m�ȡa�f͆f^Ui�z�����Y�S�&�,ǻ��ⳬ��w�Ԏ�\��23SM/+��1`�vf���+䤅u�݁�WD�/�O�Q؎��'8��t�m�wߖ�h6Y}AM��-֛�x�fX7h5M(���-�o�Cc�3�1����z���Rk�Y���\p�ɀ���Zx.��;�aO�
N��l��H��#��8����P�O1�džh3Z�!�}�/�IV���.�g�8f"t*}H�-��#�/
+eO1�]�,��\f)�S˦�=��d��R0d��f���u��x�#��E����4-�
+YZFڬ����[NH��Wǘ�����+ՙ���Zj+|&�'ji����Q��B���Ӥ���NM��kj�Tf�~�s�M�m�Qɞ՛�w�����[��x�O�U���֋߾r��i�(�AQ:�V�}�s-��\m���ȸ��D�T
+ƙ%=+�-�Ϻ'O�q������UA0vOI�AlsE<������9���$�K�IÑi�
2ow��IO�6�<y����">&`��d�6�G�l�]6�'!%�=�P�"�3�V�;�!�����ጺ�c�G��N�Z$HXm�;��)qPg���q��@���:Ћ���1��O�X�9X�o 0@�K�
+T�⚚����$�1������tЛ�F�'�`l�ҷm��u^�]_]��sG��*��C��_R�Is����1�s����¼Jr�.�G=�b� ���d�V`����d	���ʳU�T�c��s&�#Eh�n���=
y��w�^V:J�4jd�]U~�Loa��C)!Cn+=P����b8�!Ds�F�.�@]�4H�E��b��i�L�����Ƿ?\/�_�]/x;���B�,ǽ��U[/�U���;�T�ֹ��pA<�i݀SX�e7r���A���>FGY�{C��U���~B@c�j+��]��mݝ\�������p��e���ȍf����s����U@!/F�dʁi�6|';������H.'G$+�̼����wgڔ�K�:����K7�y=)�ZKF?<0���	&�|����cqR�\ֵqӘ�?E�qՇ�{
4L\I�&ў.Q��0��Z�
h����q�:0r�6*wR���j(����{
Ƞ\�530��/d�ʤ��\�����zg|3o�m�za��c���I)u`P�d�l������-[�t�6��Q��ф1P�÷;H4�!��bJ��1 zctK���1f"FR?�?��pb���i9�!T�
+2x}l6�)�H�T$�x{i�DcUc�ƾx��d�\�=��- 8�D�R|��s��Bg�+Iτ�"A��#X8d��dE�O��"TAK�rÕ������e)��%�f�:oSC��L�O�P��p�|隯M|��������*M��_:��ߨd}��'�`28�a_^�0�����������Fmu��Ӳ ��'���1CD��6}�c���-@O+U��'	v��XP������;3�rOjv�}���O),掏ZTEj�EDT/㳪�DZ]W�M7�6��&}OB�
+
+�Z�3��JE�!���UK(B����G��H�� Z6��Oj;I��%r���hx>:�b�[��t�q0��l-,���5�]�i��5X�7��;��NT#�ɺ��!n��U�*�fS�Әm�o�ٔG5f�?;��%0ˣ��7H�N������Ƀ�$6җ�BY��_G9���|:��(�	_��
�Ì�������Y�aj��zch�ٔ�S�S1�����J:c
+/����8���f�[���SNr`"/�ʋ4�?�i�q��3��p@1��T�{l�>���)���_r���|���_���� ����i�F_������nW���r���*W{p�h��E�꟮�-�
�����J����
����U����~��lp�
+Vu���/���Q���� �	�.���|�4�W��� Xp����\�!4���]��x,�����n쭳#ˬ�� c�������r��Pc����E`�L�͵ufOF��b{�
+��i���D��?���ߠh���V���ځ9qp��{�g��a{��~�V��<\	�VX
cУI��S������9�S�~��F�_a
g�/v�Vb�����:x�?����ś��;@lC��3���4���a�Ժ���&�&ŧ���JUd�W(��t�ջ�N��9����2k}�]��b?m�]W���
+�z�h�l��@�G.L������Y1��/�q���vy��[�G*�<m��D�nw�jt�J�q���}.�ϖ�p|�}<�FK���v�
+endstream
+endobj
+633 0 obj
+<<
+/Type /Page
+/Contents 634 0 R
+/Resources 632 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 631 0 R ]
+>>
+endobj
+631 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.215 505.197 210.71 513.909]
+/A << /S /GoTo /D (group__bsec__interface_ga157748484a31501acfeee3df656adf54) >>
+>>
+endobj
+635 0 obj
+<<
+/D [633 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+69 0 obj
+<<
+/D [633 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+632 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+640 0 obj
+<<
+/Length 2645      
+/Filter /FlateDecode
+>>
+stream
+xڵ�n�8��_!̓<�"u�`�M�x�,&�y�
Z��5���a����*��d����&E�u��G秿3c�8��p���0��0�~��1cF�q;�|������{�G����t�����竎�=w{1���Џl/fFR�����1�k{t���
�0b��8"E-��GHt���8��l��^���븀
q��
+�5ptR���
+H�O��l�c����Dވ-��p#�}/��G��n1Rr�����뮻�W�1^wKF�|z6�@d�6�\�����=%s��C����F�Ƥ��Ը0�TM�9�x�g�l�������ޝ��a��,<�b�i��/�8F
+����
+�@p��5r�l̃�r�G���Ӱ=��jm�:=^����C6c��ݿ������Z�YU��q��R1�\{��E��(�l/r
+��#"�DFR������Z��zW]� ɯ��V\vu�ރ��b����wA���ieM_��ڋ��g����bl��C����6Z��>���f�����N7�H��J�i��>'s@�޹�q2�Xm�1��8���dH>��B�pl{�O$�WM0����HO��T6]�?�I��Z�L�}�ji_����Z�M�5
(y��Db&+����:k%B���`��:�ԩ�m\X���g��L�D�5�_�K6
}��M+�Z�Y���
%㣉�g�.�E1"�t.�	� �DŽ&�����%u�Ȥ*���h�~ޣ6�Y����������g��V%�4��A�ƺ��u'��=c�?mi#3F:Ǧ�͜��uJ���u�<�i��8���%w7:%&�r�L^(�Y�ʿ,v�"M��`�:����M��%�(%=q#�\\�W}6�A0���&7��n�D��^�
���oD����LwZ�zE�lB;��A�cY��Ѕ����|�N�Z��/�j7u��=IEc�ײ��rIIù����ӣ���(�qlX��Nw~�3+
+Y��e!Kl�\��42�<k�CϜ��B|սno�{]�p�*"�Έ2G6�0�<J/�%N<�-�ۃ��-Ǹ��y$�\���$ �TY��%�ޥ��<��h�'x
���?�hfcvK9���<��/`ѱl[-x���l��(�4�54�gG���)e�!��7?�C����� ����%���<���Y�g�C0��u!-NP�6A�Q���L�4L�S0��e�H�L��9뙀�m�;�����N�Z}�4M�����3�bY��ʻ��xRx����A�n"�Ŏ���nld��c�������L��۩A�=�遥̎��هVi�}N
����\��\?4K��j��3�軩
+�n���۬�h��$�IWk_�3�(h
���njB�«p�����:�;BBs[g�80������̬�r�qc�ċ�����&Yg"�����J$�LEo�yU}�C�xe��]��RdS���	�+�96&�C%�,�l��Z�̠SbG�RR���V[	`���If����"-�MWd��u�.<��n�͓ן����CrB�d�R��i�+R[�*�%��UG�Y��U�`Ru��!od9�=Y�� ]4,4(x��o�7�}(���"�M_2�:O���mת2�n�t0���+탞�S⫼�ɴ�^�Max%���Er���ͭ�����,�*I
't����$ѵ�]�M�@��%�G�E��a.�Nm;t�5C����$^B(_��e
E�N�jq3�v�NQ�K�ͽ�{�<��b��p�X�B+	�?]�4#��W�̷�����E?J�.���A��S�3���.L?�(����]B�Q�I�8u�2�q���d
��)���(D����m���:m�)#䁙�
B�i��ޭ���)�TZ��+}��?�C�V�D�6��{z��u�ey�`��r�v�	���D���Q��=���ly�n��4�Y����v�2��IUl����^,�f5���^:�t���O�`�
e����ۮ�j���P�������~���
%��\g��;����Y Y��T���&D
��}g���C���@y�o�]��1�.�����ܘ6*�-��/%v��4������F`{�O�X����W��X�����]f~Æ�oU���Mw�ʢ��d#ʵľ�J/���DY��zq|#�o���"Ltť��템Aj~~���E�&����R�E��;Ndѡ�U!�l�3�E������ !p
������l�XN�˞���yl�&A_� �+zA���_x�
�w�c9�Ž�*�p�/�D���=�{�{�A��#$����r8���r뿘�h�oG@���l֚-�F��������|��Ysz>�o��5��̍�N�q����q?)��갓ˀ*OE-F��5i
B/G����	�[�6!nf`�~Jcei{�v�@J�^{��N�]�=\çg�hm�Z�g��s����mt_{!���"����Z�������#�i�l�F�jAlʿ�y��B���P-!p�]2E��tPi�@q����2P-cos+s}#��.fv�����]l�y6�[u�_���C���r�V_R�p���x�sO�
+�l�Ӊ�:�����
+endstream
+endobj
+639 0 obj
+<<
+/Type /Page
+/Contents 640 0 R
+/Resources 638 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 637 0 R ]
+>>
+endobj
+637 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [53.898 228.11 143.761 236.821]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+641 0 obj
+<<
+/D [639 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+638 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+646 0 obj
+<<
+/Length 3482      
+/Filter /FlateDecode
+>>
+stream
+xڭis�6����	a xt�;�4N�NҤ�:����(H�"UQ�����H���3N�x�M\̮�Sg՜����Wg�á��f|G$�$�:q�H������{����x�`$���s��:���DL��:����Dp�ӱ��.��<t��An�z���$��8�!���)����qF��a7�{0T��P�7�yQ�lj=��1�<˗�$��[Z\�Ϝ�� N��\�	�()�To#_p��~x�����%$�>�q 2��$���gg/A))'IE�l鰄Dq�D�>�����>��l}�(vod�Tu+���g?�]���@(
��d��������A���)�
�
�)��!�3*b���$�:A�VαWׯ�x�"$,�L�\��yx]�rU�m^�z�U�/�b��t�)�}0D���~l�� �H�O��6@�n-k�Ąn�V�Ϋ�^蹦�nA�z~�f�ӕ�^V����Z���~��M��\�s��}W���rQ�g�]k��ͪ�0[�
1O�ʯ�f[H�1J��%KF�FplcF��PƆ+�a�֨�����ZCq�D$�|��[�O~� �_Dƛ��	!�X9x�Aoz��j��m�K)�������v�"mS����Ps���ˊ
+�a����l�1C���vi-5���J�Z�\���d� Z��b~�Lx�M�+q&��/~{�˻��w�fSۇ1�X�D1=�]AC��vQ��r&5߻��O�6��8�6˪+Q�cfv*���9<��;3]Ji!+=��5��f����EQ��r���VnC��B���,�?15��5)�Jۃ]۴^���M�uc׬�t������X��	�AS�ŝ�����BS?��4^)v�nޣ��W�_d��.���� ��뮁M������be�(�=�C��l�P'#���*�>��ؕ��9:���3��w8�5g8�	�~!'U�q�O�$#��eZ�ژ�϶yV�s�aD�C�I�U5odF��0�s���,�jc8���&��T�#/-��7Vj��S�6y�����A[U��t��06���h`�Lb�)���x�q�8�0�R�f���G5g�47��"/?�Z��Y�8�]�L��=x��'q����
+2]���-����l��@�=��,{1�}��?�v��W~	�s�٦Zx���H�ry�c�T�.
+���~B!��8��:��EjT�O,���� {>)f`J�*3���?� �"oe��$.i����2E
+j�>o8���㉙S�O����ۍx��s�Bs����e��)"�`Cz�m"�X�4J�y��ԋ&�u�e��/-
�qJ���ҿ�hũ��|����d���S��H|⛐�BR�uLb X�$��6�a�v0���R�p�[��W�$$�F�-��F���؝�2+���hE���.4�1(�u.�h�b�upva��c�}1�2�D0j,����[O	i<^����BK�r���q�S�f{��3��h�ۼ�5Ɉ,�`����h���U�+!��<������j8�*���} �M8
+Z�"�7{[��P�-�r�~m��#Jf&YxR��x~��
]T;=�;���B������LʞZAgk�}6{���@Mnd����۪�[[ա��y3;����d��@�ݰ��)=���/��g=���,5�������,1	H���R��`5NWKevj��������kSop��C�J��`�`�ͺڙs	5��r�QI�j���i�:����Ӡ:�q�9��@��]���{��2��q���d���|}�����z�G�m<����A�T�}T!�>�j�Ux'P��>*���J��*��
+l9b�ኲ����L�{WTCE�)T��_=�h|U0�*��*&�#��X��CI����L6�?&��!3k�ɫ^�.���}�Z.���l��N^��M�٪�뉊���&`�������<���+p�E�;�e%w�<U���}���=����-d�mg{��K�`�m�E���_��MM����zjZ�z��&9}[�Y�5�.�i?���&�:�(҅���Ynk�Xٮ�����T��b�wFB���j
�18Yopp�Po�+�Ү����,��^�8F���T&�B�[��֌�m�ݤwz�K�v�u�n�jf�Lऽ�!�����ȅ��Ԟ%Ұ���6���tE[��^"��Pa�Ѡ�����&7�#ܼ�ʤ�n�m�������DyCB���R?���M\
Mo��*�+y��
+��h?,��.�
��*WY��!m[��BKU.��*}|�V��*���]��;�r�l?�<��]Z^ݴʝ����&��^��r{�������ɉ��r�X�����j�kq��!Lm�̌�6�iZ�8��GM���kr�ݻ!��n����M�g��E���m���:n�1�j���Z�6����J4�Gt%�$���FV��y��������?��֩o}zx}2���Nǽ�´�6�D��`ٕ���k���C&Q
+�j��C�-�}UA�U�`#�'	u�,�(��n ˷8-ʳ�|-NjkőrE8�
+�KngK��0h�]��F�~�w#b!P��29GmaЏ{zav���|��@|��p�Voo.߾su{}9��5����#v!8��λ�vW���e�0?�Bʭ�`� .|��
hKF����W
+���'���ABJ���������0s�LE�~VZ��>���t��Ѓ�փE����u��1�g֍ɖ"S���_�ae����$�%#�3 ,��&2!��.6F��M��fd�
}��;k,(�}�@V���] K�^=���^J�8�7>�7��Gd�4����qxo��@��#�W�`�����c�YП�C�s8Ȁ'�?�������B�M�@���ux�
�o+�8�3�k�{A��4�VMDŽS�?��}��_7�\;����O��{e�Ug�l�{��w|Qe&�+�n3�5�6b\�{��Wa�{�)����]����j9�O�(rdU�ē:���!��w��wq�����8]{牧go��E/���P�W�P���8��d>�=?�X�4	��9p�i�Pp�����Y�Ń���
+�\�)�2����/�rx'c� 3̜3��w���Bpֿ�����>\?�~������[3��t�cP{�;b�@��8�8�&�zb�ƈ�(�G|z�0D{{��?�^��#������W:C(�苷W�	Ru���bǣ{q����8���6���m(�
�K�Rq���/��~�.�ʾX�����?��No�țmդ�Z���붨��^X��ZB�	A?�r���[�[�u>�k�F;H|JG�f'u�eߗ�/��/}��2�ܰ��3����	H۹���5
a-���~	�Mx��b�����Qg>
+endstream
+endobj
+645 0 obj
+<<
+/Type /Page
+/Contents 646 0 R
+/Resources 644 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 643 0 R ]
+>>
+endobj
+643 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.478 186.253 198.157 194.964]
+/A << /S /GoTo /D (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) >>
+>>
+endobj
+647 0 obj
+<<
+/D [645 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+649 0 obj
+<<
+/D [645 0 R /XYZ 29.788 683.386 null]
+>>
+endobj
+650 0 obj
+<<
+/D [645 0 R /XYZ 29.788 651.837 null]
+>>
+endobj
+651 0 obj
+<<
+/D [645 0 R /XYZ 29.788 606.952 null]
+>>
+endobj
+652 0 obj
+<<
+/D [645 0 R /XYZ 74.046 397.525 null]
+>>
+endobj
+73 0 obj
+<<
+/D [645 0 R /XYZ 29.788 377.594 null]
+>>
+endobj
+653 0 obj
+<<
+/D [645 0 R /XYZ 29.788 51.866 null]
+>>
+endobj
+644 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F29 648 0 R /F122 619 0 R /F33 531 0 R /F30 532 0 R /F44 228 0 R /F32 514 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+671 0 obj
+<<
+/Length 3126      
+/Filter /FlateDecode
+>>
+stream
+xڭis�6���;�#gL���v����i�8Mme�;IFCS��
E*<�����}�Фٙ�E�û�.b��zC�Myb�2^���A��	z,�
]Rj#��7�'�ݙ<(�`�e.#�W͛=���!��_�
�R#�
 �u����
8��	�=�(q)@�&�����@�g;L���ȌI��N�m��M��5%Ў��1����9�:��ɘ"�l�r)��G�˲��	B��Tu����,��e�6��5'hu�Dk����oGH�Mh��O'�A)�MB�����`!���C��be��=��x{j2?�]�̋�ǧ?�\,z�PǕ�!�4��}���lX�Tf�ԝ�8�Fj\�i 6�n�sm����<A�6���Ջ1�����ϐ��Y�7ET%y�/�d�%A��ӗ����!��f�!q�0=�X�F������"�ũ�Ίd��b���l�Ӻ�0D���uA3�S�P"�B�80d[\F�7�Դ:������)��>U���JJ�V�I�4���ٝ�Y^V���q�6�ռ�T������`vSW�<�K��)��L�V9V
ODg���Q��ɐЂc��"�H��#y��QY|��6���-W��Tc�[
����Ӡ��l�KXP�%�c�K�2�|�Wg�e+�g9�c��T��ШE�ge��w)`i~��M�>/�D
+ON�0A�U%;Nc�ُy�LK@`c!�8��`�C$MJ���<Æ��P[{B|<��mͣ
+d�/�Z$����T��A�i�9Ʈ�X!c<�0��"�W�a�EK�[>@�����j,FQ��jB���蹠(�3��X؈^�̢]����^�����uх�.�6R�Ч�1������ZQ��o�4*p
+�Q_,��ڳŖ7��=��$4t:a[HB�uK���(c��%Lz{i��t��\"ߗ����{˵����k;��jy��J������<t�jԽ��5�������fn�sh��E����sb.�P�E��u]	�-��з(z�
pŰ	84�>��J��xg���2���|�-!q<��!Ah)'��&�cP)Nwq��ɩ��w��8FY�nJ/��
+�ò�oʸH��i����Ou$ES��ʪ��
+����������K��(����r�z
+�"�����N}�uy�3���'#:�)�Jv�U��WA�4|���q�ハ��Z��$~��򅐛�K
+������:���,�1�)����_-?'EUG�Z[��~���4�k8*�R�8[N.�	���Am��t��y�EI�%%��$۔��A�>�H���<����O��~����������W$f�of�3ɼ1L�����|
���H��QqD���EY��~49��2����Ꟈ�t-�=im�����Ok��g�<��4��)����7l(�W�_�Q�O���I��q�Nb��bk�����]�W�50	�#1}j��HF+�����b{�x�v���@��-E��K����t�K���/߼�X^�/.��@�ˋ��W���__/�_\��~~��6cL}��q��3���WIu�j��z't��W��}̧HrO�8�(2#�=N���^�qv'~P�s�v	�/d�+�{�F��L���Q8�u�dU�F5-Y�KW-�Դ(��xA�!kƓV�����q�w��m]�B���X���V�m8��諵�;`�YZN �g�d���b�P���J��*W�r��R[���TFD��ɨ,����D�<Hm�B^�0�z�W2q4a���豰��*?��[5�K��6{n�
+�ɔٟ��e�f�[�-�X~��7U��e[�0_[���x	��Tݝ�y��V4I�t��-�Ū� ���6j\}�9���;�ېj٠��ڈ�a�`���6uTD��R+��{�9�)�%�&�qhdUS�HS�_еK�����w2�6Ŷ=�ێ�� D��<�g����l7$�;`ĺ)zܭ����L�f��*�1-[	l��������	�b����&�CœP����S��!q��
+�(��&Ғ����V��%��B�tе���Ȣ��x��v����m��zU!΀
+�#m�AT(�Vp��-lf�e��R�U�]T�r�(�jƾ�JiP���+^	����
+ao-��d;��Y����}E���Z���iWQ��zś:��u�)�e�g��c��E���v#�K�SJX$Q��	a�����$�D��ݫ�&l��M��M�q���bU���w�f�+`�>��om�a�RX���R%&}jE&l�&F�$@qҴ4������VX_���т�{\�K���AB�(���W҅�R@�3��VE��*3?�)����w|��gzt}��TD���j�|�p��d���?y��X	JקE�uVֱ���:�c�,�ˊ.PmH<{�������
i;�S�m�=����}�0�x�&�hX����[��c�.m�����~W���]BU��h-}�G���Al�v5R����-�
F��F}����пǣ���uKw���u�Ң'�U|��'����.o,��ZM�_2���4�Ȼ�doA;d�����z1�5��%�t�d�z��0�F�rj:D�<�gqB���6{UC�������l�Ek_y�&@R���K��!>���rB��������(C~�6�^^x�e��ɛ�s�y�ڲ�"�I3/H��8��C�.$8H�����%��\F{�@��:‘�k. t�wad$>�;���a��W�J�,f��g2�Q���)�Ml�_/�'ˌ�}�*��BC,�?���0ZD�y�p.�L��MR��81��`��[%�7���f8<\���
+Ҭ��kI[{9��0uc�
+�5�f��~;��j��2�9�R?�_��I�QS�6��oZaks�͠n��%F�/3��L�/f�0#���>
wX��A������3{���	�n��	uf��-/�lE� ��
+��!X`Y���
İ2��Qv��WI���(=�����O��Cu����ۮ`�WI%�r��_S��D��F ZJ5ks�E��E�ƃ�I��^'i��h�O��ފ�us�"�V�@ J[ײ�E��d�7�w�#o�Q������Ӗ�~�T�
+endstream
+endobj
+670 0 obj
+<<
+/Type /Page
+/Contents 671 0 R
+/Resources 669 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R ]
+>>
+endobj
+655 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.529 544.141 160.498 552.932]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+656 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.529 525.212 160.498 534.003]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+657 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [53.898 516.074 156.314 524.538]
+/A << /S /GoTo /D (group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) >>
+>>
+endobj
+658 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.349 506.283 302.764 514.859]
+/A << /S /GoTo /D (group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) >>
+>>
+endobj
+659 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [45.529 496.898 135.392 505.609]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+660 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.243 496.898 206.525 505.609]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a06af666972edcebef3302d015f1d56c5) >>
+>>
+endobj
+661 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.874 468.505 206.525 477.216]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+662 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [217.086 468.505 281.843 477.216]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) >>
+>>
+endobj
+663 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [166.874 459.04 214.894 467.751]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) >>
+>>
+endobj
+664 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [53.898 449.823 231.631 457.825]
+/A << /S /GoTo /D (group__bsec__interface_ga6c18af8c9be0813f7d8e3547e58428db) >>
+>>
+endobj
+665 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [83.188 421.182 185.604 429.893]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+666 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.738 309.149 358.003 321.653]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+667 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [98.253 295.6 220.518 308.103]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+668 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.86 295.6 466.962 308.103]
+/A << /S /GoTo /D (index_intguideBSECConfiguration) >>
+>>
+endobj
+672 0 obj
+<<
+/D [670 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+77 0 obj
+<<
+/D [670 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+669 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+683 0 obj
+<<
+/Length 3269      
+/Filter /FlateDecode
+>>
+stream
+xڭio�6����O�’I���b��t�n<A?$���83����������G�$Kq�] �(����\���Ʈ9c��`ƛ3x18<�fx�gE��k[���0�g?=�*��d�h�m�^4ź�<O���h�7�Bˍ��,�s�������w|#��q���&�١�(|�qm���Q�D;���5�=J�'���u�/+uY���XR��zy��Cw��2c�Y�F��Z�7�
Vb\�����i������'����Zq2t�G>��>�|
A�+r��Xo
;��04�H�{�W�WM�?7� \݉���V$翬8{�(�]OFxF`����),�`00�m%h�� �c���P˱�����傜V;ci���9��[v�'Jܽz�t�.[���6�J5��R!��x����8�U*��@���ܶ���p/���[n��Yn@�<TY:��hz��jD�>1�����o�`��)�+�/��PH�BwzV�s�k�~G�=�bIP
��T;RT.�=�h�e���~�q���6u�j�TEѕYB.éo/�r���?g��6b���R<
E��I'8�=����R�;4�n��Ղ��D]wR���Yg����ˇ�[58�]�%���]�
+ھ �x�a}�������q����ZK��i���8���u5Z������=�v��?Ԣih�������o���^�y>��^���+��Ï�k�2iւ�?D3AQ9��<��q�8N�y�\���ȼڣǬ�<�]���}^�Cu��+���=��C�gK��(
+OW�B��B��{��E��5�?(���gU{�A���n�x�S�s:����xw����������{��q~����b������Z1x�E��k�q���Z��L۴q+�~=tR��l'g�1��#��
�6TuY��U%���/�l��������G�U��گm��* )߽�CF.��B��*ԡy9�0���j��]y��Wu�YC��b�:Y�����L���æ����w�;
�L
+���RBD��P���Uux��`�6O8�ĤqS�ǍH�E��M��-w��/+6hw�*�6"����x:�8�&c�8��Ot,D\63��G<���H�Q���J��]�f����o_��	�T$��h�۬P��}�e���е��<�"�*ы}��LX^��l(�H���y�H�S�DBA��7�u�p�ÕP]`S;��)����5���m��Z"9��F�G!�EnM8�Ů�c"Q�	M�/p�]m_|����[cͶ�����ׄ~>$�X�5�|���8���/ʺ��`�bj�'%�[Z��䍖��~:��XA�;��#���r����|#����^_�1n;�|�_8P�|!,ߙ2��7�Y�C��a��E	{I��s�@u��1[f�,1��>>�k��A��.�-Dž3�*t;��8��-;�V���]
�&�<���@��I;���Ͻ�)#����J�4#7U\�S�&#
+#:�ҹ�]ˇ���9oD;Wg��P�1�'������!
+�1*��j�����W�@�CF��Ĩ۔��I*]��Y����D��A5N-�=�n_�uUuņ)3Z��F���Ֆ�P���‰��F)��}VKq�h���](�F��N�PD�<G`���"�s�4�
TG,!
+�$�J��n��Je�׎��b+jA�;B3�EU89�{6�8{�U�R"�� |�.Y`j�k�2�2�O�!#��2"�P�j+�OL��,���R_�������
��U$�1��{�F�w)��%	��\�:C��9\)��q�t�P�s�d�	ݵ�)'ѯ�����Q�iY]�AFy�7^�,qѠ��6�|bO���I���b�A�&����IY��d���}מŠ�㼩f-g�1nl<X
�d�0�Sh�`���m'�T8ᤪ�0&��jZ����L�O��sZg%�5�
+HU[5G�_p7�κ��`��Ň��s�:#���@�i����<�Wr&����k۫�~>z�j�c#ph쐌@M/TRmogZ�\�K9d��.��xK�L�
J�2O����&S]!��ء�=wu���1B�4U޵=�s���a�:��c�z��VPŠ�{�[%*S
�p���z�8q�c��Y1H�;��e{��~�q�@��Hփ�o��%čЛ�Q˨���3��\����8
��o��:5=��-���z>���@�
+�ئ��F��U���Z/�p�Wur�<�f�$&3�ianՌJ45�$�ɾ��X�<R��xs-Rʦ#S_����	�U�J
+嶪}�ɳ2�iO�w(���x%>z{W�Y�/ԫ� <Eor�eo��T�e#�r^��t�	���Rd��C,�K��}��>�V��,xY��#HI2]QlD��t��L
�}�l����k [�2��йA�U�+^cH�Ӝ��5"ߚXF��%�V�%��8�-���S����8^�{�6�����9��X�2x�#�!X�M�����clC�M�ik(��?a����ނ=eH����ф�IUC��Nh�E�������x�@�_(wE|E�/Չ-���%
+��9�l%e�`�gB���̅5T��{r_0�=���QV����+=��7t�4�-7�.U�q�����.��`��i�j���Y���1]����6L�X�A�}u�/L�Y��YvA��-��mv����Ѕɨ��f �mE7.ЫaM�\�X����!��f���~��,���4��G���J�O���ch��>�d#jy�9��c�^�+I\��K�?�`N�3��r'p���Uu���,iH�OE�e�PDH�
+f
�b`sH�5��T��9�vj�Ϧ�Տ����d�m��T�
g/�F���w]�;��>k?{6|6��?�����aCw�G��ե����]�Il|�qd3���7m��$�_k�8���[-�W?D0�ЌE>����@t�Da���~�p<�3�9��ab���Us�l�\���s���ty�?&�G՘��N�����C�f[,�?g�����0��U{Nx%i�����h"����J�w��qb��镁��4�P&ŋy
+�Q"y������p8�7�	���7��Z�؆�qwu�{.��p���69�*����@-�I�{&���"�Ǻ���u���*ke�Z�V�vI?��l E�@���M7����g�`Xmp���O~؂���l�z�����mZ���,H�nK7��8�g�=ە����T�y0B���/��h�
+endstream
+endobj
+682 0 obj
+<<
+/Type /Page
+/Contents 683 0 R
+/Resources 681 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 679 0 R ]
+>>
+endobj
+679 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.215 597.21 214.894 605.921]
+/A << /S /GoTo /D (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) >>
+>>
+endobj
+684 0 obj
+<<
+/D [682 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+685 0 obj
+<<
+/D [682 0 R /XYZ 29.788 351.113 null]
+>>
+endobj
+81 0 obj
+<<
+/D [682 0 R /XYZ 29.788 342.087 null]
+>>
+endobj
+681 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+688 0 obj
+<<
+/Length 2471      
+/Filter /FlateDecode
+>>
+stream
+xڭ]s�6�ݿB��6��w{��$n�N�slg:7IgG+q׼�J������ H����8w3�� ��"�����ζ;��9/N`�p�~���i�RΝ$,B������g�K��Bd3]
+��|���y؋;���a‚�;�n&�a0�t�ײ��q?rℳ�d��0'�&(�Q�y��TνL?�0������A�X�����D�_؇ոO-��r%�H-2��	'ea���Zw��+y���>�z���5xH�Ò�&o�8��>�i��^�,��>K�8v�7�HY�$N��y_λ�Ӻ�oN]'�+Yuu�����׿��_���A�=<NR�i�����9L��x`T��j����S:Wc�/x����\� '��ֹo���1x1�W��H���^n�l��/zUH��c�髿ۨ�V�@}�‰Y�q���?�qÔ�|�ݩ�p�,+K�����H6}��:8��Qx\�J�UV�O��-!s T�u��wS�����'��pQH�ٮn���i���}��e}�6��l	��#@Vt��A�'�O%�宑pn}kXԛM'ͺ� ��$kki�N�u'��+��{/�p� �b�F�G�7ǡ1ȥVWg�/^��.Ϯ�Wo_]L�x�xb�a�ƀ�[ݶj/G�Vf�v������^��'�/�H'���j���4�?N��� ,�@����P�BHl��`	��y�+��K؎B�jJ3�t�w4�;Um
 Ks�/U��U.�@�B�R�뜁)q��	�0��^e�/R0��EUL)a,��B�ꈨ��N�Q&�b��tC�"�g��범�^4ܴ��H���V}���TW�!��Ű���:�>�|�6� 
+R{շ�}�F֨���t�/j7����h�gH��^8���d�7z�`���A��J��xx��s�4���L@vٮ)��8�`Uu1����7��D��6iaHm�ԓ(�&.a�*���ѱQ�|��/l.(�&��ś[T��ȀE��ݭ����׉��j�ì�A%e�MS�ڈ���bf����X�L�
+A��%}���.ꆢ�xjQU�vi{����5[5���@���fe�l�'��5S)u6}���������sȨo/���Bm+���V"�U��Z����i��X"S����ɿ�32�nF���x�~��d�u�<* a�~<9+���x��=..^��ba*��TM��U�Ԏe6>�����I�.��8��|�im��e!����@w�
��yl!��Ĵ�?feo���"e�Mc���Y�H����I�?��CL|��#�ʼnk�l�mA�x8qQ��؏��ЌZFߐ���E/
�����8faL���/�TK0uG�؎*���M��S�~k{a^PC�-�#���By0�=���̏̆op�t$��h~�Z��3��Y��q�'�3W�BQ��!˨(L�8;���M+���~���ΰ���;I�%M������%aL-�ϟ������/�� ��2!N�	�Yg�c9�r���<Z0b�Vg4��iʡQ�A^�eA�{����_!�6=�")CKQ��p;��\^B��{]����(&Q����~p���jq���N�[9OlḾ�V`0m)��GϽ�{����*/!�@w�@c���N������t:Ӟ.�����h�Hr�Pw��kh�wD��^ϘvX��^>L���O_�G�Gȳ��ò��iS�"�Ѡ���cg������,�*��b�:��=(�i@fPUQ׭����6�'��(eCj%�b��X,�
"���'4D¡s�j",TA��ޙI�>���#:�
+LjGE��Cu{���zpo�{#���—E�3Za,S&���E~�U[�ݴ=�)�;���Fj���ؓ>����? �~�	�6�=x~*��G��#��c<��v��7���KL�y=?� � %t���?���/���s}��i���$��h�Z;C=��{��^V��_��y���25A�[���S7���4.E�;zFs��{���%�n�\�	�;%TU�$G���7� `$
+��^8�/���D�������ӳo�Ӈ0	g��o��P���j���Џ�#	Ox��"��<	����>�y�p��D�&�̹ܳwt�4	�R�~������͎8�-	������;'�l֝-vG��ܒ
������|���
��Y=��n�{>gi
+�&���mn(�w�;�۬:석�t���d��~�&CcH����aOh�1��	i3(3�S9c*���{p�#���	�����5����k>�ŋ��g�@��gX�ת�
>�h�d!�
+���C۬-t��aV��BuM�e�^�BUi�Z�u�0�VB�Y�������g�5��u?Zc�.� ��I��5;15;�٤���2łzc�m��ʣ�Z���Q�̰��jzc���(���4[a`nF|��?����
+endstream
+endobj
+687 0 obj
+<<
+/Type /Page
+/Contents 688 0 R
+/Resources 686 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 636 0 R
+/Annots [ 680 0 R ]
+>>
+endobj
+680 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.478 710.784 198.157 719.495]
+/A << /S /GoTo /D (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) >>
+>>
+endobj
+689 0 obj
+<<
+/D [687 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+690 0 obj
+<<
+/D [687 0 R /XYZ 29.788 690.281 null]
+>>
+endobj
+85 0 obj
+<<
+/D [687 0 R /XYZ 29.788 682.267 null]
+>>
+endobj
+691 0 obj
+<<
+/D [687 0 R /XYZ 29.788 482.42 null]
+>>
+endobj
+89 0 obj
+<<
+/D [687 0 R /XYZ 29.788 474.406 null]
+>>
+endobj
+692 0 obj
+<<
+/D [687 0 R /XYZ 337.74 394.308 null]
+>>
+endobj
+93 0 obj
+<<
+/D [687 0 R /XYZ 29.788 372.272 null]
+>>
+endobj
+686 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+705 0 obj
+<<
+/Length 2433      
+/Filter /FlateDecode
+>>
+stream
+x��YYo�H~����4����9�l2I��yHE�%.$R�a������C<"ű���@5�������>�}xG�es�;K�w�O�á��z|'H�P�Ă�HN-����_M>*$@2�e#a�LW��=�������(��H��m&�)�c�����<t����2$�z0�b���4���pJ�(��'���!�AS�Pg7�\T��qf�X��+�$��@,�.�gNB'ѣR��{���|��A����o�U<&k�d���'LƜ��������
+��r��(rfwKH�N�h{�r���j�թǢؽ�eSխ�N���vr9CE�<<��i��?��;9����T����
N��vn�2�h�\��\���j��p}H��Et"���k-�M��e��EU��ȥ����/p&���`rshЀ�	׼�S<Ľ:�E�
+��T��""�f5�z��J��{�n�V���j�[�Ff�7��6����?:�O�L�|�}8��z�wU�����j�6Uټs�,�]��d_�|H�����1�����(DQ�f+��}Q�]����_�ޥ�n��Q�,S�/��R�+�*"?��0�0�>���ث���i+�M�h��آ����՛�������ޓ�bY���Z�sW�VUwV��*mӺ��D�ۺ��h��ճ��M�����9��ٴ�fkt�M��W+�LL�M�n�.2�]���Z���
+�eZV�MU��3�j�)p�`�ì� h`�b��i � ���,����f��\�	�Y��i�`�٤Ei��߅v���Wbݓ�+K��*bG
+��
:�)�bS�K r�;-�Rc^�n@��#���c�F�hW�ʑ��0j����k�z)͊�t�Ɇ�z<�H��/��k��w���fݕ�a0��"���C2��-�b-��u������T��-M�R�|5���ʺ�L��?1�i(F� [������f�C^|�d+3��,d��Ү�Uf)DL���W��W.�D`82�S-��f���vd��-��M\:�Z�d�c�ݪ�y]b���������1W����&m�DeTƨ�C&����� vi�m]d��A��Uk�����}��؈m�� ���O���a��mW�������(
+4�j���ۺZ�R���R�l�7�E6����R~i�p�D$�|}��*�b#*ƺ��߬�k"��
(�!������
�����y��M��w�Ή�����'�����k��i�F��*�[%�_pK�͔�.K�d��0њ/�����/S�[���#��!��D7�.M���*r=T��4ʫ�Y�O �8GՖ�3�E�tr�=uC�-���M�DV��7��u
�DE��c��i2a����xj&�O(�➜=��[@��]O�8�jk��%����>���4�s���s�f�#��pPȊ�8����x2���
Z���V���r���oNM�ý���3�Lsݾ�k�4�������D��ݽ��޵�f9@ �cL�00F����3�m��?v*
[K�������?��@���
��tVu��k]c��n*=��s4���ܐXH�Ёp!B林�B!S9b:�oF�/�n���,{d����2��dz�?�bQ���\g�vr*�CD!f�R�O�(���-�(�1�~�����WR��(��Nf8���Y��r~������������usq��ݿg�]o�����s-KY�j8�-��|�[p|��F!3�h2#�yaaEe����`��>u�b>�aK:0�r�zh�ƿV�9�����O�A�����	��o2�D���
+S��>�Z��Ѵ;��4<�8�XתTQ������n�ZFW}e+&8��	s�?�a���i>���}p�.��U�@�ܛ
+�>�T�T.�3[�i:����{���n��!��&�kk/"T�Zuf��[0��KS�������m�~y�E��a����Wo.����yO���{�V���HB[����3z�|�;�c:}���f�,���?K<ф�!����`(,�S��+�!�M�b>�=?���!w�������.���2��>�	�������c�	� �7�EI�c���L2��9�&��d�7X��������^O:<]?&�B�|+ǭ�m�Hi@�����s53�o��6��߉c����Q<|����1S�7�_������~-�^��Jg8�3���s��D��Q|�=�t�D�½�,��з1���=W	/���r�5�6(�Bg�麩��2�sU��ϴ|Ф��8]�X�ڮ��M�
�j������]�s�^Y� ��Ţ�IS�R:B�����td��}J{�pn��[]S�x;z/)ʼClj�ne���R�fZ���6p�	��x�����r�Խ
+endstream
+endobj
+704 0 obj
+<<
+/Type /Page
+/Contents 705 0 R
+/Resources 703 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R ]
+>>
+endobj
+693 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.326 573.642 366.315 586.145]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+694 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [376.453 554.554 459.085 567.057]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+695 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [172.115 535.465 254.748 547.969]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+696 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [279.238 397.618 386.985 410.121]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+697 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.453 313.254 231.408 325.758]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+698 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.018 313.254 338.183 325.758]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+699 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [214.922 208.045 319.373 220.548]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+700 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 92.765 326.998 104.995]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a17bf2f98e8c59e29a8eda42c692e5b3d) >>
+>>
+endobj
+701 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [300.146 73.676 381.73 86.18]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+706 0 obj
+<<
+/D [704 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+97 0 obj
+<<
+/D [704 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+707 0 obj
+<<
+/D [704 0 R /XYZ 29.788 650.461 null]
+>>
+endobj
+708 0 obj
+<<
+/D [704 0 R /XYZ 29.788 650.461 null]
+>>
+endobj
+101 0 obj
+<<
+/D [704 0 R /XYZ 29.788 650.461 null]
+>>
+endobj
+709 0 obj
+<<
+/D [704 0 R /XYZ 29.788 536.461 null]
+>>
+endobj
+105 0 obj
+<<
+/D [704 0 R /XYZ 29.788 514.443 null]
+>>
+endobj
+710 0 obj
+<<
+/D [704 0 R /XYZ 29.788 300.701 null]
+>>
+endobj
+109 0 obj
+<<
+/D [704 0 R /XYZ 29.788 278.683 null]
+>>
+endobj
+711 0 obj
+<<
+/D [704 0 R /XYZ 321.409 211.108 null]
+>>
+endobj
+113 0 obj
+<<
+/D [704 0 R /XYZ 29.788 188.449 null]
+>>
+endobj
+712 0 obj
+<<
+/D [704 0 R /XYZ 29.788 159.622 null]
+>>
+endobj
+713 0 obj
+<<
+/D [704 0 R /XYZ 29.788 159.622 null]
+>>
+endobj
+703 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F89 511 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+732 0 obj
+<<
+/Length 2170      
+/Filter /FlateDecode
+>>
+stream
+x��Y�s�6���n�i�I�����;q�Z��t�����7��7���]<��Tۊ}��9�m��v���.����eq@�tz�/����$C�CJ�B�<F~�3��`����$þ�TG���Zi2�?�
+����z �fR9�z��0�>
+Œ2�T��S8TZ8h�>L��J�N��0'�iޝ�a�*`:����d �na�Wc�Z^����W���5!�X
+�j�
+�QV"Բ�����6w�*�ӵ%�,��!瘆��5=8�@I9E��G�B(����{�@�F��b~s�@�&qZdy�?L>O;�P!
��M����A�0*C�f�ZO8Z�IW��
+��I� '�j�v
]�nӁJ�����_[��2^�Q�d��8��Elz,��}��я*DLF �A��������LY��3?�*�5GK�Я�a*��&x�����&�vH��u��v8�>ھ$�Teaۛ�(�/3�6�-����l�*�w��u�g�lV��xO$�?�S�LG�[r��QieR��&J���Ѽ���n�7٦Z�EG;�(�j^X�>�X�����x�r��)c(�a@���o
+3&���!ߑ�014K@&���������B,��d�2ժvh�쑈!I��c�u��8��ضF:����ͷ�^e��{$�4Q�Ǐ4 �$/��`�5����?ҙ�� �~�!p0$y���Z
^gy���_��M�(.}������>t�z��r��X��x��cIj;�zr������P�b���
iX�&�j���Y۵�u�.m�[��*
267_�d�j���CL���5��)��5��ֹ�c����i�fYfVT��<O6_�m��Y��Z�OU�3��".�$]:Y�<���U�3 ���'��T�5���Ozp�i�0f�β���Uv�
+s���p����jઉ��VTҊ�G�ҍ����85�-�9�l"5�%�4}�'�8ҡ	0���u��5/JȈ��8�*�y�^�
�1��=
+Uc���	�{�6ø�9��;S�u�r.UtAg�e�e�ƻ�h
+
+h��Bu��:hT{�Q=��	�����x�<�`�!�2� e�
Ŷ��*I�P��qu:f��b*��xv�v2_Lf�<~s5~sv~6����6���̷��Ȋ"�^�uҋ�,�f�_�]��i����"n���z��P�=W^�#�z�h���U�u���͆��n�v�3	Ƶ]9�?X��=X��`�fe�-;&N��q]�hz������/W��t|~1�<�^]���c�#y�3���⿑�0���Gr&q�N��!�ס�����m�t��β&��m���k�"�S�!yt�k��8HVo��J5�&n��pnq������p�c�Ze�w>.��d]"�F�rM�\➫�h>X\ǰ���OW������՚O�]��x��������I���'Q�s�x���4������l�[�(A�@	�u���O&=g�`��|��8=��*g����V}����:o!�����.�T�W}��k�(8��=&0eT��쪶x�[�����7g���cSA|����֭�Y���
[K�l�a̰������5LS�6�<��l��
}n�A������E��[O���O�`�����pQ]����Q�����A�7�M���(��yly�i9�d�j��s�~y���i�z��^��}E���gng��_Q�c���\אZ_��P[�߻����>�ޞuo�$O{;`I�۩G����j�/a��ptݠ��n�pr�F�a=������s�4@Q̷���`ڹ��c�E�~�)�`��[�F��
+<S?;�\s����7 �:Tzz=��6�k����}�7Z5R�11�5w��!��a�̭)u3�_�=_���ڬ�!]3�U.�4P��Mn��b��\�6������"V�F��)���^�0[D	��*՗���b�e�^��t}���؆�[R1:^�l_�,o��A�]za?yE�"��Q�H�=�~��/��")6Y�A8�߬��4��u��&�ռ�R�x���n�(����D�M6��J{��6^�%*v|D�?�<��Lm6��ɷ��@�.*-@�=$�6q^~q{�1��MZB��zRE����H����
+endstream
+endobj
+731 0 obj
+<<
+/Type /Page
+/Contents 732 0 R
+/Resources 730 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 702 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 734 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R ]
+>>
+endobj
+702 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.997 725.921 279.307 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+717 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 651.573 135.199 660.285]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+718 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.613 609.527 369.633 622.03]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+719 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.861 595.978 303.849 608.481]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+720 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.251 576.977 368.271 589.481]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+721 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.579 576.977 567.119 589.481]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+734 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 563.428 90.435 574.873]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+722 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [328.073 544.428 409.98 556.931]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+723 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 458.123 322.766 470.354]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a81fd5b4436be253e0ef3ebdf51b3d193) >>
+>>
+endobj
+724 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [316.431 439.123 399.063 451.626]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+725 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.207 402.633 227.254 411.345]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+726 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 364.775 135.199 373.487]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+727 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.603 322.729 408.848 335.232]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+728 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 60.127 345.784 72.358]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a5946f4a20c9ba0cd83fed96ce3103c06) >>
+>>
+endobj
+733 0 obj
+<<
+/D [731 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+735 0 obj
+<<
+/D [731 0 R /XYZ 29.788 545.424 null]
+>>
+endobj
+736 0 obj
+<<
+/D [731 0 R /XYZ 29.788 525.046 null]
+>>
+endobj
+737 0 obj
+<<
+/D [731 0 R /XYZ 29.788 149.495 null]
+>>
+endobj
+738 0 obj
+<<
+/D [731 0 R /XYZ 29.788 129.117 null]
+>>
+endobj
+730 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F122 619 0 R /F33 531 0 R /F30 532 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+759 0 obj
+<<
+/Length 1954      
+/Filter /FlateDecode
+>>
+stream
+x��ZYo9~����BL�<��b�X�z�q<��Y 	���H�Pw+}$`~��>#ţ$����C6�b}Ū�H3��E��
"��>��-�$#�#JQ(�D�Bo�~�h�9H�R�N��2�:o��֢HO��2�"�h���L���ce#N��S� �XR��j=�c!�B�T|��e��2tT��3�	iZv�j�v�L��M��e�W�a�`y
.I��,k.B��a<��Sܣ�D�5"���U�`a�����d�d�9����?Y��_�SR�#h��a�����b�^N���j��cA8���̋J��^�|6]��P!��a6
����	ZC�ψ�Qzo��z8�����0gT�0�L�k`z�[mб���!T��tb>}j1�d��q��m����2�N���ςt~F����1���9�|�%-�W�*m��M��@3�.��.Yŕ�Гl_W���H��~(�wuj[K��n𺴕�p��qY���W�����P��X�m��4��K�Z��eY�}�U0K�a��X7��q�܆N�����8
+�����/7�@._���b[&�@29��T��$�V˛ۻ��b��n:�X��M���������Gz$�,�5J����9�R%�����M��O�A�4��#=>��ɧU�[#[�)C;
����C�v�_;���G�D��������l���m����������4/
+��RX��m�.G�U�Ov�K��4n�Č��3v�m^��R�.��Y�Vx0��C��C�.Es4��4!.z������|y������|6�(��x���X�m�E�軼,���S�Pq�g���g_���*S�{��Z��"�k�}|�Vr!O5�W�b�͟P��5�T�H��
�:9�<���ɻ��jc�P��(m��^h-�$x��G�qo�
+:��6�*͋����/��rM�k�\�y��ӠPU]dv`���n���+���}���C���������d�6�m�U�s�~����M���cF�����'�9���j�(�?̚�t�Q���p��Ɩ�Y�G�&u=qd&8b��{�aB���s�rnݾ����=��m HK}H�t']D.�l���颧	\hH�ߒ�N�G�Ez��"���~n�k�
+.���Ivz�9���y/<�\ �rPѷ�+"��Az3���a���<��0��Sn���.ݑ�:��
+,�0��� t�#�_[����t>w\����8��~C$�M�a|3���A0`��#��#�7h6dq�,�,w���fk�-�C=iD�(�|�J����O���R�V�R���D����ڑ��
�����T^�����ԧ8ҽ�Y������x�?�����bvqysu���jvq{�m_�������3��C��X�@�����]�_���&+������Y�Nt<������}��R�t�E�N~��\�Ul����ߐ��m]��q�Q�.'��x��̟����x���Te����y�`��#)'ޓgS?$^�m�3���-!��2���9�44^G��?x���#&���N�g��޳N�%i�uN���!����N�OWf}�|�_.i��F<�{L���4]���Cn��f�}(DgG����h����#=~@(��#Xۭ����Cؙ��
r�:�F��h�כ��7���C�N��{<(~�����`kY5���|k�����U�>Ϫ�J��V��h��6;orc��M�+f�ك1���[Ģi�@���P������*�y���Uo��ʹ�=�§�\����ڷ1P���ζ�f�O���Ƹ�bP�M�&.�!]��+z��齌wfB4Q��wyR���
+�/�u�j��a�I���Q	�Z�9qi�
�t�mޫ�#��l^����w&��=��ؽ}��������l]k�m���>8�5����jɄ��T�A��x6�M��K�X
+endstream
+endobj
+758 0 obj
+<<
+/Type /Page
+/Contents 759 0 R
+/Resources 757 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 729 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 763 0 R 751 0 R 752 0 R 753 0 R 754 0 R 766 0 R 755 0 R ]
+>>
+endobj
+729 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [287.915 725.921 370.547 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+743 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.207 689.863 227.254 698.574]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+744 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.207 661.47 227.254 670.181]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+745 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 623.611 135.199 632.323]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+746 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.057 581.997 325.689 594.5]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+747 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 496.745 389.42 508.976]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab87b5a5abeadc975488850bece3dbf84) >>
+>>
+endobj
+748 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.788 464.374 281.42 476.877]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+749 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 418.852 135.199 427.563]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+750 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [526.35 377.237 567.119 389.74]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+763 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 363.688 119.868 375.918]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+751 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 278.436 351.238 290.667]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a0a7f6e18d053c4af5f26f3852ef6ae14) >>
+>>
+endobj
+752 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.355 246.065 335.987 258.568]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+753 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.442 200.542 126.831 209.254]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+754 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [526.35 158.928 567.119 171.431]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+766 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 145.378 119.868 157.609]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+755 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 60.127 402.74 72.358]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a6d707845ea3200a1a45726c2700333e5) >>
+>>
+endobj
+760 0 obj
+<<
+/D [758 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+761 0 obj
+<<
+/D [758 0 R /XYZ 29.788 582.993 null]
+>>
+endobj
+762 0 obj
+<<
+/D [758 0 R /XYZ 29.788 563.047 null]
+>>
+endobj
+764 0 obj
+<<
+/D [758 0 R /XYZ 29.788 364.684 null]
+>>
+endobj
+765 0 obj
+<<
+/D [758 0 R /XYZ 29.788 344.738 null]
+>>
+endobj
+767 0 obj
+<<
+/D [758 0 R /XYZ 29.788 146.375 null]
+>>
+endobj
+768 0 obj
+<<
+/D [758 0 R /XYZ 29.788 126.429 null]
+>>
+endobj
+757 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F122 619 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+789 0 obj
+<<
+/Length 1983      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o��~��اB��^�e���Į�"i][9yH����D*��m������q���I�ݝ����������꒢eyD�t~D��f���!�H	�!Q���G�~D|R��b�l�a_�c��f�n/�4��7�
+���x3R�3)ƒ�=q��r�bI���`�)*���>L�~�2�W�#�	iZv���0��NsPu���7c�Y^c���W�g�u!�X
+���Sܣ�D�oDrkk���V�9[;��&�l8(�8�4�5��������P��G,āR(�y����Y^ƫ��5�N�2/�$����tt6�C�4�|���7�Z��O��S�3�M:p�F�}0gT*���X��VK�o��|�
T��td���sk�EV%�"��<��u�H�A���g�2��"
+.#p���+ő�3,���e~�Si뎎�bBDs����\^�f��.�$��/�I�n���6[;�߻�Ub_�l[W���6*�d�r��!����t<&�7��L��"��U�-�I�/���nSF�HT�4��m��n:��tY�URM��ň�ȃ�>���_Tb����u�l�h0���.Ҟ��ϸ�MR��E�txX����
	�5�\���홫�[�~�ڹ��j<�PVEWu���A=(�}�v^�u��۾��u��`�@��PJ殒9/�0%�8�M=�ѓ���g�U�e�=7L;
��"��g�M�V�Ne�Z���A��Ԫ����l~�j��ꗟ�OOf'W'���Ur�<+�2/��f�R$Q�g�h�/	��$K�hm�]$�?�>\�{���Ssw����wJ�rU�8�4��cT��	1�Å�]Z��9.���4[:jSG�J����,��x����;J�O�W�Mu��>�˧{������i�$��9��~k��;;���8���6�$sk�dr�� �7J�X����(]4��9�db�W��W���������(aM�J�*��Jת�/�7׉i�_�͘�d�<��?�c���)T�ƥeRUw��wV�.
+�&��Ut=���E���T�k��Єoj����3S:�bYOt�if�UC����^�a[|��Ë/pT����;�B9r
+'8�\n���*���6��
�i,l�XB��U�t�1�YL�6�ҟ��8���o�6�f�شS�8��cRT�vK�Fu���(�$�B�\d��.��Y���C�S�?��������]@d��1�>yy��L�//f����Ap���	�WI�Dvls�>�2��a����0䮪�U����*nAơ�>*���bt�ï�Z����;������0�����Tq��Z�>��chq�����s(������|6��,>齯V��p;�������Zy�\=���!yH4�3S#�R��!CÇq��������K���b>�+�/�E�\l�b(���2)n�cCN'���FUd��E�ܦ���3^E�2��Ҥ׼vY^�qbe�e%��q�1�CPon������M��x�^���x���g�1��τ(�~e'�k��5��3�)�
.ן7����Q`I׏�I�~ԁG�t�:�KX���]��T�.�]�1ˆG|��/
+'����C��TF�|��DG{���}t<�BwH����R��֌(V\��4��{�ё7Z�F�^�K�7d��.B��?^�ů�i������v�)�7��2}R�(���{�A�j����0�`h��=�.��#1�Զ_�����p����5V���</^0;T	M���9�
s.{�a�����G��c��br�^۹"]�tɼ�,�D�*��̛�eT,���(�Ê^��6/��a����v���In�H�E���vJM�E�#8Q�M��J�҃��t�m�PQ9�T�H%�����̢��t6����}Qk���n
�&�u�$�L���A���x�,Wv
+endstream
+endobj
+788 0 obj
+<<
+/Type /Page
+/Contents 789 0 R
+/Resources 787 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 756 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R ]
+>>
+endobj
+756 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [247.454 725.921 330.409 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+773 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.871 675.347 364.504 687.85]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+774 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 564.331 316.068 576.562]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a465d9fc420b12cfe3d24e937c5e5f110) >>
+>>
+endobj
+775 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 501.049 373.705 509.76]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+776 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 491.584 181.227 500.295]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+777 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.12 441.257 532.563 453.76]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+778 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.174 416.144 126.817 426.389]
+/A << /S /GoTo /D (index_intguideLibraryOutputs) >>
+>>
+endobj
+779 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 330.741 323.366 342.972]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa5de81322b446f028934aa30c4826610) >>
+>>
+endobj
+780 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 267.459 373.705 276.17]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+781 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [74.626 257.994 177.042 266.706]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+782 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.12 207.667 532.563 220.17]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+783 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.174 182.554 126.817 192.799]
+/A << /S /GoTo /D (index_intguideLibraryOutputs) >>
+>>
+endobj
+784 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 97.151 305.78 109.382]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a178d85d77cf448057897e9b0e0932e33) >>
+>>
+endobj
+785 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [273.373 78.639 409.362 91.143]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+790 0 obj
+<<
+/D [788 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+791 0 obj
+<<
+/D [788 0 R /XYZ 29.788 676.343 null]
+>>
+endobj
+117 0 obj
+<<
+/D [788 0 R /XYZ 29.788 657.151 null]
+>>
+endobj
+792 0 obj
+<<
+/D [788 0 R /XYZ 29.788 629.181 null]
+>>
+endobj
+793 0 obj
+<<
+/D [788 0 R /XYZ 29.788 629.181 null]
+>>
+endobj
+794 0 obj
+<<
+/D [788 0 R /XYZ 29.788 417.14 null]
+>>
+endobj
+795 0 obj
+<<
+/D [788 0 R /XYZ 29.788 397.948 null]
+>>
+endobj
+796 0 obj
+<<
+/D [788 0 R /XYZ 29.788 183.55 null]
+>>
+endobj
+797 0 obj
+<<
+/D [788 0 R /XYZ 29.788 164.358 null]
+>>
+endobj
+787 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+817 0 obj
+<<
+/Length 2070      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o۸~ϯ����VI����>���fѤY����Pl��–\]�Ӄ��;�Ⱥ�N�{�HCR�����a���K���AsD����|!HH�%�(��\�,B7�~���`�ش�Þ�]��j�z/�����sI�t��3���v�;������e��Ё9`(��y.g���(A;�~8�.q�����j�������E')��[�ϫ�K-��KP����1!I,x ��jU�PV"԰��ѵ��ЕNך��ɯ{+B���������KJ�b�}�o���K������H����a~�EI�fE4=|?��`0n(C���l(�o�4��_�2t����r��EK4j�]FE�k]�	
�AN�9�55<ݦf>�(1Β"�ga���pZƳH+�o<=�=zIC>�>8$t(�29Bb�[��C�E4���YQ��I�͝�m�'ӴL��8W�e4U�CG0���4�'���50��#��Q<�X���O|h=I�o���)�&R6���_^�'������efˈ�̀���y�I��V�z��7Mǿӵ��aQ�O��:���r=�L��:�f�Z����� ;��LK���kY2��C��W�q�ֈyTq2�*=��pض$2�3��2��A����g9N�,��)`�t�?og�G%����ln�pٷ&x�<k��M1!^�S ��Q��+`4^DF�F���;��hi�կ�﴿�Ud�(3�z�y�Y�^��O�îxR�<։+#�"-A�-��{�G=ߘ�ڊ\&1h�[|�
oEe�_��]���aqF�9}���jrv�[���ɨ~�z0�]Ƣ�k����L�<�^nL�i�uŘ�1T�Qe��;�6�z���].l�/k�ʱO7F}�R@~�>Ԁ�z�ͮ�e��x5�h�>�IZ��]\,>9���:��x���M�x�|�n�C�A��4\���ml�ZS<0���.x�
+bB/� �{�����k���Pc&�Q����߇��[3a��L�b���1S	�3�'E�*�a�[������ND�M���'7�O>(�%Uqp�fa��Z@l�;^$�UJ��p�L�*�O7Pj��4�Lf��WQV���[V���E����
wrm�e\��:6�<E���s�[��n9r
+�y���b<��x0�P�����|PY�~/K�;��Z˓A���E��Wi��Foީ-�Y���膄��EZ��䰤Z�^|��i�~�.���n�t�?���L��5u��V6�{��}�V���F*)�$�&
+�j�'�By�����ȴ �>�F��,w��cr����ٱq��6E�Bxا���;‰�!
�W	���@�ա.�V��ד��b�f�Y��^�E��b���58ϯ^��=��{B��,�A�:��}h}�_�*�Y��Tջ�򙹲×0��X�E��7S�q���f���5d���x�z��2�qU.�x�li��+J
+��!1So?�\!$�۝��q�0pW2�n��|�~��Q�I�W;|X�;Og���L�{����G٭�ti�oհމ�[�4x�/�'3P9S��E��#����v�%�F��߆�I:-WQR-(W�Q������5>��8xqoM�~fr�����C�I�����`�Ah=�q����g��3d��3dS�yf�Ӆ��Zm��(0?���:\�$��#�8�sR8����.���0���-:�A�v��QB�!E?����!X٭Q�x�j�lw��ά�!vTjy�l3�m�S��Nw���J5R�1Һm��%�����K�J��ٟ��㬺�ɥ ׅ7���SsMv�]��i�qvk�z�71�l����*�ƋS�Q�~'��A���uE����w��~e&Tlc�N(���K�-��"�}����?��X�V�0��t��a�Ѱ���:�å&���?�e:y�OY���Y9�|
+z�,Ve�]�,�,�.4an�
����m-*�|�{Qt��\�/���b�o�E���ɬTT�
+H����^N�q�u�`\��ʡ��9��-����͍
+endstream
+endobj
+816 0 obj
+<<
+/Type /Page
+/Contents 817 0 R
+/Resources 815 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 786 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R ]
+>>
+endobj
+786 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 720.248 373.705 728.96]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+801 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 691.855 373.705 700.566]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+802 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 682.39 181.227 691.101]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+803 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.944 632.155 531.737 644.659]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+804 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 535.416 330.642 547.646]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a2175fa185bbcaafb28b5c73ca8ff2394) >>
+>>
+endobj
+805 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 472.264 373.705 480.976]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+806 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 462.8 181.227 471.511]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+807 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [399.12 412.565 532.563 425.068]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+808 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.174 387.452 126.817 397.697]
+/A << /S /GoTo /D (index_intguideLibraryOutputs) >>
+>>
+endobj
+809 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 302.276 372.249 314.507]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a1ba36727b09433f1ae925646864d8a61) >>
+>>
+endobj
+810 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [424.965 283.802 560.954 296.305]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+811 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 239.125 181.227 247.836]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+812 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226 188.89 359.711 201.393]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+813 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 92.15 360.129 104.381]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa1a59666f0af5463087f528473d4ff8c) >>
+>>
+endobj
+814 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.093 73.676 390.669 86.18]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+818 0 obj
+<<
+/D [816 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+819 0 obj
+<<
+/D [816 0 R /XYZ 29.788 619.603 null]
+>>
+endobj
+820 0 obj
+<<
+/D [816 0 R /XYZ 29.788 600.503 null]
+>>
+endobj
+821 0 obj
+<<
+/D [816 0 R /XYZ 29.788 388.448 null]
+>>
+endobj
+822 0 obj
+<<
+/D [816 0 R /XYZ 29.788 369.349 null]
+>>
+endobj
+823 0 obj
+<<
+/D [816 0 R /XYZ 29.788 176.337 null]
+>>
+endobj
+824 0 obj
+<<
+/D [816 0 R /XYZ 29.788 157.238 null]
+>>
+endobj
+815 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F89 511 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+840 0 obj
+<<
+/Length 2008      
+/Filter /FlateDecode
+>>
+stream
+x��YYo�H~��觅��>�f���=�g'c˓�$h����H���Y̏��IK����b���죺�ꪯ����[���AsD��| 
+�g(!H���"%�De�>�~��H�R�v��2�:j�܌E���RaR�F
+`&�XҮ�'x�)�Q�(��i�ZA�¡��A���`Z�;���B?`N8HӲ{Y#t���8:)@���>c,��%)������"��K���AT�=��J�Zq�#�[�����!��.�A~�8(�8�4�u�Ӄ�_�))ǡ4��X��P���&���EQŋC�jr��UQ�i|�q�����
+i<<P!�Ti��?�@寈�Q�3MW�9���]�1`ΨTЖL�k`z�[�Ѯ�˳m��1������y^��2��"�gM��о��+�h��g�X(�<�AJ���EY��F�UZ/��z>T�IV9�E�}`��$p#`~��Xqʰ	R��J��E�f>ٴ^��*Z��Y>�_`䴲�eV�ib�Y���*��.@�Ă�*����n������p��h ������c �C�Ӹ��tvu={}�jzv|uu�������Ƃ�ذ��[�o��ʴvUE��N�Y��e���&i��Z���}g��h~[;��4c`@�:��P@���h�9S�Պ��Zq�նܸ?��m�2�ܤ��u}S�������4��5���#WRf=�b�L���"3�uYe�
F^/��њ<ﴊj[�$�>�S�\���lŰ�5����&����G��iKTvj�����LĚY���$Mov�,Ԧr�ѭk��p�„O�(5����g/_�OO/�\�\_O��\<����,�x#~OD�Շ�.�NˬHv��}b�߭��
+]ܥe�H@��wL���&q��u�r@T5e����!�n�� W=s� ��E��Gz؋�w�I�/~�x�������5���ӿ���a�~�1~9��۬�7+Koʒa煋��h�%�0��x��d�	�f�qѬntPqf�V��
t]h�W�cU�6�����^�o�4�5�"vV57��} �����f�̍>�x�����QD��D�F����.�7��3c@"�}���j�$FÞGT#���;��S<�c�(�F�À�1MC�g�N�̍>s��~�����pb:�{e��䟇�'��V������~'['��N8U8d����v�������������d��.'`�����ьIL�?��W�=�J�-mҚ�J����V¶��~��@M+��,�^�Lp�?�u�4k��!,]޻�o�����U�
PA{�hI��HKKؗ������M��R̚�&݅8����BEv�M���X���4V�*ـ��\@��2wn�E���-$��xP�x�n������`���ߌ�(�f��k�p_b&�"���0l��ƭ��3�[�/�����b2v�C����-�g�l��û%��:p�._����؜���*@���V�W���O���ITG���/�Z���E���F%�����q
`K�ũ��xRč>�����z�ʋ�顔���S_�wW�kr�����s��q�i��P[Ch�P �׋����g�h� ��t�{Na�0����J�(}/��O��d���1a�#����N��E��G{+�ۇ't���9���PI��� �Ad����/�W03m�k�1:�F�ި��륛�ͺ�m
���q���P�BC#-�+��{��8��&�<_Q�R���x��f�n$NA+#���T��&��51�Խ�u�=h�_�6�X4��9��x�٢Jh޹�~c<�q.{Ov�)&g����B�6���br�\ڲ2�/����;z���uYm�<*s�?����dպ����N���EV�pEe�.����"X�Lo6]Q��M��U�	����ܥKw&n/h��U�[�s�K��z�u|�K>u��<i��Q�]�e�ŭD�8��W0�	��N���,F���Ĝ�W
+endstream
+endobj
+839 0 obj
+<<
+/Type /Page
+/Contents 840 0 R
+/Resources 838 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 714 0 R
+/Annots [ 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R ]
+>>
+endobj
+828 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.122 706.118 274.766 718.622]
+/A << /S /GoTo /D (index_intguideLibraryOutputs) >>
+>>
+endobj
+829 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 613.457 335.486 625.687]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab78d6a66fc7a4205a6caf69ce4f161e4) >>
+>>
+endobj
+830 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 447.021 359.704 459.252]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab810ba8e0fc4425c37aa460e57dc8129) >>
+>>
+endobj
+831 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 294.135 349.995 306.365]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac5899ebab7738c4c99b19ad9d934f8d1) >>
+>>
+endobj
+832 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [225.305 253.985 363.974 266.488]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+833 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 163.483 181.227 172.195]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+834 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [394.944 109.368 531.737 121.871]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+835 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [129.09 95.818 237.184 108.322]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+836 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 62.194 177.141 74.698]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+841 0 obj
+<<
+/D [839 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+842 0 obj
+<<
+/D [839 0 R /XYZ 29.788 707.115 null]
+>>
+endobj
+843 0 obj
+<<
+/D [839 0 R /XYZ 29.788 684.125 null]
+>>
+endobj
+844 0 obj
+<<
+/D [839 0 R /XYZ 29.788 540.679 null]
+>>
+endobj
+845 0 obj
+<<
+/D [839 0 R /XYZ 29.788 517.69 null]
+>>
+endobj
+846 0 obj
+<<
+/D [839 0 R /XYZ 29.788 387.793 null]
+>>
+endobj
+847 0 obj
+<<
+/D [839 0 R /XYZ 29.788 364.803 null]
+>>
+endobj
+848 0 obj
+<<
+/D [839 0 R /XYZ 29.788 63.19 null]
+>>
+endobj
+838 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+867 0 obj
+<<
+/Length 2249      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o۸~ϯ�ӁT�H���yH7��&�����-�flؒ�Kz���7IV�$N��`��x�g��{<�y��Ey�;�wΏ�����=��b�b�N	�(s
+���vo�1PAL��^�
+Y�_ul�l�Ž\&��G4��l�c�F���=-9D�q�&��dЃ1�Q�%s�ÀI���9{�~9B��5I��TD[T���:p�r`u?����O,���0
+9툥���ĉ�<���e����cMZ>��ms���1Y�%�M~;Xp`��q(ן���߂Q���4���Cbq�D�>�������l9�H�ݑ�ʼ��l�y���p�S�,<�1�K�?��q|P*q���k9x��3�ʀ���AD���'����7ts�K�BD"�b4|�e��*�(�*�3�q^�s�:Ԟ{g�� �	��������B�bɭd-@"��D1:������t����txv�~�����d<m�%o�����ӄ��e�NWB�Y��̳�����R��[���i\o����Nu���)P��E&�d�y��rV�yF�_؞F~�0�5��>��������
+O���/Q�U�u��զ�t��������dM�;K����Ԣ��\�V�"��CU(�NK1�ԛyR�IYO��,���lS�����(w��""�ѵ�j��
+����o�3�VZ�Qx�K�Qx�o���+��pM��iڬI���"�{�;���ץmUKQ(d�����E<"ZCIa����� ,{6����3�����Ą8���l�5D'f������d��Y���z��y����{�a`��ǁ��d9�
�3w�o���?���"�S�&7'&�'��i�[�`�&{�m����r�UR����g�}Υ�����0�{�Se{����i��JQUi�����v͐��.� ���H�#��7yQ�Y�'�E���?2�0��seH
QW~�J�UE=�j���C/�,�*�y�2�95�o�M�J3�kZ-�
�"��z�(�РU�4�À

TZqa���s7�M�Ԁ�Xo�o�����KB#�b�SM!�<�*��Vlh+i9qa�Jڠ���S42k���L>��a�}��M�;v#3�ޥ��&*y�&�
%:��	��!�t[�|�5~gM�|��ۉ%*��@�5	�ƥ��!�+mG)�4���o{1v�g�m��ҋĘ���X��_n�]�H)�x�U�sq��� s��볋���������yr������x@V�.���k�gR�A�Ef�̆չX'ټ�`����4�֙y�jcH�^߅��A�l�0�9���P�Y�7f����VL;�݉/�,��)JWЩ�
�'5��C�Y�=��F�i�UJb�"l��$������I�	�%�&��zfֲ�0�#=�b~�K��iX
h�@�̦�o����~�'�Z;jDS��{�e�-,��`�C=�#�B�p����������������bty2~��?X�d,}�
+�V	�}���&�R����A�_��8x2�+��t)Ѐ��&!�nτ�,��7q��T�{����Ϩ�£��
+���;�NOH�������HЦz�(72h݉�J�L�<e/9['��o+$n+$��j~6��i�@�"�
X}�|\O�Ħ��7_o�|@Ӷ��뮗�F'��de��9e��40os���m��6�_��=�hl�z����S���~(���9�n�*���l��#����|�JX�)��yhJ�ŝĭ8���A�3�1AC��p�"kX��-�l!d[��k3<1�	M�OM�,��:�UT��z�EC��J�;����:WO��u�N�|�{�E}D$x���Ҋ���u��
����F��`��
�s�A
+�ܺx�����?�A8(y�E���d��ű1D���C����o� K‘�cDB}���Y���G�c�hJ.�%�>�z�o����gg�iΜ#�7��{�Ur��֌���������R4��1R�5w��#�`n�\�c3S�u۳��<�6;���c�pĻ7ϭ5�9f���撹9�9���DK�#��9�Y���5�����˫ڭ� `�px���z����� ]��=��.��VYV�iz%?�@[��X$�\�X�5ɾi����e�RbW�w���J���*Ħ�����⮘��K���$ "N�Κ�4��-T�]��*lHJ��껉����l6���[�sk/#�l^Kl�nDQ��J+=X�0B�f�P�QS�����qW�Q
+endstream
+endobj
+866 0 obj
+<<
+/Type /Page
+/Contents 867 0 R
+/Resources 865 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 837 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 870 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 876 0 R 863 0 R ]
+>>
+endobj
+837 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 676.117 363.358 688.348]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a7f2cea23dbdaeddb2d91d861c608f239) >>
+>>
+endobj
+852 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.22 655.737 394.209 668.241]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+853 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [311.624 635.358 448.014 647.861]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+854 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.21 572.512 373.705 581.223]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) >>
+>>
+endobj
+855 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.811 553.583 181.227 562.294]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+856 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.528 498.728 368.856 511.232]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+857 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [526.787 464.799 567.119 477.303]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+870 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 451.25 148.035 463.754]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+858 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 356.787 291.817 369.017]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a87428d7a4a5d52e48af8db92ab71c83e) >>
+>>
+endobj
+859 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.626 295.648 532.295 308.151]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+860 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 157.261 349.406 169.492]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac2600415df086d1a9b36105ac29396de) >>
+>>
+endobj
+861 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.81 136.882 493.215 149.385]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+862 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [506.839 136.882 567.119 149.385]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+876 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 123.333 74.061 135.836]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+863 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [82.988 62.194 177.741 74.698]
+/A << /S /GoTo /D (group__bsec__interface_gae8fc6d614d6a40f0088262dccbb960dc) >>
+>>
+endobj
+868 0 obj
+<<
+/D [866 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+869 0 obj
+<<
+/D [866 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+871 0 obj
+<<
+/D [866 0 R /XYZ 29.788 452.247 null]
+>>
+endobj
+872 0 obj
+<<
+/D [866 0 R /XYZ 29.788 428.517 null]
+>>
+endobj
+873 0 obj
+<<
+/D [866 0 R /XYZ 29.788 283.095 null]
+>>
+endobj
+121 0 obj
+<<
+/D [866 0 R /XYZ 29.788 259.365 null]
+>>
+endobj
+874 0 obj
+<<
+/D [866 0 R /XYZ 29.788 228.62 null]
+>>
+endobj
+875 0 obj
+<<
+/D [866 0 R /XYZ 29.788 228.62 null]
+>>
+endobj
+877 0 obj
+<<
+/D [866 0 R /XYZ 29.788 63.19 null]
+>>
+endobj
+865 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F89 511 0 R /F122 619 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+901 0 obj
+<<
+/Length 1953      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�6~���#]��q�ț�q6;��9�)%�w%R�c����A���xd�n��)��Fw���ţ����E~@�tq�/����$}�}J�'v�DY���{D|R�Tb�l�aG�C���϶/����J���z��fR%�z��w1�r=�%eJ�RІ6�a�S�A�q�`J�(A;�~8��p��dw���ր���r��Y
+��V�i3v�e�vI�Ot���"�!K���V��۔����D$׶�����lmY:�|��ᠤ�9����O&G��Jʱ/\M���y���xOB��:I����f�g�FI�fE4?�e���h�1�
+Y!��|������A���CE�V�G+t۵sF���e���	�Z�]M�m6P�`�ҁ��Sm�eRD�,(�4�eF�A���'h&�	$hq��8��}��R�c��m�I��t4=�~w~y1=O���.o��'�_���f��al���#�ԛ4���*�6fQ��I�U��gy�����RH����9�V_եW�_q]DI�+�k��,ި����K\x:>�
+�@3���B�����[��<o`BD�t��C�#@��A�(	`,C� ׺���̢\�E�<
u�gʼn����d�E��~�A馼��da�7A��b�t_o�g9djMmj�P����;"	�ў#��#�:́�ҮK��=�@ަ0�T�	S�	�J�B�AQg���0�y�eQb(V�,�ߌ�֛U���J]��6��)��yc�4|U1�	仾� 1��Q�n���U,Ma'T�.TkQ�hр0��W��Wg�WSg���s�<�jУ�9r!��^$L.}/�A��H�NH�6��^�A�qRjʗ�S�ؖQ��9�قo�-Nǧ_f�������f�Ax_�Vh`��w���q�ɹ[M���㪩�qE_G�j�?*���/�*�t�{X�����k,X$K�^���ĵ��PЍ��j��\��p3U�i,˖&/�,X�X�=�J�(ޞ�EV&s5�oF��h�/�>���XI]2C�ǿ�R�-�
+��u���f�A:���F�=8�oE�})O���hz^�L+���K�mI3�����e1��b���@rlC�3[?�i�I�}1�:�6�xԢ�U�seVϊo4{v}=+�8�ek�,F$�m�|���������ѻ��㿟��h�%���O��+��o�dQǤ�f-�f�2�X����\�̓�=�"���%==:�ʯS�*����/�>�qV��YF�zY����6����h�͙��˾�:܅��9x�ǡ+-e!��q
x&S�i�����x��P=��wpO��/��������(W�6qf��Ƌ�1v}�����Ӯ]���r�A�.VS���ӛ���h<�iz���������0i�3�T��R?��lS��
+lv"5�`�3�Wi���W��#�&����[>�������ts^��	��_�N=�s�DC8�:�OKC��E�N”�?�ijt^�tEP�gQ�ա�2
+�Ji�'W#�#v�Юn��w�x��a���5�X�[�#���Ի#0��X���
)l�:7�.���!�s�;���a���#�_�{����46��Fl��L�N`m=��!u�1s��;:���v������b�_� �`7~��(��#S?;D�8G���0�.E^�5���V��y���T��ڎ�ʶ�{�}��0�{j(�_�<_��y��S�J@�.����J�E��1$�Ƞ� ����X��D[�-�7A]*���n�E����Z������
+�b=�Z7(lcؤPa�V�.��"7e����vK�<�AV�U�$�i�a�o�<XU���Y��>$2UY��Ұ�7U��q���M׬���Y0��R��6���-��xx�}l���Y�٬�&����$,�����DYaĵs���$ՇGT`)L�gN���o�ƴ
+endstream
+endobj
+900 0 obj
+<<
+/Type /Page
+/Contents 901 0 R
+/Resources 899 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 864 0 R 884 0 R 885 0 R 904 0 R 886 0 R 887 0 R 888 0 R 907 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R ]
+>>
+endobj
+864 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 680.317 351.217 692.548]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae5d8b5de70152c09b4153bcb41997ee7) >>
+>>
+endobj
+884 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.93 661.627 483.843 674.131]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+885 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.397 610.698 567.119 623.201]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+904 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 597.149 112.864 609.652]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+886 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 512.681 323.933 524.911]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a89e2eec8486c2880912af108bbed3593) >>
+>>
+endobj
+887 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.927 493.991 416.752 506.494]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+888 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.397 386.992 567.119 399.495]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+907 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 373.442 112.864 385.946]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+889 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 288.974 279.708 301.205]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a76ee5462e14060fcc889bd889b6f7b3c) >>
+>>
+endobj
+890 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 148.436 394.853 160.667]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab5356ac211454109eac007fcc458a6dd) >>
+>>
+endobj
+891 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.079 129.746 319.515 142.249]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+892 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.286 129.746 415.918 142.249]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+893 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [198.079 111.056 320.126 123.559]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+894 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.897 111.056 417.14 123.559]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+895 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [230.002 73.676 349.766 86.18]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+896 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [371.8 73.676 453.303 86.18]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+902 0 obj
+<<
+/D [900 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+903 0 obj
+<<
+/D [900 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+905 0 obj
+<<
+/D [900 0 R /XYZ 29.788 598.145 null]
+>>
+endobj
+906 0 obj
+<<
+/D [900 0 R /XYZ 29.788 578.521 null]
+>>
+endobj
+908 0 obj
+<<
+/D [900 0 R /XYZ 29.788 374.439 null]
+>>
+endobj
+909 0 obj
+<<
+/D [900 0 R /XYZ 29.788 354.815 null]
+>>
+endobj
+910 0 obj
+<<
+/D [900 0 R /XYZ 29.788 233.901 null]
+>>
+endobj
+911 0 obj
+<<
+/D [900 0 R /XYZ 29.788 214.277 null]
+>>
+endobj
+899 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F89 511 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+929 0 obj
+<<
+/Length 2198      
+/Filter /FlateDecode
+>>
+stream
+x��ZYs�8~����TIUK�8x�͇�Ք���Mv&�RQ,sF$Q�5?~OK�e;5y��m����n|}��hz����2��e������-�a�6�16<F��l#����/�����.�M�c�}�Q5g36����b>6¸��Dl�紫��1�"L��0�1L�M�#�=�8�8eD��h$�N���(p�[Uɴ@6�&15NRX���>-�.��J.#�c-���,�>���OJ�,���da�j�M��Mu���)Y��$��-8,ңa��GӃ�)�S�3�5�w��y����.�O��4�&q��
O�4+x8�}���x�3["��|Щ'���2���a�R���Cc1�@��qӖQ�m�R���
�`��������l��vqqO���a�|�E�&�ᬌ\
+�/��,_$����
*���A����G
�!�&��8��E+u4���9�쮴]fLc��a��A�*�Ф��w�Lf�4�s6/o-By��A����V�\˅��-%[�
�2>I�y��ْ�0Mn�̖�ډ[˶�w$�4A�x�Ty�[��i��b͵@�h����K�<RmO��F��J�q�5��XA�R��
+ �.�;{}�~|=�uvt~u4���6F���d�.���Y�E�34��(��������l6��px>9��^O.��>�$��������3�i�����M�-�����j�KQ��g�J-v��0��T���
����۹�`����Y�,�>�A���O�t�AA�%���Hڋ&��r����E���/��I�Ϸ~A3�"��蛶/�/R��v�D
+���
+��PR�AQE�MT����EY!/����Z����<��4,Ē
+��Q��Rx[Ǟ�q5Y����$
+˥��"F��q�e<l�[̋�t�]���p/$���(�9N�2�;����(u�(uK�
+�Dwp�f���$��XE�,��G�W<��:'�6ͭ��E�w(��B��"ߵ:�Æ��Ŭ��[�Y��jѸȲ����mQɴ!EtU�֑�y7m��="kG&w{d������x2��Am|������Є���M5~�شo����w�1q���A�!92�V�9��j���oj���Q��,�g����ī��
vr����T��Yi؄��t�N�T�נt��ҸI_U��w[��ۢ�K�I�褾�����	�X1�PѾG��{N�~�������L{a������&8�c��N�*��y��ȷm�	S"m�SAj�ei���e�T�3��Jq"t^d�j��w��^$�s#�
+�g7dz�����tr�ه����tru������Z��oP�zw	ĦȢ����L�=:(�����k�	^�P͛�H�Q���5�67 ��(�`��H��"R�=��ݾ��^A���Pݝ�tV�	�gܗ�#�i���-��,U������Q��*�����X�BV�9�y�5�8�x�"��D�~����D�9SI!�2�R�"�7��_q�~�A���*�}����gm�c,���W���O��a���,]Wx5���o�+��U�QQ���ZX�&|��t�/;�1D�Q���}��x8��w�sr[������Zq���	��o�s^l8�v�1�篽�b�'F�����~�v�1�Q��w�!;����E*B�EBi�`{�q�ڐ��˧x�(��D�Dw^���"��Պ2����n�{ƴ����B�x��8��a�-�J��
M�`��th���b�x��z�2�3�yxiY��6�BD��>�Jq����>�����3d��r��3��l�~��s����F�6t��ǰ*�=w��V�#��eZ�Iث��W�S���5�������d��y}�����L	���ު/�<���Tek���Ɓ��5{�f�J������
�~w����^�fUr�H��Gw,�&A�'���)~��06^��z&�aUftv��Sw�&=FQw�իv�ٝ1�Ž�DIS=�'1ڣL��̖����W�Γ;�v��>��,��[ul#Ә
E�+ڲhy_亮����� O��e�-dz->��A�^D9��`%	���^�QQ�#�)㐭,ʰn�Tf��=�XY4/[4A��ak1�x�
�� ߑ��/u����`�^E����SiV�/J��*l�ܪ�Y�R�f�b&��f���'�P	��?���
+endstream
+endobj
+928 0 obj
+<<
+/Type /Page
+/Contents 929 0 R
+/Resources 927 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 897 0 R 898 0 R 917 0 R 918 0 R 919 0 R 920 0 R 933 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R ]
+>>
+endobj
+897 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.584 725.921 338.032 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+898 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [362.1 725.921 446.968 738.424]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+917 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 628.782 350.028 641.012]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a3975b1dfa3c35829ce97814e04c143ce) >>
+>>
+endobj
+918 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.238 610.24 450.674 622.744]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+919 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.795 610.24 540.428 622.744]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+920 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [505.397 559.608 567.119 572.112]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+933 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 546.059 112.864 558.562]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+921 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 462.469 360.915 474.7]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac2eca8b900ce91ee50004c549a409024) >>
+>>
+endobj
+922 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [382.47 443.928 504.396 456.431]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+923 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [380.503 393.296 501.709 405.799]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+924 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 268.515 353.671 280.745]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ada34397de8a8e88ad72e8546748866cd) >>
+>>
+endobj
+925 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [186.657 199.341 296.562 211.844]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+926 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 97.21 371.813 109.441]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa238cfe9b905deda6f1823ca32378f91) >>
+>>
+endobj
+930 0 obj
+<<
+/D [928 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+931 0 obj
+<<
+/D [928 0 R /XYZ 29.788 713.368 null]
+>>
+endobj
+932 0 obj
+<<
+/D [928 0 R /XYZ 29.788 694.105 null]
+>>
+endobj
+934 0 obj
+<<
+/D [928 0 R /XYZ 29.788 547.055 null]
+>>
+endobj
+935 0 obj
+<<
+/D [928 0 R /XYZ 29.788 527.792 null]
+>>
+endobj
+936 0 obj
+<<
+/D [928 0 R /XYZ 29.788 380.743 null]
+>>
+endobj
+125 0 obj
+<<
+/D [928 0 R /XYZ 29.788 361.48 null]
+>>
+endobj
+937 0 obj
+<<
+/D [928 0 R /XYZ 29.788 333.466 null]
+>>
+endobj
+938 0 obj
+<<
+/D [928 0 R /XYZ 29.788 333.466 null]
+>>
+endobj
+939 0 obj
+<<
+/D [928 0 R /XYZ 29.788 181.796 null]
+>>
+endobj
+940 0 obj
+<<
+/D [928 0 R /XYZ 29.788 162.533 null]
+>>
+endobj
+927 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+948 0 obj
+<<
+/Length 1288      
+/Filter /FlateDecode
+>>
+stream
+x��X]o�6}���L4?%�oM�f.�-M<t@R����lɕ���wIJ���
�t@�$����{�.�2�^_Q4/�Ax@�O0B�%)EJ0�
+��������2ɰ/���Q�g�Ef��H�EHQ����}O��Ɲ���G��XRf���=�c
+�����P��:�4��p�f|w��i��&+��s�x�O�8�kpI�}%:�]�0b)T<��
ܣX"Թ���am�G�����K:��6pRq�i������
��r� @��B(��Н�4A��Ӽ�'��Fge^T:>�8};O;`��V�
+�Se��~$(�ɷ���m��ʘC-�M�J�<`���	���cS��0P�c�����0�*=/�*�37p�Im=WOO�?i�F��e^c���Py>Ò)������rʰ}����_�P����U��jz�L���0�:�m�Q�X���x����5��6w��?�˽!2�fB�oEg�c����=���7g��k���x|�׻���r�nr9������m�p��*/�t��.tT�Y�j���rZ&(� �Ӆ�t-]��.�"]�6��" �~H\��1
�z\�g��ӕk��L�GB<"?��:Q��T�:˨���o�Q���Y�*�X��P�/�F��<�����E��6��t�ȓ_��:���|U�|��q۴Z�Y��D�A���O~e��&�'�.��<dh�����yW���q�=�J(��Ψ�y�b{��u!|����lx	9~3
�GU������{0��6^8҄/-���6��*�����y<���ʊ�lV3]�:�F!�MO�z��c_�s�{���^�A��	f.���PմW�9�#&�pX�‘�v*����]���3lj���$L�I�:@�������FR�0��c�Ez�
z(9

1�]͌G����A�JSf9��S/*����b��L�v��n�^o��-�:��yc��?d��������ip�Xl��
����0Q�򦵥�����1Vw;q
+Q	�>pխ�[5�6��UӮ�������h7qhv``��d�k��z�Z�%�%:5������bx����&��1��T_/�n���*�~��~�Gw̛߲�yT$i6w�Q�չN�r����.���z���M�P��E�l�ݐ�$��Um�.��m:k���7�h���m�zYWwQ]h?�c����?Զ��2��[3���dch�F�v���k}�Xr�wfɄ����[_�l?)�>�����
+endstream
+endobj
+947 0 obj
+<<
+/Type /Page
+/Contents 948 0 R
+/Resources 946 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 945 0 R ]
+>>
+endobj
+945 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [142.53 644.085 363.348 656.315]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae8e920ecde96d7d79b8962da38233880) >>
+>>
+endobj
+949 0 obj
+<<
+/D [947 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+950 0 obj
+<<
+/D [947 0 R /XYZ 29.788 728.902 null]
+>>
+endobj
+951 0 obj
+<<
+/D [947 0 R /XYZ 29.788 710.36 null]
+>>
+endobj
+946 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+976 0 obj
+<<
+/Length 2822      
+/Filter /FlateDecode
+>>
+stream
+x��[Y��F~�_�G
��������cOv���$��I�yx� ?~�/��P�9�a�6)v�Ǻ��ؾ�}��D��
+G�G���GD����Hh�4!Q�)R\De�]��h�
� a`��ER�᪛����Hd���H�$Zl *���5�q�a2R	A�Pj�a�&H'�8���qj��m�������v�ւ��n�lX���R{��ClŁ/A�Lx�-'.�i����V'��
+R������=�+?��~I�%�Of�LCDK������+0J�JE�w�H%I�����2�0{^T��똪d�>�VEYg��?o�zy�a�pa-\%d���h	��F�J�;uc�
,ZG�< F�H`.ST�i t�Y��CC�^��@�DT��_��xx���U��y�u^7�2�M��SW��G�Pa(QK0@B8J�#�_�` �ߊe��I/�E�ɶ��r�4
 ���#�0l�0��E�!�y�K�h��:�AJ�6��q,�U��C:Հ�1D$E%J0sP���w�'��W�t��we3�|�r����L˯׊���|�V&�]���`��Tk�e`}n���_xW���CK��ɳ�z���]<s_��K�=�_���V���j�˺Ze��l�h�[�����i>t�*�]~c�p��2���T�C�ғ��v/���u�w��������1r�*��FC
+�IRӈ(�#T.�!��y�9���
+�
)a�d.��J�.��X"	�c���u=�&�C�e�# +x_g��4&�]�����v�…A�f.��BE��W�vц�#\*�{�	���`p�ϴ��	!��h�ֈ&�FL���s�kZ=O�
+���Vp���1|�͹#�R?��ŧX�����?�U:���JWꞧQ�@
q!�
+�v����eZ���(���\5�X_אS|1�+vf4]���T�/��.gV�@��[�?���V�*�Q�������^Dﲪ.�l��������q�1L�����5���J��	@�I4?�Z�A ��k9���PX}N%w��i���}܂Jv�-�1�m�y��M�k�n���_��L��%�Uo�nv���e�;7���Xfh���&1m���q:��ap��(W�,a��]@[XZ:���I�2���Ta	i�^�	���	�bЂL�+���0q��Tq�>F�0ĉ*�U��[�EJ�����㊽�����C^��O�������ƭ��T��I?A�]�l�il���j�բ�w�X���ˆ	�S����@�W"b���KD!��{#^fF���}i�M�ot��b7�4FD�����$�	�Z���0@% 5e[0�T�����i"�=�jp�#�)"XOĨZ^�����Ds��ߞ`f���� ����ydo7���� |f����&&�����̳/aWb[�c{�P���*d��ڟJ�9���ǖߊn�ִ.���4Ъ|*��5�`K�Y���2��!X�����G��V�`�U�n��������_��V�]��g��翽�	v��޾P��e�m��4�;�TZk�:S�<æѰ`Hh|:�2)��Y���,6=�V�kU٥�{�r*��U����3U�h�V~�*�����mV����w��j�J�%�p�z��ŧ��
+��T���;���A߫7_�$��
��&l��l������ݹ֦�꾱���f��a랻�U_�6?�:<�ES�&�8��ٶ+
+��gax�H=��/-}��t�.|H7����ز�ؔ�y��g�h��t��Y��|�	ő�4�m�
]t�%)��J�3G�*���vz Ch$�EzQ��i�>W`���(��������^�'�LD��!`
+`�S�q�^�@��#�(� �>E#F��3���n��ًEb��/�n���_BfE�R�{�v��Æ���`*�g}��rg��j‡������� (�g�rē|�ڜ!�c:��-!�&r0��v3����s�(]7�cI_�27-�*���v�6�B�O�g��-PО�I�^k���B�0',��ͪ,�]���8����Y5��6?��Q%(1}������s��eT�T��m�߮ok�g�cE�1�LKK
����Ԕ0�?7`�o���1�M��|!�b�~ŷ�;E�9�jrH
]�L��Op�%����~r4{��W���<���E
+D�8뛇��us���4�.6��~X;�P�mͳ�a�`�ֿXy�n�p�}��MEZa����[���Kǐe���Ki��Yi�J���s��i��᪙�/[��1"s]ܧ�Ufb��	`⹉��Nz�	�f��?_NJ������m��ι��Y����$6b�Q��c���f2���l�m��qw���D�}�QH����D�d����AP������(��kKScS~�9�{o��B�;]X|ϕ�c$e����|��[�ɍ%��p�L��*�ƃ�qg�����c�=�px��oXÁ������=AZ��Azwg*��i�v���iRm�d�B�eJt������S�5�'�����sz~��M���?ۨ;+���
f�m��n�;>Ϙ����|�z3��0�
�_>{�^�ge��7�:{�d�! ��"��rik�3�~u�˼�U���,�k�.rw��?*3H��f�>Jf�27�v?  zϛΚ�r��&�m��oG�U(iE<����U�ۭ�6��7��ec�t�vYY�r�	������D(ǩ���I��
+endstream
+endobj
+975 0 obj
+<<
+/Type /Page
+/Contents 976 0 R
+/Resources 974 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 959 0 R 960 0 R 961 0 R 964 0 R 969 0 R 970 0 R 973 0 R ]
+>>
+endobj
+959 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.729 466.292 393.034 478.795]
+/A << /S /GoTo /D (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98) >>
+>>
+endobj
+960 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.729 450.111 462.165 462.615]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+961 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [340.729 433.931 423.361 446.435]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+964 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [338.302 358.411 474.29 370.915]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+969 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.856 282.891 425.761 295.394]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+970 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.856 234.351 398.489 246.854]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+973 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [345.267 145.281 428.51 157.785]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+977 0 obj
+<<
+/D [975 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+129 0 obj
+<<
+/D [975 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+978 0 obj
+<<
+/D [975 0 R /XYZ 29.788 653.104 null]
+>>
+endobj
+133 0 obj
+<<
+/D [975 0 R /XYZ 29.788 653.104 null]
+>>
+endobj
+137 0 obj
+<<
+/D [975 0 R /XYZ 29.788 617.41 null]
+>>
+endobj
+979 0 obj
+<<
+/D [975 0 R /XYZ 29.788 548.854 null]
+>>
+endobj
+980 0 obj
+<<
+/D [975 0 R /XYZ 29.788 497.059 null]
+>>
+endobj
+981 0 obj
+<<
+/D [975 0 R /XYZ 29.788 389.179 null]
+>>
+endobj
+982 0 obj
+<<
+/D [975 0 R /XYZ 29.788 313.659 null]
+>>
+endobj
+983 0 obj
+<<
+/D [975 0 R /XYZ 29.788 176.049 null]
+>>
+endobj
+984 0 obj
+<<
+/D [975 0 R /XYZ 29.788 112.679 null]
+>>
+endobj
+974 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F89 511 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+993 0 obj
+<<
+/Length 3444      
+/Filter /FlateDecode
+>>
+stream
+x���n�F��_�Gq����d�$@�d��}H�%�l.$R!);^�㷪��lҔ=>�
`M7������y}��g\�gQpD��3��@K�y�B��a��1���;�_�0F0�i��8��z���N��8u.��~�@(c=�t�t�JC�� �D�@�%��,�3D*I��D����$�?�B)�����:`^�W��P=���d�"k��E�d�#��E2��Xgy� U�K!�K� pP�bE����h�x���h��L�P�	�{q��(�Pa��4��2�,Ҝ�}�	~]������R��⳩ں��������_x�[
O�x�!�_��
t�D�T�ء{8�`|�i�qcU*cP�P��V����O�hq�TL����[����3�MѕuE
���X��O�O"���,�,3z@��Pg*X&2�eF�&�tib�0]���l�2�kmW{���T-��Ѵ
&��d���a4�y<l��lΗJe�ͱ)�K��CS�M��7�<������l�#{�_��bQo���2��	<
#Ђ��4	�˦>@J��*�ϗ�H��k�R,�jC85��jG�dT�E�6��۾�š�M$$�PvmV�X/�K���hn�����e������.�c���I�e�'�awkM�'��k�n���5��2�t�����h��*�W��*�pE��rxBa$�,K�­ELqHR�`�`�6Ԁl�Ҳ+�EK��u�Ǯ
ǖ��X|<C{
+��/���駺3_eM(��I?�S$`����2�ؕ��D�j˶k���e�)]ym�kw	j�]�y��0T{e��b�Tz�'�8�����-�s�~Kp����"���e��#E/�&$���2���r��ڊ[v5	W,�-��,��EXVeW��VSa������C�޶��S'��x��+ꯛM�$O)���uWn��쎤���c���7��Μy��UADgL4��
�-J8��<�����P�wu�v�^�A�\��j�®.6n�b����I�c����AE�DZ�Ab��%fFYJV�CJ�|Qd�f�-�5~8Vk�\{�hF�9��Hy`CA�W�Y��_��C�[G��u�P&yD�s�f㦐2���$zfU�K�Kc�cS}�F�.c�1:�M�
jH���n�:'�h���a�/TV�&��%�X�@J�z��Q�Hc��j�΢	R0*Q�(�j�������9p�&e(�Yb-�G�6ٗ�EȢ��s�/�2O璁�б,$����(y<!�N�n�y�q(EJ��4~̐��`UI�=j���jge�B��xd2S�1�m1�I�h�X8GԖ�U��K����-|}1�YGb�;П'��k����)߰N
+M��bO,����e;��\�>�����M�Y�K$�6>#��*�=�uAIB�,�8����22�%#�����j��0���m-�������#��]TՕ���4�1�=�l�
+-�n5Ʊ���6��*����8'>\ݶ�uW�	'@-}�\���SN���3[�R�Q�����l�+VV<u}Ux�ͪ�,� {�-��]}c0'�<��JS�n�f^�3����<L'dp�
�*�,��v�N�EV†�JW�(k��Y"��	����� C�x�g����[��
+�d�^��u_^^ur{�q���b?�r�T'��jcP��ި
0��7��+��O2E1ٿ��"N}[L��4�7Ͷ/��]��!
 IL��
+��[!ԧVM�y�j�ޕ��Xn��f����-k/=�ťI�E{)���l ����3v�l����'�31ç7�y�V܎�`�6�ߦ#Q����V:�S���t?�!XZ�R9�b�x̍�Ρʼn҂s���
�s��f������ ���2�����3W�0��w�R3��ӌm���7}�`�}�i����;�Ӵ��A�o�/�u��L��V�0M�C�C����߀?�P�@�(�MmW�moJ�X~��n9��u�;�yq�,��e�3�Gn���L�w�_����W3n��-��s9־?h�y"��S}�0��>���8�P�-x^>�~����N�8��	�4���
+*} �����.�bp�v@M��y�#|�ڞRC�|*�,�R��[n�3,���<	��ͨ����2
+�7���K��1�o���J]�3�4�o6T��w�O��'s0]�"G�RO�,+�CG<d:�/�Ȏ�'����?��㉦�����@|ΗELX�Y��6�⦰{]KK>�%�Q��t1c�m����^�|����x�u�-V�F����'1���Gz^�B�y r�m͛��j�1�eA��t��v���A}I��z*��!]$}[Wkӟ	x�|�6@�yE_�7�yk
+�oܹ�SĦb���(�dV���$+�_�s�:�rh�J�rng���0�
ǯ�G���JDæ��Y7�q��U���a���;k�C���Q��0�L�I�A�$[g���6���/b��V����柋L��m��&G�����*�^2�<�/�c�Rh�t���0r�{up����z2g����<F�*"�^�&)_H�s�P�Xݽ�	)�T���_*������GN���cO\x�u 
;���o����\p��M��r���{�P����M�9��H;J�{��
��R�6�n9��d|$=����#��x(-�wW�D$��Y�3a�E�"L�������A�I�A�3��i(͚�����8mO[��9����ӑF���Ϟ4��9�����>�;
+40�9:�L���M�4L�~XS�!�n��@
+�s*�$�f5p��p?4��OZv����xc������n�������˵;:�$���Z���qa7�3�^���{�i$�g����ܭa���Uk���$��k�;������wV���W�1�>pk�����.��0��Y}��o)1�E�w��H�aX����2�b����q����I-�W}K��o��(ʖV+��qJ,�9�A�fOF
+�5l�U c{�?g,��)g���B���:AT��O��wʼnJ|$#-��ɡ��p���t*T���<�	=�
�NLN�sf�>N�t��h`��7�%�Le Wz���Ζ���d�қ��ݰ�n�r�?����B�"G�gK[��X�y��v!x$���z<���JJ�VVLC�f���A�x�W���������"DMO��_����/�AafP��\��YG���z���S/>�W�Q�}��o��*�5x��r��޿j
;|=E�E�ᗙx�tK�7e{��b��N_̟�]]�-7a$�7�u��jS�56�]S��ޜ�%g�3b�m�n�ƭv|�џQ��>�1�pؕ��$%J���x�7��8�s�<�g.����' 4l]�ǫh���?;�h
+endstream
+endobj
+992 0 obj
+<<
+/Type /Page
+/Contents 993 0 R
+/Resources 991 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 878 0 R
+/Annots [ 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R ]
+>>
+endobj
+985 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 542.488 129.639 552.039]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+986 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.436 528.938 176.917 538.489]
+/A << /S /GoTo /D (structbsec__input__t) >>
+>>
+endobj
+987 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.192 501.84 153.38 511.391]
+/A << /S /GoTo /D (structbsec__output__t) >>
+>>
+endobj
+988 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [414.427 451.231 497.059 463.734]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+989 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [180.363 274.015 262.996 286.518]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+990 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.247 237.525 150.492 250.028]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+994 0 obj
+<<
+/D [992 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+141 0 obj
+<<
+/D [992 0 R /XYZ 29.788 615.164 null]
+>>
+endobj
+715 0 obj
+<<
+/D [992 0 R /XYZ 29.788 589.922 null]
+>>
+endobj
+995 0 obj
+<<
+/D [992 0 R /XYZ 29.788 589.922 null]
+>>
+endobj
+998 0 obj
+<<
+/D [992 0 R /XYZ 29.788 158.82 null]
+>>
+endobj
+991 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F44 228 0 R /F122 619 0 R /F159 996 0 R /F163 997 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1022 0 obj
+<<
+/Length 2318      
+/Filter /FlateDecode
+>>
+stream
+x��Z�o�8���B�6bė����M��tS��b/�LۺZ��G�����7|H�9��.P��Ԣ���o�O'�Z������^,���űx�Q���3�<ƭ\X�������Mw'��A�q-s+[r�����X��(�@��>�]Ϛ��Ե<#��d*��G|�4\�2"y�j��N��u(p��[M�t���p<N��6���>��.��Z/��볖Z�\�C��q�ޣZm�ۘ����A��T�m�Е=��vHKȇ��>���fzp�%�(`�gM	����hO����MVD�C�x��R�E��":���|p:m)�W���ԗ���k�?[�Xw�4�䀁Zk벭�sh�G8�b��ji�ꚜ
逹���{J\��C�0NK���2�R�ᬊ�B)�o<�|�\�M�83��LK�q�"�S�v�@��0�ȋ���k�`y.뛘~cbN]D)��6�w�#�<����jB�3,��1!m��@<�#�ڠ��c����HS�GYUޏd�������8χ��uq�3����b`Q�8��g���E�¯��ZG��*��ng���,
+K17�N�.ʼ���H�]A���T/�(�<����.$[ž���P�
^������0"\И�X�b�SfR�\�l��1����3mӻ�0ɫ��HŢZ�d�J�wq!�K
����x)�v�;ĕ�*�����L6���W
<Z*h�LJ6'|t�%L6k�_�cG� {Xu!�;	��NL@�8U�(�a:׍:Fe;I���ܙs�An��դ�M�0 p�Q��L��������~%;��*�2=���ҟX���~�W��S�݇�5Ʀ�����Ý&�&�Cj�LaZ�7y���9?��(ò*���C�"�T�&$ ����6U�H)�*��e���<W�m�*N`K6��w0NY�/>zJwT�]����
+'��E��4[I-H�F@�R�-�i��	�h6�˯[����3d�a�o�b�����߲�m�ǒi7o
�=?�k�_X][���P��ޓ�$�����������rrz9���2�
͕�+/�p=��zL:�^j3�3�=����ح��|4==�8��L?NN����h�Mm���:���G�>��ߎ��=}���A��oj��z�u��P5�n*���'�Г0Nuk�g�|k�'�M��E�Fj��H�������yz�M��[�)�%�S��K0�򷺞h�$��~\�e�Y��Z�z���^m��
�x��&Ǭɲts1ﭏ�o*��[�J�c{1d��S�?�~���s�"��ȅ�];�k���~�2���J�|�YQ_�i`c��$��I�((+�N��:l�{J�qu�?4*:{k�"��+��2Z
ihJ��5y򅒽��(,��"���8��v|�M�6�^E
+��<���YJ���j]��]�YҞ]�Z�s�~%e]��33
�D��&����\N�=�hw������"�0�).p�������N
�]&7�H�{���Y6��y���O�[��w{<Ľn�����'��G7�O:�����aD�G��KQ΢,��qȲ�G�2���d���\@+WB\H��dϝv�"��m7�� .F҄qfLԅ	���@��b��0ɳ;��G�Z��#C��o⎘.o�詧��o0+B �yMTؖ������e	�XCa.
+��5�dXe<�qsz<�9K�/�r�`%�����O��j�y�ĂрX݇�w�'C�Ϲ�Q'��SC�@Q��cC�78�汜5��L�Z�ue
+��<�(�!d�V��]T7�Q�_�L?�U�.�l�$�UG���<h�<���fQ���������G0d��!�#�����;v��V�D��{��m�I�"�������v���N-�ӷx��fNp��2��ܒ����z���*y����䭬�����I1q�c;�M؋
+�����M�g��}q��:�1��)�@�s����@�v��[��!o�����"2��:�{�vo��%�k�������w��wٯ�jN�ǥҭ���(�=�M���[l(�v;J��Y��D1�bj�Ğ߾)�F��1$:��7<��;4��z+Dk�(=�/��T��{0Pu͋�j�ƚR޺��W6:Kn���r>f�A���J�N�m��#)�WcEVw,�|����_5�y\l�"\��H|٬��T��|�l��U�|�Gb�u��(�n�֘�0e��N�����1Wm���Q�����Uy�sǷ٬�&��/��b(N����Ky����qP�V�^����	f���Oq�B�v5<"
+endstream
+endobj
+1021 0 obj
+<<
+/Type /Page
+/Contents 1022 0 R
+/Resources 1020 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R ]
+>>
+endobj
+1001 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 588.189 80.996 596.9]
+/A << /S /GoTo /D (structbsec__input__t) >>
+>>
+endobj
+1002 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 569.26 85.181 577.971]
+/A << /S /GoTo /D (structbsec__output__t) >>
+>>
+endobj
+1003 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 540.867 118.655 549.578]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1004 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 493.544 106.102 502.255]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1005 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.662 493.544 210.71 502.255]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650ad30626f0de1be98802cb5e50c8b67207) >>
+>>
+endobj
+1006 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 484 93.549 492.791]
+/A << /S /GoTo /D (structbsec__input__t_a000803d39a2be521f2b5e7017c31303b) >>
+>>
+endobj
+1007 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 474.615 110.286 483.326]
+/A << /S /GoTo /D (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad) >>
+>>
+endobj
+1008 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 465.15 106.102 473.862]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1009 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.662 465.15 210.71 473.862]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1010 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 455.606 93.549 464.397]
+/A << /S /GoTo /D (structbsec__input__t_a000803d39a2be521f2b5e7017c31303b) >>
+>>
+endobj
+1011 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 446.221 110.286 454.933]
+/A << /S /GoTo /D (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad) >>
+>>
+endobj
+1012 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 436.757 106.102 445.468]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1013 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.662 436.757 198.157 445.468]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a381b968290256e77d50c4f7e92bfb27c) >>
+>>
+endobj
+1014 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 427.213 93.549 436.004]
+/A << /S /GoTo /D (structbsec__input__t_a000803d39a2be521f2b5e7017c31303b) >>
+>>
+endobj
+1015 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 417.828 110.286 426.539]
+/A << /S /GoTo /D (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad) >>
+>>
+endobj
+1016 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [66.451 379.97 122.839 388.681]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1017 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [83.188 351.911 114.471 360.288]
+/A << /S /GoTo /D (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a06af666972edcebef3302d015f1d56c5) >>
+>>
+endobj
+1018 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [99.925 295.036 164.682 303.285]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) >>
+>>
+endobj
+1019 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 114.804 129.639 124.445]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1023 0 obj
+<<
+/D [1021 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+916 0 obj
+<<
+/D [1021 0 R /XYZ 29.788 180.037 null]
+>>
+endobj
+1024 0 obj
+<<
+/D [1021 0 R /XYZ 29.788 161.467 null]
+>>
+endobj
+1020 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F97 510 0 R /F44 228 0 R /F163 997 0 R /F159 996 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1045 0 obj
+<<
+/Length 2770      
+/Filter /FlateDecode
+>>
+stream
+x��Z�o�F���2`�����!n�\��M�kEK��H��8)��wfw�iY��NH-wg3�ۙ�����;f��3j�,j�>���g(��8$`��%'�t�<���~ݩ|	R��b��N\'����l�b6��=�'2`V�� ܑCIS�Z�aµ<��q��m��}�^\WH���RkR��3"��i(�󪄶
+���7[a����4��jL�e�z9���쨥�E)��H?��j��+Q���u�ֵ}��U�ӵm���׃���.���=��H�	��Y�w������]ZfWY��m����qZdyG�n<���(ä�����G�>Qk	�(�[���am��]������ p�V�ԧ��c:0�%�c%�_�ux���*�$Ku��*Y�J�C�4����qn�q]��l�!����EYZ��ÝY�����A@[Wt�z��hc�&�?d�����.�/L�~W��
�pLG�0e��������?R*�0D0��P�yn�?�%��e���1(���G�0]
�A�K!b�\�J�}�k���e��_b=D�ڼDU��i�l�E��̗,�|U�%c]����a��Mp�Ͷ%�/g�f�=����L��-$,U������FU�����ң<݀jrˀ���pQ��|��X0%��ِ�s[8.ڮ���h��$զ��M�ХqeKnh,60������cWy(��p�q^����`H{���V�~�e�6l�o�A�bc�=$��`�B;e����\�Q|�|���.�5k��qObqWE�.��ڷ�	�4R;V��sD[ٌE��<^���saPUE��A�,�E�Z!a��V�}V��Ȧ�o瞜MN=i���_v�C��kF�DB��7C��#�"�M9�z+�\F��rrV�#ҟ�Z�쨅 ]��uh��za��������j&�hGG���5hT�`$'X��_�&xk�	($ ��	j��L��`��p���˒�;\A=���D2-���m��6q�>B��w�8,ځ>�y���/�3w�˻���ί~��j�����=�M9c����7LC�B��[�)�co�g^��|�UϷw�+���1��9�͇Y��&�q�K�����g����J�Ƞ�?*!�@ܱ8�� &;����H�(
+)��@���y�.�cAA2����!����j6O��}sHi8����;�F0�7P�@A"�Y��IM����M�}�
+����7��i���*r�����������H��+����Y����T���@��H8�����؝# B0y�<;Q��g���\�S�f�<�>�q:��yV���8T��j"���pǡ�k�0�㪍�����r��[�}ƚك��4K���0��4��(Y*}+�yX*�-vr48�(I{�F��m�u��Gb�j���k����s~	�MجDLڍ�̝�n5_�a�k(��Ӽ�2_=�(�<|��J��|�Ȧ���9��e�g�[���q�y
+����~;g���Ezƞ�mt����y1�biv
+�z�õ�e�p�i��T���$L<�gu+��=�q��Y���l#���q&�i�Oq�*�[B����"�w��{�{�j��s �'��e(�
+�����+9��3$�G�go�����ñ�a*X�˨���0�as��{<��-��P�`�vi"�8��.c|u�޺D�~s$����ﯚ3�ߛ��:���U�EqWm.�p�8�ICS/��ڻD���q���J��ԇ?	<j�7jh:\+h������k��G�?����<&޲��K�}�Ľ�l�(,��/!P
�e�d�i����	�?7�Q#��ÁۃO����^`	n�#�ᑕB4�P��u��%6:�a���:gr��:X�^����z�f�`���wI�;��o��~7�,O��V�LL�E���dUf7�����%;�̌U����z`P<���s�bϜ��� �F��(]�pƔ�cT<'�n���Y������
y���$S�ڠ(�O�R=����f�\��]k�3������{���!i 0e7�A<1��2=����1XS^�IJ�:vL����~������=_��:��)��!]]�w����
+l���R_�s��;L�� ��ޛ�=1�O��iw4F�}���w�-
E�$>�쿡A9��p@��S/h�Jq��)r�|RA�n�*��ߌܾ9��R��֨��<�0�m��g<�UC���	=����@�ٟ��Wa��E��_����3Z��*�wGf����fe�ZƟZ�,��ʈ�B�]��?�m�3j��3���^�>�;w�lu��~�3���\�M��|TU�b4���2�O+0`H}ͬ��#�5,Chs���ѫ����x\
+c����W��}
+}��Im��\��$п�^�E����b�u6�̚��L���6�?�a.Q�v�1�F�~v*���:�_�Ac��
+��՚�c�V���}_�U���nͥJ!��	���Bfj��{����jӓ�;[�=�<�{��e��c�hw^/�������m'Z�F���R�[�6|�[Œ@	�=DX�K�w��Ɲ+��S�^o���������ey�Z�}�n�Ѕ��n����
+su�K��oZ�2)�"ܨ�,�z�ɒR9S���y�������s?SD��_T�6a��
��1��m���9,�׻�p$��U���}�$]V��(��>�KR�qȣwO.��h&!�/��:�_b��
+endstream
+endobj
+1044 0 obj
+<<
+/Type /Page
+/Contents 1045 0 R
+/Resources 1043 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R ]
+>>
+endobj
+1031 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.91 678.264 411.796 690.767]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+1032 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.485 664.715 524.921 677.218]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+1033 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.541 625.701 240.588 658.026]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+1034 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.68 598.603 567.119 610.833]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1035 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.953 319.384 260.921 328.175]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1036 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.611 309.919 298.58 318.495]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1037 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.478 300.782 227.447 309.246]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1038 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.4 291.317 248.368 299.781]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1039 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 253.132 122.839 261.923]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+1040 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 161.172 129.639 170.812]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1046 0 obj
+<<
+/D [1044 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1047 0 obj
+<<
+/D [1044 0 R /XYZ 29.788 571.106 null]
+>>
+endobj
+517 0 obj
+<<
+/D [1044 0 R /XYZ 29.788 230.97 null]
+>>
+endobj
+1048 0 obj
+<<
+/D [1044 0 R /XYZ 29.788 209.939 null]
+>>
+endobj
+1043 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F163 997 0 R /F159 996 0 R /F97 510 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1062 0 obj
+<<
+/Length 2807      
+/Filter /FlateDecode
+>>
+stream
+xڽZ�o�F���2`����`?�7��i��@M���w%Q!);	��7)[�Q G�̛w��1��݇��Y�g�Y8�ys?�/�;"($�	8E>N&����{�/�
+�L{���aw�e9g=q�0��/�C����
+ޥ4�,�q�#�<��*��A�����b��8U��p6�(�/g�a��FS��/.߮��:VǙ}Z�1��R.A���XF]S'D����T5�.��%L9ha���usDV������$�,800�H���wg�?(	C!�}��ޡ!���Ccﻹ�qr����ܥ~0���<�
+������!�B#�B�i�����9|����T�<�k�x`�ʹmʀ%"��̧��8�	�Z8c�>���Q�t�����������,*�tc^��%s�:OcO����#h�VM����p�n]��I�Z���j�I��w�,�D>H�X�F��2�)L߼�
+���}E�4�d��V��6Kc���fa����nU��6��$����h�;=�(L�}����1V�X�����rO��˟s|�X�Đ�������	sl���aS뺦C[�����d�̡麐�T���H���������2�
>*���ydHd���O�5h����2댟�����[^ȵiϾ�gL�tEB)=Z�@�PM���*�A�ǁQ�i1�/�+Z�z����|xRbL{��D'�i�?�����L+K�O����z������[0j+��L~�%����L'��~/�i&�o0�������z��u���6D�k������\��z��9�B�0!x��*�e�D��{�<˻jl��o���'�E	o�JfY�}�L��4�kL�����r;p������0}w�����������߮��o����I��O�A�t��C�̨C�ZQT�S�Dú�C���m����	z!{��,ZKp���d+{ٰ�(x/y�0���`bL@ۤ��
0��%#疄΃�Ҧ�a�q����"2$n��t�O�>n��	J��T~�ŋ�bI�%���@Y��̏����R�X��Ê���s0�'(�JgW6�Ɲ��u����E3��F&���l#�l�e����e���V��#�����_�VC[9���U+<�u)?B�=�+����T�o<��q�_n�|�o�S���'gW�z�q\
zN��2yȹI�{��8��V8k�p]�l�S�\��y�����%M�Q�d#�l���@�`����<d���#�4�Ú��@��urd?��a|6y�L�����{Pz##(mr�.���w����d�V��&L�D�}���}�K�G�`��Xz"

U�z"/KY�<��pzc�pm��!�j	2������u���zP/�THlEV�������\v��D=��>���OO�i$46�k��
+��"�_ ���0.�<m��E�q���&��͢X�lX<�@�g�誀�_�=݃E��Hzb`=��/�8|�R���V����q5��&S�"`��c�`�m.��b��	��r�6���������$;
����R���������Za��v�S��`�ae��i��*l,�݁�w��0�߭.�]� �cR�����YVƐ8۳GB˩�
L���>��q�Q� v�����TLn�F뭊Z��l��w\u$��6iH�6���*�����05[ɶ�;>D�ڸj�)�iaFu]��{w�ݷ�|~�ި_Ŋ�Ya��e�����y螢�\�Z��.k<l�f�Ā�l������j�1��������q޳H��X��#�6U;��U�w����y�Ѕ��`�L!ni
��S�C����x_���>��Aʅ�'�`�eԾ-��'P>�Z�Bh筳�r �,�8"�"d1��~�P���������Մc���ĹWx�@`�б=٘��<-�'J�.SF��ð�HP�6�l�v&�E���J���>a�LF<���9 ���[��4z�pRB`�iϡ\4Sr����~$��׍#��O��s%�OOZ��8��M��X�����Б�%�iT	N8P�-o ½�Kp��)=�����c�j��C<��Uo��G��j�=���=��}��:o7���	��:R��)�����)��t^d��(�Ϥ��R���f�1~�ݭ z��ߞF?˩z�@rc�>���it8�CW	Pj���$�_%x�UBr��Q��R�ېu+ˑ�<����G]ٓ"jmqR�������7����MR{�ɮ~`�ûtn�05V���ԍ�=(���L�R:y����f���w��(�/��B���ޡ�l��MZ$�44�2_��n��o���Lf?��>%�t�΅����n�����Y����^��q�K�T��0�YW���������L�Q�p%
����մ�WzC�z�F�~^���h�����C1�.� �v�����3���IQ�\vt�F�9���� @Sj8��<#���Q��`����d��s�v����nc��^v��utk�����m�K%.�ղUE�����B�	t�$���k��s�V�������`����M�����T�Ĭ���n�֓i*a����q��\����+��[I��A�(c�qM~�ɛ�����6�"�p�+b�e�b��+鶍B꾒���E������m���$ߦy��‰��]�I���}��m��wq�
+R�<QW�l Qd�l��&�@VS�����Q��*������@>�kj��Z��J�x��O6�b�ܜn�2+�?��]���K(�Սo¡�1��n��e�{
+endstream
+endobj
+1061 0 obj
+<<
+/Type /Page
+/Contents 1062 0 R
+/Resources 1060 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1041 0 R 1064 0 R 1042 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R ]
+>>
+endobj
+1041 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [526.903 725.921 567.119 738.424]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+1064 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 712.371 82.93 724.875]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+1042 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.194 712.371 540.827 724.875]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+1050 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [381.448 659.809 551.391 672.312]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1051 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.4 388.862 235.816 397.327]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1052 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.058 379.398 273.474 387.647]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1053 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.506 369.933 260.921 378.183]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1054 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.584 360.469 240 368.933]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1055 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.506 351.004 260.921 359.469]
+/A << /S /GoTo /D (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) >>
+>>
+endobj
+1056 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 322.284 89.365 331.075]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+1057 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 237.097 129.639 246.738]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1058 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.192 223.638 158.088 233.189]
+/A << /S /GoTo /D (structbsec__version__t) >>
+>>
+endobj
+1059 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.035 60.127 153.391 72.358]
+/A << /S /GoTo /D (structbsec__version__t) >>
+>>
+endobj
+1063 0 obj
+<<
+/D [1061 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1065 0 obj
+<<
+/D [1061 0 R /XYZ 29.788 632.312 null]
+>>
+endobj
+883 0 obj
+<<
+/D [1061 0 R /XYZ 29.788 302.187 null]
+>>
+endobj
+1066 0 obj
+<<
+/D [1061 0 R /XYZ 29.788 283.645 null]
+>>
+endobj
+1067 0 obj
+<<
+/D [1061 0 R /XYZ 29.788 193.864 null]
+>>
+endobj
+1060 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F33 531 0 R /F30 532 0 R /F122 619 0 R /F97 510 0 R /F44 228 0 R /F159 996 0 R /F163 997 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1086 0 obj
+<<
+/Length 2323      
+/Filter /FlateDecode
+>>
+stream
+x��Y��6����Z���)J�OI��]�q[�r�B�i�
+[r��M���7|I��n�m�]Q�p83��͐�Z\�!Ѷ���6�ѫx�<��\���(�I.�FE��������t��(�|֕_s\�Dz��/E�xN��~&����9�zzv�IDXɌ A�f�L`�f(ϴp�HSƩ��sTE'��v�f�M���騀�z�g��D=-��8�V���Բ�˜F9<��'�O+ab�Afu�'t��u�,��l�AȌ1D�T����z	NIʹ��b��,�dn�{������vu{�P���T��M�V��,��x��!\�Y6�4����h
��G�J�{C��� �vѻP�(�2I�� '��6:5t��D��J2S�݋���Nm��+��v��˵2
+��O����֪UlD�zI(�$�%l'�
��"��(9��	~uu�*���a��tN��p�%<�[���`E���:���U��;մ`��n�1z�,p�F���[��lU痚-����61��D=4e�m4� 	�`I�5/��~m�>�;���xk���F��d.�7�����x_�Z7�M�?�gY}a�T �����o��vS~��`=���^r�
+��h���p�Yi9"�"ral����N��f����Q�,�&�h��0�0�wW.���xӨ�o����� �5�w�(%�C|'�P���]]�/m�y�-���2D������,v���"Ww�N�K�ct��2���E�!�m��zTL�ֶѨVu�Yo�Ӂ)���>����^�9ˏ��*v��ڞ�9�ş�.�.�e��[�L�n�@��Z�ʀ��?xJm�4�v���ڊ;� A �ԂB �3kAġ4�RMU�7��u�S-c".��k-q�WIW�%^���֪���S3�vE�g��1ӕ�K}t�J�(��ާ8=:L1|l��L�D?��L[��;m�dږ[��n�z���n�;坫���V���u-�L#S��ܲ
+|�H�A�����н�/"�[el-�=xhF�������d
�s/�inP��~��p3�V3��=cg`lt6�"��Vzk*���08�'�Vs��u�����.!5L;��1��x�h
+�:Knm���@&ř�kr�т(h�sB!n�̈́����Pn�W�+-˦�}c;j�E�e��l���ƫ��O�`�W;
���1-�B���ce08�Ap�^�=x��^���-�!�@�N�إB��4H�n�;�_'%�Ǥ�P��H�=�hfف)Ā3[���5G�����Tb.�ܓ�̱���06M��.�i?u�U4]��w��ջ��z�zV��F�S�Fl�A�nA�J&.�4���n�=�U�de�1x sb�Y�<�n���N��ν**�61��'���������u~~ ڧ���3�L���d �T�G�z3�t^?}���K3�Vš���L�+��9���1�l�~Y/#;0}���#I�u�7ES��S����9 h>?/3ȵ��L	x��{b��,r͂ ��Ǖ��nN�:삝fO�T`�3O�1�H�!����	����Jum�V
+�
+���H�0&F�dو;"��iK0]3a�3��b��ٽ	PH��
�EL�e'��tI 5��,KF�)) *�ϗ�N������8^���[��)�L�[�yMt������+_�B)�&	�H�s�5���n����͏���g�$��	�Bfa�$��ɕ��]S�x�h��cJ��\��)��rM�-��_��|̵�	���l�(=��P�m5P�3OS�,͝�!����?�Én��j���J���-���mߗ�m�;����LYX���U�7�����j��L$%�B�K!���/�'�
pb.����83@%��i�֪Z�Ɏ�� 9_`�������%<J$�p�}��y�MHυ.��F������T����P��%O����A���#���)�ʼni��u.����?`J!�!����A�`g�3 r�Ut��F���$���=�0~�0�χ���o�j�����6|�"(���(�k�Q�8J��W��qVV���($H�Df�����4��x��g��	��5.b�������*q���sD��|�!����C��J?D�+�_���ڷ�4!�����k����'�m�B���C�ݵ�������_��=�m�3�X}8��3��uh�u�� ��B�u��k�e�)Z6��0Ԧ!�ܫ���
+w�)��)E�
�@*�]9����"��ֽ ��;��s�C�8h�A��:m�7e¡�u���d�?ܺZ�
+endstream
+endobj
+1085 0 obj
+<<
+/Type /Page
+/Contents 1086 0 R
+/Resources 1084 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R ]
+>>
+endobj
+1070 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 720.495 89.365 728.96]
+/A << /S /GoTo /D (structbsec__version__t) >>
+>>
+endobj
+1071 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 710.704 97.733 719.495]
+/A << /S /GoTo /D (group__bsec__interface_gae8fc6d614d6a40f0088262dccbb960dc) >>
+>>
+endobj
+1072 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.717 701.239 231.631 710.031]
+/A << /S /GoTo /D (structbsec__version__t_af823001b85e62b90279f9e6f3c478c23) >>
+>>
+endobj
+1073 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.482 701.239 294.396 710.031]
+/A << /S /GoTo /D (structbsec__version__t_a9d47d254d17740222791fa0f53c7ac52) >>
+>>
+endobj
+1074 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [53.898 691.775 106.102 700.566]
+/A << /S /GoTo /D (structbsec__version__t_a3d9b11a72027026f492a438342a2efbd) >>
+>>
+endobj
+1075 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.953 691.775 198.157 700.566]
+/A << /S /GoTo /D (structbsec__version__t_a5daac4534748c6f0be9f009273613b02) >>
+>>
+endobj
+1076 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 616.142 129.639 625.693]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1077 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.17 565.533 339.469 578.037]
+/A << /S /GoTo /D (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98) >>
+>>
+endobj
+1078 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 433.03 68.443 441.495]
+/A << /S /GoTo /D (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98) >>
+>>
+endobj
+1079 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 357.071 129.639 366.622]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1080 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 137.485 101.918 146.197]
+/A << /S /GoTo /D (group__bsec__interface_gae89eedb131288b72c267c02ec9dea8e5) >>
+>>
+endobj
+1081 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [104.11 137.485 168.867 146.197]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) >>
+>>
+endobj
+1082 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 60.697 129.639 70.248]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1087 0 obj
+<<
+/D [1085 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+536 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 680.816 null]
+>>
+endobj
+1088 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 662.273 null]
+>>
+endobj
+1089 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 422.071 null]
+>>
+endobj
+1090 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 403.529 null]
+>>
+endobj
+1091 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 281.954 null]
+>>
+endobj
+518 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 126.25 null]
+>>
+endobj
+1092 0 obj
+<<
+/D [1085 0 R /XYZ 29.788 107.312 null]
+>>
+endobj
+1084 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F44 228 0 R /F163 997 0 R /F97 510 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1110 0 obj
+<<
+/Length 3241      
+/Filter /FlateDecode
+>>
+stream
+x��ks�6�?�3&L���7�K�Ҧ�o�IFCQ��+E�|�q�?�v�H��#9��B�b��X�����@�u}�9k�sޞ����w��S�D������������D3�&	D<�ui�ܯE����""<�N�@��cL���CB��	#Je�	ta�E$��8h�����S8��~F|�l���TH����w[�yU���}��Cl��/AI�[Z\�ǜ���\�	w))yT���'|��y�W���)�E~9�q 2�}B���_ݞ]���>�y:�+��$�"'��~�.�����N7�.�ٍ,�jdz���dz׷=f(J��(�F���g�Y����BeΝ�"8��;�s�����`��	P
NP��sh���T��t����4�F�����Bw�m��T�O���o(c� �H��E�qELb���eQ7�`b�M��
��S�7fƠ����d[9��d��0�(x��
�5&�\�����|��e�dź����Ӿ�sBy`)��y��1�@�R�n?�,0!�cTC��y`ِ~�=`.�ㆁk�T��"��^����W����vR����&S��[�����Z� vn����F%z��"��k���o�2�<�`'eNQ#d�JRdfg��&�j�7y��dҴ�*WzU����yY���</�,�BeR��ѻĢU‚F��z���E���]U���a��G�RW#=4&Aa��^�-���e|@ڔ�e3#ӉKb��I{J�ϕ��a�u���3r����|#7ɶ;0[IјY�J
�N��^�M�%+[��b�&Y��#�S\
+N8X��R��m�B.�]����^7�6��d�Y�
쨬�X��A>p��vz	,F�ݞS/��z(WJ�spW�w����$��$q@�DR����3���}���ű���1�g��.�Q1�j�
������f)�4�K�6��
+P���He���B#m�J���~��10�H@,��k5�D9�]:+$��؍���q�<�P����b�����*�Z
����/�1
+CUn
N{Z;ΰT���=�ξd�����{��s-�wB��6F0qH�P2�<�9^oNH<Z��N�|�K��U��:����5�)+�Ⳟ�xg���J���ih	B��MCU5�6Z��H��C�I��Asa�$�T���0�8)ʹ|��2��d���83�w.�����G>�pe�~��l�XI�V�Or�ڏ)L�x�H��"<M�Њ"�Z1�"8#1���>WImO�ү�A�4�@�'���q;!3g]�bd�X��M���螤0"1F��R�t��Ґ��j��ᚊF�B� |IA��^K�$f+�${�;~�����o�%=�k���\��g���l5�ۃ�����it�N��.���]�
��_�x
+�d'���A�.Ƌj�2mm����.�k;��q���Z�SM%����"���C��Ň�N���w��	6����F߀�\�PqH�ň13b�U���`չ�;��&���]~�_�y��2��TVe������'��\5�0�������"�2��T���z�Ƞ4a4x$�|\��㨫Lp��a��k���!S��c8�: "L�B90O�i���2s6E	#�2����K������T��Wo��'����,��F1
N]|t6#^<Z��.��9�},��i㑯���=�@�h�<�{&�y2�X<�
+l	�ߠy�{p���'5�m��idM�^���z��;����'�Ʈ=�A6U�>�?��ûa�.�ȇ����&���2W���a�>��:	qI�kɧ���8����&v�,���1�*��A����u�2pt��Ϳ��l��Fڬ�MѩB�n�m	~���l֘8YUv��rTdb���i���и7N(a$:w��٠���
+�Qϩ�aO�*�Z�T��:{�ra
�O�*�j'j	TIx@A�Tg�<~Po����:���<������9	���h�5i�����,ɳ?�3S��8"�����*~���z�`�Gd�$�Q����m�hW+YMS��Ú�i<�V�����jQL8d�O�Ų� ����F�ӗ��*k6[{��<cym�H���
�=H��wu�ԏ�j�J�̖r��y��,��+]fl)[� ok���z�v��3�&X�u	�`�"k�$�@����i,�c	���f��i[7���;���f�T>��\�"~?5�F�T�>��a�7N�Y����]P��S��o.�p���L�QJ:/�m�.�,�O�:��hUq�~�f�T����c�uL���\t��6��FW������
��~t[�+Q���)��-%V�Z�g�r���>���ر�\ņvܭ�.��}Y�hb����� ��Kn6����C.��W�=Zcul��_�g������o�;����W�w�����Cbe�Y�V]0��:������������m��#�X'8:����(�G�Ğ�FDI��O�J^�
�mQ���؆��I�aD�S��	>�^��ى4�t0f$���O�0�ؓ4�c���;k��\Ld�CAFt<�T	0��Y��<�������*�2,`����H���>E��am<��im�q����Ҭ�Z�����M�����ه�ۘ3����D����g�a�߆��5ا��˥�ǧ���ˀ ��;�n�c������J�D���K��C]��7�$�_B)�b�R_�"�?5�We��+�n�zq�_�ܞ1s�޿"����rՃ*��O���\��T������£� l���0����v
+F{
+¡�����/`�
+\2���}�M����z���(=���r*�S8�1�0�D�9;0�9�Ι�{����H>o"(7�����}{@��:g�h�Mv{�܂u�S���xx<�~��y���[���W��L�
+K�@�~;�:�I�[ɧ@�BBè��r�Mƀ�ښ�n�0��s���cF�_���\�/�^a&H�ՋH0�<<��}�{�	?���v�=��
A��|�R��A_��7����B:PO��Z����"�z�Ր{$�����]^f�2�����,�3=�V.�F�o!��h�l���$�66�<J��N�G�q���w.J~�	���&��~�ѽ"\�H@��p'�ƄWZ8�ќB0��iSN��x_����E�+
+endstream
+endobj
+1109 0 obj
+<<
+/Type /Page
+/Contents 1110 0 R
+/Resources 1108 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1083 0 R 1097 0 R 1098 0 R 1099 0 R 1112 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R ]
+>>
+endobj
+1083 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.192 715.476 181.624 725.117]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1097 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [50.126 678.506 159.06 691.009]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1098 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [70.944 637.858 183.008 650.362]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1099 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.392 624.309 567.119 636.812]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1112 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 610.76 96.25 623.263]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1100 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [62.97 574.27 172.875 586.773]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1101 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [250.911 574.27 355.984 586.773]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1102 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [161.817 542.476 271.722 554.979]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1103 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [41.152 510.682 123.784 523.185]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1104 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [290.969 492.437 445.154 504.94]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a300b00f9580b9af76d441cd4db8d7083) >>
+>>
+endobj
+1105 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 303.655 129.639 313.296]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1106 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [101.545 198.939 222.98 211.442]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+1107 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.68 146.376 567.119 158.606]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1111 0 obj
+<<
+/D [1109 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1113 0 obj
+<<
+/D [1109 0 R /XYZ 29.788 481.478 null]
+>>
+endobj
+516 0 obj
+<<
+/D [1109 0 R /XYZ 29.788 368.274 null]
+>>
+endobj
+1114 0 obj
+<<
+/D [1109 0 R /XYZ 29.788 349.732 null]
+>>
+endobj
+1115 0 obj
+<<
+/D [1109 0 R /XYZ 29.788 118.879 null]
+>>
+endobj
+1108 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F163 997 0 R /F159 996 0 R /F33 531 0 R /F30 532 0 R /F89 511 0 R /F97 510 0 R /F44 228 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1129 0 obj
+<<
+/Length 2722      
+/Filter /FlateDecode
+>>
+stream
+x��Zms�6��_���	�y���\|n:M�ڞ�]���� �w����t��o�)��lK�]o�	!`�x�x�X,y~{}żyyB��G����1x~��q@bƼHr�d�ڛ���%|ZH�j��N� ��:��܌�<��� "2f�d�@x ��v=kuR(�D詈��qT��}h��#�0���_��۩��	T�6��*��	����K���n��Oc״�z^#a$[Ӳ梔{1	d�gg��3V�̪�
��릸c��n���e��H�����=9�;��	K��ۙ�c���S�]�۩�q�6/'��>W��Fge^Tzr��������d��U�M#���3�����G���{4�K�[x7�9�Y��P<�j	8�VsoW����X�Xo7�sx�Uz^$U�g��r�N��о|�����E|\:|`
+��OB"#���$J��UR$K]��@�ظ^ʾ�E5&���Z���RG�:(t��t�t�UN�Yq�yۤ����Qh
�����r������u��dʼn��_��T{Uuq=�ſ�w�O�]�(���;]s�i���)�F�²�Ab~�K=��*��UR��Uݻ��"��F.C����F��,P���8v��Fv�xv�W$!ּ����y �Afv0e�7�e���M�alT����G��+w���w07yH�Er�pb����7��{1x��m�U�8�z���h����8��~��u���G�g�J>�×:O�.��x���4-ד�.��zq�V�^<��I��.�z�&���bb��	l����/EbE�y�@�a��v~~�<]|M�+$����0��!���10
����,�$�����H�r]�y�Ld�ЬӬ�ƕ�Uj赀�5������G��zJے�f�6���!BΌ?������立������������.�X>�>�5�! �$x�(`/�����{�3��@�8d1�f3]��ja�Z��~������.��ȓ�-%��*��]�$�f��ѵ*���2�"�I��-�c[�V�o�h\���E�]��B[ooĻRO�x�v��D:0��gv��[��x@��6�:<���w�e��P��w���:$a���t3����@����WX���p���FT�L�H�6.̑1�z4v�B��A`�&!�cn��/���t۬��&FbA�B�p� ���Iu0K�&����T(ZR<"��ګ��φ�1�@ -p"7�b`86fMx7~�x�Sg�'�#	�h�: 1,���t�B C8j�k̸5T\���`��x3K�;4�@��x.�:~)���_V��.�d������ґ�T�JQ7B�C�c�I1�oQ%�zW���Y�^T�����6JE9t�XS�s����1���+-��za5�GMm��5��� 9��G����QnetV���@*_U�K�f�d����@�P�&OcB�����JO���ƹRθam�p4OJ�R������	:`��]��l}ZYٴ��=ɗK�M��T��)6�����kVY�Z���<�Q�q_�'=��T�;=C�
3���8 R9��3<����f�Y�ۼh���1w��\{�mv�Q�g�C��s��-�2��T2Kc�� ѡT/9��d�{7"1k�B��ew�.��&tne����;�M.\���8���j��2�)������㒛$���`D���F�}����\���z9IuV�&�6M��PS�/�0j�ZB�}���V�!�����L�7'u���[�VO`GרjES܌��ԛ�;��{&�U�3A}�5��<B�p�j�
�K7K�f0�����W����j���
+�y6�/��w1��H�܉�$)��yk�5<m�-nsX{G�.M77`ET}9�#��TD�x2c'A�x"Wq�
+L�1�	��?�u���6����\ہ�smmH��o(�� ���H�9;�S�
��v�N7���lY�5[mG��Cp�?�m&��0G��8��2 <T���e%,
+�g�a����ƴ}y�����A�6�{�
ح���n�=����y��T�{u�_���&�_�؁��9؂��k1ǾÆ�fe���k/�j^�{�T�B���q*/7��ux	�q�
+��0Pälcz�+1G��`�p�m�+���{Om�|bu�_�[��b'�G:������㘯S6/���	��[��4�D)���Dd2�����wb�F����%Ub���ݿ���?�+�sr�ds���\!ы��,�҉�:�������*��zy������3��ܞ����"����^�7���o~�4�Mׇ+���۴t4xE�J�5K`b\�O�ګp�│M�|*��"n��
	K���i�wɎK�KNpʩOC��^�`?,0�z�p��&�H�~|��������>�Kaw��<%h��l��x�l	���;�{�~�����X�>$�o��������qj��Ǎ�[���t_�Oؘ����d�f�f$����a��l���8��]h���jo3��M3h��ז�_�
a���[7�_�u>�"h}�?��ry��m@n�S?`�lۺ"��cŔ�:�i�dQ�u�<)l�&�7�z����L�C<�_W�<���pU�^�t=i�������p��*һu�ORZg�$e��m��e������6�`�g��Li�o;�c�M��~a�hW������<��	�4_�2I��Մ�I���P5S
+endstream
+endobj
+1128 0 obj
+<<
+/Type /Page
+/Contents 1129 0 R
+/Resources 1127 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1025 0 R
+/Annots [ 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R ]
+>>
+endobj
+1118 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [145.953 571.579 260.921 580.37]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1119 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [183.611 562.115 298.58 570.691]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1120 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.478 552.977 227.447 561.441]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1121 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.4 543.512 248.368 551.977]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1122 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 495.863 122.839 504.654]
+/A << /S /GoTo /D (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) >>
+>>
+endobj
+1123 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 410.766 129.639 420.317]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1124 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.242 305.96 532.972 318.464]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+1125 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.874 292.411 533.265 304.914]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+1126 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [375.68 226.299 567.119 238.53]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1130 0 obj
+<<
+/D [1128 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+882 0 obj
+<<
+/D [1128 0 R /XYZ 29.788 475.767 null]
+>>
+endobj
+1131 0 obj
+<<
+/D [1128 0 R /XYZ 29.788 457.224 null]
+>>
+endobj
+1132 0 obj
+<<
+/D [1128 0 R /XYZ 29.788 198.802 null]
+>>
+endobj
+1127 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F97 510 0 R /F44 228 0 R /F159 996 0 R /F163 997 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1150 0 obj
+<<
+/Length 3172      
+/Filter /FlateDecode
+>>
+stream
+x���r�6��_�Gy&�	���}�7n�NҦ�v�۴��%��.E����N?~p(��[��t�	q=8������ݶ'�w�ޛ�x���H��Yd�y2�A�^���ɏO�� �`��b$q6�uf�ܝ�<�M���2�2�-7GSH��\$Ҁ��K%b�5P��s\���A#ID�5쟼�;���@��i�N���`��n���T#�y2��[�b$2r�Bv�!�� �d�~���>����!8h��@Zw��F��u��9��HJ!�%z�����PJ&�,JSo��x�Rzi�򞯼����]ޝ�<��kU�uө����N.�1,����2�J
�㯡�����ʽ�t���+�k��@pKX+R�j�	ju���z��'Oل��˿#
o�N�6yW��鋕2�T�>���M�yCx+B0O��%	")<?a�|��^��o�v/>l���s�@����US#!w�Hj��R���/_�@�ݩ�hvsZ���n���1����6�41�s/
�4Db�Dr����ԏy<��=�lK��<�"��1p3<�;/�z�w�>o���Tc�y�?�$��}Qur��V�����Z-�`}�ݰ-J��I��M�4z�P����\|�������_��w?\,���|9F���ׯ��6>�M��Fp��pV-�!�{!^f�p���Qu��M�^��©J���#��Q�oUC(>�oQ��*�|����r'��k����ތ�mu_�}����=��t��9f"�bb`�m��M��t�����e�4��D���V�ܱ�y��k&��i�l�#c��Д�A�B<�Zګ�>l�*@g_������
+�0L(�Dx�B���z�]����i�M���H#�A�"t� �Ds�`�.Y��aWY�4y�hL��s�P{9�Fј(��<�q7�H�u�v�X!�R���.n{��FH8w4�$B8=��	C��OYI(��IX�g��H��[��T�h�>/	��վ|�q�=�#vOB�$����N`[->}�����9#��w�@��=|����.C�F���ہ{;�ψl�혉#� �Ob�"|���0ڇ�if�	h�OR:.� J��<"E�F3��䫣t��;$lJ�P┺�ݶ��`�yЂpJ�!3 7����h�K푧���A��YJ�����iw�i�UDf���r���mj��������U^+�6F�ݼs���'6�Q��S�QK��>��_�}�P��;����SG��m���E�3�=j�)���
�.!�$G�.r�P���J��z���O�
ʧg�|��"�$M�3�dw��'3\T@Նj+=���Z�z��O��ۻǶX���)�HN�J� �L5�"8�T&rU&�D�IF(I��!Q�+0���(���P����I�R��E������h-���Ml�FA:v�?S��Kb�]K4�ۣY�T�l&l��+D�'����@�9��Vi�,WF[��=zx�W�jN�hf���,�ŵ���v��1�,�Dn^DȽ=.�4�g����8�L>q$coo*�����].��痋�o��/�]�~�mÜ��$�b67�t�4�zm��[�~/���R�����{�m�t�ĢEOv��6�M^ߘ�^TW�H���]��@�'��–�6�N��g�f[7]^Qw�WKM�`6{K�yY�-����*� =vG��jI�������<��v{��MQ):ˆFh~�N�=d :f�=��vf%��
+�Y�Z���)w1Zo��mRfIA^ѭ���#�;��N�>�8�k��r)Q@�y�C�@�u�kM?u��\�
+���d�x=��ݚ�Bw���L9[�b$�-n6�ԣ �Үh{�����s��W��!!����j*���ʻ�kZ9xO '/�!�`Z��lT�z$ksOr�����7}�/GS�Y��xo�Ü��&r���)'�B�F�nj/��D��m�o�©ۦ��`�jU�P)��
+�t1!���	#�3�]^�������� �8i��g�BI��+B�H?9�O��I������f��qB{��}ݩg\ Sy2X7D-���FY)��K�X�sC�H��j
+��B���MmA6ꦮW=r�	��Np��
+��u�ܑ���'=��ֹ�������o	5do
+n��[�婓FC1�mYNL}n�XqB}������I�D.�V��wy;��>^��v����T�f�2�j&DH���.�W�s!�@���j����Jt�
�N��9�@��'�^{���E"�4?6E6��a�yse�N��N�3�����4`�u�0�ɜ���pؕ�Ҫ�^m��58t��kL�Q�>�������+@\�t���b<0�1!�.q��j�2�v�����]9<�҇�ݤ]8C��6g���k���}y��Ș�l`�Է��ؠ�����-X)�~p�7�B
dTk
a+
+������+L���ܹ�^-a�l�	�t�b�`�0m��4�Y����8AƂ4a���ʦ6P<�էJ�ֺ���-�
v7��/N�O�	��8q�m<�Ã��"�]�2�����0�	�Ik�Ӑn��ģH@11�&����d�8>��c�(`��e c�
�}�2�biR 3JrP��kz2�f���λ�!����wɺ������C;ޥ�z�D��=
����^���͂�b�թ�r6��������e"C�y�!���a(}S���hs��ʱ#�WiFob�B��xl~+�����A�1i�Ë��о��	 ��X�[�|�����V��ݟ�'��R/D X�,�	���Nl���2�1pJo�?����@���X �U�_g5�މ?��'�}g�^n�
���;�����1�;MZh�6�
��X�A-�� �������^n��:�$`�.�K��*l�M����o��� ���8mwR33�Wy�*����)�T2��{�:M��y��h�fs�-Nh݆$f�~;�cMq{gnst�����t(kk;q�7x���y����
o�6/_�=��}[�Eg�
5
+�Ȇ!HY�EuK�D�r����y`���1�6�<TY������M�~�l����,;I[W�F�&�ToQ�A��'�p���MY�6��q$��܅��
+endstream
+endobj
+1149 0 obj
+<<
+/Type /Page
+/Contents 1150 0 R
+/Resources 1148 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R ]
+>>
+endobj
+1133 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.4 655.664 248.368 664.128]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1134 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.506 646.199 273.474 654.448]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1135 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [137.584 636.735 252.553 645.199]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1136 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.506 627.27 273.474 635.735]
+/A << /S /GoTo /D (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) >>
+>>
+endobj
+1137 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 579.948 89.365 588.412]
+/A << /S /GoTo /D (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) >>
+>>
+endobj
+1138 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 507.669 129.639 517.22]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1139 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.436 494.03 247.527 503.671]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1140 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.192 466.932 219.283 476.573]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1141 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [51.163 416.413 186.75 428.916]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1142 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.472 402.863 228.566 415.367]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1143 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [153.536 371.069 273.103 383.573]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1144 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.688 357.52 220.888 370.023]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1145 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [181.35 325.726 320.019 338.229]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1146 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [105.688 185.213 238.997 197.717]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1147 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [458.318 153.419 564.29 165.923]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1151 0 obj
+<<
+/D [1149 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+601 0 obj
+<<
+/D [1149 0 R /XYZ 29.788 572.08 null]
+>>
+endobj
+1152 0 obj
+<<
+/D [1149 0 R /XYZ 29.788 554.127 null]
+>>
+endobj
+1148 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F122 619 0 R /F44 228 0 R /F159 996 0 R /F163 997 0 R /F89 511 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1179 0 obj
+<<
+/Length 2745      
+/Filter /FlateDecode
+>>
+stream
+x��Zmo�8��_�O��"%j{��x�Y4m�ػKC�[����%�����E�$�qlwq�qDQ�p^gH^��n�5��kn9֛3x�0<�@�c����c�S�|ʬTXg�_�$�f7F�ǂv��r��Xؒ���qDlMW-a�Mi׳$G]a׳|��D����pp�<ϥD��͊��D��!�q���]+*�T���ʵ�`u7����%�]��0�8�����8�
+�<��J�a����`MJs����Y�>Y7]j�|8Xp`��.'���]���.
+��[������m��̺�J����&>�
E�%i.��G��
F5a0e
+�>@�\ҿ��X3����R�����ds����ְ.r	fں>a�
D�O�������M��y���%�p�Z�p�b��y�ĺ�M̈́�P<�}œ�E�xc�U80=�O���(w-���<Ռ�K�nf,h-�j��t��Bh!�pU���t����Y���
+S�.\f�.����S�/"���$�P�S��̰�S������O�cݫΓLLdzd��b�}r�?ܐ�@��C<1".m	Xd���iO��R����9+ֳ0㬘d�4ZK1w0Y*q����<�#�����(�?��AE� �GU�+�5qE*�.�┈FUR�	ta4/�4d�G����OR��"�J<�y���))�C��w�97��.�x.�N5*
ŬX��7���@��V�qJ�w�5� L���ZA�J����e$洗�/�Ȕ��+��j7��J=�6��I*�]���z
+B����&�k�0��Yy�P�,��1���d).���e7�C2
+�UKvX.9�W�^��^����#ʣ�08
J�4�PV� y���'�R��Mzj���9Ƥ���fQ&�.E
+�bs����P�ͥ��-�����L[9�����{3E���������kMĬ�[�a��(7lN̻a�{ZD����0-~�LE83�N��7f�ĉ�J���ALD��zM���i�����V�%�����
S�`.�����	s�s�	ڱ��*Va�ΙAYG+ߜF iP���#��H`(���ZY��=j14]�uu�4��#ގ�|Щ{$O0�F�9��~��ʏ��4/��X,�6#D�x?��m��J�.���*�$�o�C��qb����_��4�0�!�KzA{9A�<0��Oet�y���L������WqKE�hn+w��&i�~�V� �!�p�m#(�O�%'�P�c�2�	4�{�49���yR�)3S��)x�:;�դ��T�����#��bZ����XƧORU��B��*X,�6&����$\�HC�r��~\��"߄:�^\�.`�U'�LIcG@�#�!(|�G�ҍ�/�_�FJ�_CzɳA��kM��������������W�P%	��S�~*
vH����
���]:��N�"y��1֍�:_ڑ���ف�:7�]Z���_�.
+��R9_�l���~���Q�	i�F�1��z*�J�a���ԥn��.d�f3�C��#�U���m�k��k$�P�à�ǭ^q��f�k_�H8��lX�wRe��:���9Hn����ѽ�5e�n�!�L�r���|O�_"5+��B��V�t*��X�;o��OQVnƚv"M7fj�J�r�rl��5cE}w�{O����
��z��L��k�h���{�0��P�P.��P����ތ/����uƨ��tQ�1���G���=�RQ�E�m���s�����r[H�@eӞ]�-[�gQ�g��I��I�eW?� \��a�zQ[DOQ.o��u��.��L��Ir�Z�c�����S��(��c���=<lm���HZ��Q�d��Y�Z�]�ý���2ܒ�i
+�8�R��˲T����+Ju�����<�0�G�.!:�Cv�ې��G�Gci�֩KC9쯐Ha��V�a����`|�
���>+�'��Lu��m<��@��w��̆�_�F�G���
�ÓmF�S�]]����:�;f9���,Kf
S�G��2g�@-L�*L��Q��oV��\˱�7�RW�r�!C����PV���c|��?�ׯ�o��������Q��g�I��
+�!Bx.?=;/��h�Vh���_(�O}�vY׵�U����N��ᩃ붂�;=��� F��Vv�ܐ��nTH���
+d���P�쨿늳�;땷�ja��q�)o����2-3]�y z&�Gi��Ž?����<ԟ����	������.�ȼ_}��<�
+M�OM�*�+�
T��ù��bt� p~u3�c׮"�����8��3=�J�I��8�w�+�l�R��+MN���Fp-W�s�[XڰL�7������&j
��]w��u��v<�Г���C.�b��"���g���f��L�&0Д�@�0�z+�0�.˔�Z#S�Zgv���l�z��e��{WC{C���ݿI~!EsJ9�J��N$FA�p#��j����W/OW�qZ�Fr1p%������77h2mL����ae�Fy!r3�����ت��
^�
`:X	�5B,/�5nD�.�݈�W�{����?Hl#p���0Gץ�|!��T�x�yͣ���?��t�����0��IÒ�N�p�:�vD��y��T��dVL�*��H:m��H�i4)j}�L;�Ÿ�m��rY^3Wv�Wţ�s���p-omtD��''��Z��9k��i����'T]n���>����<����_
+endstream
+endobj
+1178 0 obj
+<<
+/Type /Page
+/Contents 1179 0 R
+/Resources 1177 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R ]
+>>
+endobj
+1154 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.816 706.099 439.449 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1155 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [144.264 684.865 280.253 697.368]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1156 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 319.63 196.93 352.266]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1157 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 306.081 173.879 318.312]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1158 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 292.532 163.57 304.763]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1159 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 221.68 143.761 230.471]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1160 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 193.366 189.788 202.078]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1161 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.349 193.366 265.106 202.078]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) >>
+>>
+endobj
+1162 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 183.902 198.157 192.613]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) >>
+>>
+endobj
+1163 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.717 183.902 294.396 192.613]
+/A << /S /GoTo /D (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) >>
+>>
+endobj
+1164 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 174.437 189.788 183.149]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1165 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.349 174.437 315.317 183.149]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea792b0fbeffceea19513cc0bd31ce7ef7) >>
+>>
+endobj
+1166 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 164.973 198.157 173.684]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) >>
+>>
+endobj
+1167 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.717 164.973 294.396 173.684]
+/A << /S /GoTo /D (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) >>
+>>
+endobj
+1168 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 155.508 189.788 164.22]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1169 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.349 155.508 302.764 164.22]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea5f42ad42c6bb71627b5ce91d4c410985) >>
+>>
+endobj
+1170 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.137 146.044 198.157 154.755]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) >>
+>>
+endobj
+1171 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.717 146.044 315.317 154.755]
+/A << /S /GoTo /D (group__bsec__interface_ga216b6f4807227a2c6a183aaa9a8b8d7c) >>
+>>
+endobj
+1172 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 117.571 143.761 126.362]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1173 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [53.898 108.433 156.314 116.897]
+/A << /S /GoTo /D (group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) >>
+>>
+endobj
+1174 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [187.796 98.642 290.212 107.217]
+/A << /S /GoTo /D (group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) >>
+>>
+endobj
+1175 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 70.328 131.208 79.039]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1180 0 obj
+<<
+/D [1178 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1181 0 obj
+<<
+/D [1178 0 R /XYZ 29.788 592.073 null]
+>>
+endobj
+1177 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F89 511 0 R /F122 619 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1233 0 obj
+<<
+/Length 2738      
+/Filter /FlateDecode
+>>
+stream
+x��[[o�F~���
�㹒���A�eW�-����HA�h�ITH*�E���/��P)(����7��|�6]NF�x	ϰ�b`��.Ǐp��!Đ�"�#p��_k�/	S~MPd	���e�g�1�k�[H�b�������qf#�,Ö	B�ЄgT"G*��IJ�
+���1��~<C3@S؅S
�+�o\�̸�A���Wc�Zf�� Ȓ��V<\S�A�K�>�U.�I(�&1�a�b]��=��c��:���� �d�R￙�]^)	C�mc�lP�R���da|8���Imy>v7�D������g�IA…f�-S��?���<���0������Us��+c\�1J���̦��8�	�z1�=�4�@���M*J��oc��}	f��o�7;o�j�����$�!��*ɀ!���P"G�(r����n,Y�(O�������%f(Db��НOW�S0�N7��iTB��&�`Ɩ��\�&i��ml��rp<#�{0�SP�Մ�� Q��;.C<A�~���6��v�������pt�#u���V�{-�dQ��#�(C�U%2sdFd�,Ę��ʧ�p��� ����L�2��Ǘr`�E(��`��_�Lk��c�����;�.M��ŝ���p7��a��[��f�[V�� �t�َjj�B�tk�	��?�;*���e���'�?��O���`��w;�'�'�$�S^g���x���o�_Co>[�9I�]Ǖ��[���,��<��z"���DF�6T��f�]�H�Ăza���O��^FK7>�4[���Kr7�={��,�^��q�,%$�X��O^�f�Ҙ�5���U#����!�BWmL a�ê���s��H��Np��a�``�����`2>`��L�0�%i�]��|�ڥ�yNI��<B�e�R����BV�}�0�خ��J����`�̢�X�C��%����C�jC�ǐ�ʤ��W�����I��??�<�?/
+t�ۮ����
��a�������c�1������W�@Pƻq�#��$���Xt�����R�K^�d���?N���Q�8������$B��,I5�c�ݵ|M��Z������ǥ�Z��O�;'d|��n�P�H��\��n��.;H�������;��Z#�� �[��C�A������~�rC
+�-�T�
++'���������ㄴ�z
+q2����������ix��9۳����a�B��k \1E����Z��m�i@�6YϾx�x�r8��]���'7('Ty����*I���)<``�iP7��q�,�+�60���Nu=���I�*����ɺnj��`8����`o�ף���Pt8���ťb5d-��������7���V�:/��P֍[1�8^0Ҏu��3H{8TPV�&�����������7� �Ϣ����8�"�$-rB��ʝ�R���A-����0�Nٻ3�t�]���p��o���^S���
����p��$G�#:��+�&�:�#�@U/9=�A�6��g�{w�}��c�'�&�qI���������9=��0ֳ(���ً���c�m^�5�t�T��٭��E�Yc{lI��d�-@E�³+��"�8HR�c(`	
+I��<�>([�9
+N"J�Q�D�d��3+� �e���2������F:����E���]149E�9�X.,PW��"P��A"��PN��+K��P��^�$�?,;9�֟�C�^��P��������ѵf��7�4.�(.�ZL8PA����D7��
A��)Ž}X
#��~�ZaA
+�,qj	�r�o���D�s�z������$R��$֩Vi����Y��s|�lc�͋��|^op�՞&��*���b
�(i^b6�Xy1���T'�L�JiR��~�>���2���?ߏ�������	���d�]1��Bŏ-��o[�� `��jf0��S��o����[e��M�D�4����V�*�5X��w�K���Q���t�P<�$���-�#I��Dj�
+сד��8��~��B���Ei��HC���Ġ�K/-��VS���mb
Bd���O���d+
�
+&�.�����.�w^���Ͳ3�6��5V�%����A�Va򭯜9�(��׆��������amL
+�AJ��$�����<ٖjr�&�n�I��a��/u��W:7Q��y�Gy}�&Z��x���N��]��������ʟ���&m�����´)c�(��o����fa3����!��̶XQ �+�m+7֖�9xh��B퓏Z�(d�H�ls�I����0Uj�0Ov�])�7I���)6�eR^n�R�?՞1ĈmQ+�o��y���ϙ潀�R���Rpj�``��+�m���I��F���83+O���f�-�<m�=ojh��������K�N�kݲ_�(��ԡ�$-տ��|m|ۨf=A�¨��6�e���?gS�&i����&��F�� �$�&S�����L�b�i�����^�M8��o
+���߬�~�(n�S~�SE��x/K�1B�'^�
�����,Xh߯.g��1���~8[��s��v�{�vɭ���b7�nA�Zx��I�DxO��;�0�:
SKH��|v�Ň|�S%�����+���6^U��mia��,vJ�l`�[�Ԣ�ࠃ{����A�C�M|<s������5
+endstream
+endobj
+1232 0 obj
+<<
+/Type /Page
+/Contents 1233 0 R
+/Resources 1231 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1176 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R ]
+>>
+endobj
+1176 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [52.329 672.212 153.175 681.763]
+/A << /S /GoTo /D (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) >>
+>>
+endobj
+1215 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.758 592.64 560.39 605.143]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1216 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 537.399 385.769 549.903]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1217 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.267 507.271 397.899 519.775]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1218 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 477.143 385.769 489.647]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1219 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.987 447.288 410.619 459.792]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1220 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [460.772 417.161 543.405 429.664]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1221 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.242 387.033 525.23 399.536]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1222 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.242 356.905 525.23 369.408]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1223 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.162 301.664 479.15 314.167]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1224 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.242 271.536 525.23 284.04]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1225 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 201.034 439.125 213.537]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1226 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 173.935 476.696 185.855]
+/A << /S /GoTo /D (group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) >>
+>>
+endobj
+1227 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.242 143.807 525.23 156.311]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1234 0 obj
+<<
+/D [1232 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+145 0 obj
+<<
+/D [1232 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+642 0 obj
+<<
+/D [1232 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+1235 0 obj
+<<
+/D [1232 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+1236 0 obj
+<<
+/D [1232 0 R /XYZ 29.788 644.424 null]
+>>
+endobj
+675 0 obj
+<<
+/D [1232 0 R /XYZ 237.212 612.282 null]
+>>
+endobj
+716 0 obj
+<<
+/D [1232 0 R /XYZ 106.27 595.703 null]
+>>
+endobj
+740 0 obj
+<<
+/D [1232 0 R /XYZ 110.503 554.012 null]
+>>
+endobj
+742 0 obj
+<<
+/D [1232 0 R /XYZ 87.485 523.884 null]
+>>
+endobj
+769 0 obj
+<<
+/D [1232 0 R /XYZ 43.848 493.756 null]
+>>
+endobj
+771 0 obj
+<<
+/D [1232 0 R /XYZ 82.03 463.901 null]
+>>
+endobj
+772 0 obj
+<<
+/D [1232 0 R /XYZ 36.164 420.224 null]
+>>
+endobj
+798 0 obj
+<<
+/D [1232 0 R /XYZ 117.201 403.645 null]
+>>
+endobj
+799 0 obj
+<<
+/D [1232 0 R /XYZ 109.903 373.518 null]
+>>
+endobj
+800 0 obj
+<<
+/D [1232 0 R /XYZ 127.488 318.277 null]
+>>
+endobj
+825 0 obj
+<<
+/D [1232 0 R /XYZ 102.627 288.149 null]
+>>
+endobj
+826 0 obj
+<<
+/D [1232 0 R /XYZ 61.019 231.195 null]
+>>
+endobj
+827 0 obj
+<<
+/D [1232 0 R /XYZ 73.139 160.42 null]
+>>
+endobj
+849 0 obj
+<<
+/D [1232 0 R /XYZ 97.783 118.728 null]
+>>
+endobj
+1231 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F29 648 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1240 0 obj
+<<
+/Length 3172      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�F~ׯ��\e�0ح�*��d&����]�łH�BB4i�ʏ�\�M��f�J6��LOO�7}�q1��ce�i�Zє�3��`x~�7��M�L��$W|[y>��V�� .ɔ�q�tnV[]d}��Šl&��@���r[a�Ϊ�ڞ9F�TW���D�����4$sP�uʈ��Yq�V�_��(P��Ř�~���*������a�
K���1�
VV".M#��83LqpT{�UL@JN�AI�4��2Vvh��&�N~:z���A)¦.���]\(1E&B�?+�D�0a&������^�|y�a��l7���^��2��l4/3#\&�Ԑ��h�
+>��h T���U��:�@��2+�Q��u� ���	�Z+m���Mc�\GD�� f�a2���k�
+�M^\G�ʎt,�Z�0�dQ>�S�@LK�p�#fPE��L����<��JIƙv���Ϊ"�����SQʡ�����	4tCGT蠡��3%�k|/Q�#SUhC�+|1Z���?����nr�0��w�:~�)�	�:	C`ܐ0Y������n��=�O7���� �����'H��]�~R_,7+���<R�E�p��������*�X���q�)U��������`	�Q� "I�T���4b��S���0�ѮU��j����F{�}�0{��8��<�{��?̯n;7Tc`Di���(�E)l~Ѹ���adm��S�<E@���FB/5?`c��<uSK�p��������E�[Y����`�;;	u�K�DѶ)�%x�^�����4�շ`�]���JF&�\6�@���X���"=w��X�Z$�	����<�!��F��?�� ��R#k)�Ly��O�2��j�AQ~
'��oSx*�Ah��Gc�>a��p�9ߏD<��`���a����I�Ẃ���ƫs���r<�)s�1�O�G��"��do�T���+��ɮ��4�\�U��.�<^5#����*?�_�ї��7���u9A%$�u�%4ff�����r�f�(9	G9J�,M�4�8�5���қ�7#�ձ�:W���eV7@��_|җFHN��D?�3:�\`x�0�~0�A0<��w��p4��}�����!�8����b:�ad���$~ј���
+�Ҹ��M�K�<��+���j4���C6
J�po����)�E#������4B5����R�S#�4��B���e�Ⱦ�ґ�|�U=~�u�r�f�qO1�����3⎨��0t����"��w�����j0��@�	��TdbXV}��g��tESGsSWP �+�'
�\�,H�8y�vfP�	:"@�$M��4���Dݎg����c��O���~^C�.�9^z������Ź�.!H�Q��;����DW��8أxU���cK���8����[�1
+!���)���C�R�/�:��u�J�V�����D 6���i�r�]yv5/�Z��%�ϪT4M�t�9a�H��|?_;yM��:C��QmzI\���}i�S�
+����	��U��
���7L�Sp����ȵ�6�|��0�3�T'g�+/L���$��߉Zq�D��
}�0�q�|��=�v���/Ԏ��_�$�����uO1�5����B�	�:#�[���t�
�>39�������ޖ��G��U��G]G� �_�ߗ�D@��i�=&�5宗ބ�������8:	�Jl����2W�x~X~�TZ�m��b��D���~9}_1И@X��C�i���h��x2{��ǣ�<I�S쓰���׽�:��-���W�7���3��E�2f^�ͪ��UF��?��
+}�����^�ӑ�����Ґ�"<E��@G�Fh}܌/g��xr=��cK�$�*�4KԚ�8_�i��MUADi�P���S��V���V����~�-�K�|�@�`d�V��wfk:L\i�x�K�!_K��=e��	��Ϳ�Qy؈��z�i�7�I�v��9r�RcA�A8���,I�/D�K#6�D��
+���a�5���IX�^�h*�-��������u<�޶i��e�X;��u@B���4bLɝ`�g��k�`�f�E�h�h�y����d2��j|5��)��aUdK���۾�m�IO�ꀲc;2�i�b��0[9np>�(���B�2pci�~^샻E�/�1x�������F��/��r�Y�=7��U�b`D�›��zޑ����yE^:�ס���Hn���g{��Z��>
gF��[ H�j	��j����b>��8v�i|ws��I�U]d��I�įv6��7�v뱠�fʖ�í�k�T١� 7RGm�?�_y`�o�{���[k߆��x.�n���{�Z`:^�5 J��S֗F�f�}N������%�"����p���L6�n���9o��8����%�� Ւ�L�)ڗVd�O����T-m���5����^73�o�&�7��[�������x���$t�/V�K#��6�o�&Ϻ-
+�0WZj��z�;O9�L�C]���9ζq���D8���X���h�������~��w���l`�$J���hx?m���G�R���#�����V���K+I�U���
�ޫԝI����A�/�O~��_�e����|._�cY��r���8�Խ��gB��[F�}�+�gy��N�̙���ۑnhj�ډ�8QM3�l?���0���X3���p%�208H����	.�J���7G*�.~AU���t��q%�h�����k��?_�����ʀ�Y���4SZ�9�q�AR�9�Q�GCRn�/�'�L�,TJ�K�L�|U+��B+Y=��o����W?Wۗɿȡi�8f����o���AZ��ᴦ�W,/���I5�b��A���xCMi��J����\٥:��۾�d4�`�K��*�Zj�u�V�����J���n��Ov~�}��|��F�T���@F!��_� -�V�=�d�5^�am��x1K�����+'�y�������w�Iv��W���U��_A޸r�"lZH����X��
+�Uødm��,z���K�k�'��k�Hno���n���$Y2��l?L1$�A%KP������qj㓃�Ec���4
+endstream
+endobj
+1239 0 obj
+<<
+/Type /Page
+/Contents 1240 0 R
+/Resources 1238 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1228 0 R 1229 0 R 1230 0 R ]
+>>
+endobj
+1228 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 658.546 439.125 671.049]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1229 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 585.013 439.125 597.517]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1230 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [358.914 185.09 468.819 197.593]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1241 0 obj
+<<
+/D [1239 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+850 0 obj
+<<
+/D [1239 0 R /XYZ 73.565 705.286 null]
+>>
+endobj
+851 0 obj
+<<
+/D [1239 0 R /XYZ 83.274 675.158 null]
+>>
+endobj
+880 0 obj
+<<
+/D [1239 0 R /XYZ 141.452 618.205 null]
+>>
+endobj
+879 0 obj
+<<
+/D [1239 0 R /XYZ 69.91 601.626 null]
+>>
+endobj
+1242 0 obj
+<<
+/D [1239 0 R /XYZ 37.461 571.498 null]
+>>
+endobj
+1243 0 obj
+<<
+/D [1239 0 R /XYZ 168.103 541.371 null]
+>>
+endobj
+881 0 obj
+<<
+/D [1239 0 R /XYZ 83.863 524.792 null]
+>>
+endobj
+912 0 obj
+<<
+/D [1239 0 R /XYZ 82.052 483.1 null]
+>>
+endobj
+913 0 obj
+<<
+/D [1239 0 R /XYZ 109.336 425.874 null]
+>>
+endobj
+914 0 obj
+<<
+/D [1239 0 R /XYZ 153.561 395.746 null]
+>>
+endobj
+915 0 obj
+<<
+/D [1239 0 R /XYZ 38.416 365.618 null]
+>>
+endobj
+941 0 obj
+<<
+/D [1239 0 R /XYZ 83.241 335.491 null]
+>>
+endobj
+942 0 obj
+<<
+/D [1239 0 R /XYZ 72.354 278.264 null]
+>>
+endobj
+1244 0 obj
+<<
+/D [1239 0 R /XYZ 57.179 248.137 null]
+>>
+endobj
+1245 0 obj
+<<
+/D [1239 0 R /XYZ 125.666 218.281 null]
+>>
+endobj
+943 0 obj
+<<
+/D [1239 0 R /XYZ 79.598 201.703 null]
+>>
+endobj
+952 0 obj
+<<
+/D [1239 0 R /XYZ 69.921 160.284 null]
+>>
+endobj
+944 0 obj
+<<
+/D [1239 0 R /XYZ 61.456 130.156 null]
+>>
+endobj
+739 0 obj
+<<
+/D [1239 0 R /XYZ 29.788 63.19 null]
+>>
+endobj
+1238 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F29 648 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1268 0 obj
+<<
+/Length 2149      
+/Filter /FlateDecode
+>>
+stream
+x��YYo�8~����m ��K����$�;;xC��n-���'��oQ��:��/�M�G],~U$OfW�͋#͑�Ώ�(@��D p@��b��+t��h�	P�B��O{"�:ixnx�������E����
+>���l�q�c�<�K����Ё>*q �pP�<Ʃ��'J�N�?�0sPӴ;՚�F����b��i������r�������\���.��V�B�J.1��
+ft�Tw��麙�a�dz!%c����qvt�8%a8ྏf��ؗ��Y�Y��'�"Z;ԗ��J�,/Ut|3���l�Q�pQ{�/�����o\C����R�����A��h��3J���̧\s��j�vu]�oӁS����}2:\����a�d�i8��X�
+=ן� G�waC�d�!�!ǣ��V4�	f�;�&��BE���c�D���}[��;��P�`�y�TaQ��t�!��jeǃ����Pz�k,9l�kGP�4���}��KL���|�Uײ�Yn*I��JS��n��Ĵv��\9��Y��<�%��l\�*>v�'e�Ko����2,�s��i�V�Ž-߿�VH��)�����Ei8&�� \V���*I_,�ee���I���v�`5�̫�,��r`H0��!sUVy��6Kf�r�Le��J��.i�~TI��F�B�e��ӛ�?Wi=�V�Zǰv�EuWDy��k��}e�
+�]NWu��9�*�G�F�w���ݦ��C�ϵ��w���F+���2���Om���Ǿ;ؙ��S{�n]Bx�d��,�-~�a��
��9�@Ӏx�X����0�1�H��vȺ$!�:�l"�������˫������8�QɰG�F
+
+Q�J����UQT��Ÿ�:Uق%l������ׯ_�~}���01����W(��{�+ih`�_�҄Br����X�@���x����_.N/f�����������U'����_7�Џj���5+��8�X̮����:�/d�g�|i�b�Vi܀~'d����j���:�F�Ī�X+�]acPXj��:��:��C��^�C�����A�E�����F2���
��>Ч���$R�0�uu�-�G��Y<�(���v�q[q�^>���'����44rPp~@�H��AmUX4�CF�1;�ryv�a�7���(�>k���!gk�ҹ��6�y��@�z(�~oJ({�D�	)�̮����}	�$��b8u)UΟԲH��)�p����b-��a�7k�ݙ![�f\b�#��a���Y3`gO�}��#H�,��y�Z��]�7U�yF�Ջ����`�q�0�t֪,��v�C��T�f�!]ז��D�+��#baj�?
+-h�5ltR�*�FMx�۪��g���BˤȪ<R��^��XFX�ip����kih�&<�#�u@��}pͱ+	"������)���ٷ��p�&�4�ѓ�<,�{IQ���O���-V7������$;{+Z��\Y1⦵I��������>�H�"ص�\[lҸk�|�����Y}� ի"�U3s��^�!�Q��[f?G,�Z�0�S�����;O�_��~�$�~���#���E}����j˵�nP}�.�\����K'�N#jV�{�6��4�L�����eh����?**͇�2]�u1������Ҭ��J���P<͢��z@��S��cǧ���X��cb�ӹ�u��\��WוN�V���4�..��x�'8�f�
+��h9%��p���g.���B��R�
+Ϳ��4ܕw��3�R�q=��At{�,��=@Y8	0��	:�1
��sT���K����0���n���IX�����9�^g0����Ûam���Ά��{8�O~�Us=��n���A�c<D��8E�H�׭G+�2����Oc�1�e�Ig�Mv�bP��v�{c��҆�ѦUz�/E�Q��g�0[D	����@zOK����%�����gӡ}[_�>��\���LYغE�w:,��
+�y\�4����t���������2K�<lS��y��m�'�z�����U�9aa�������TK��69��r]=��p��z�D�H�yN�+-@�䂴��774�8x�ˍ�dI���b<'ì�1�
+endstream
+endobj
+1267 0 obj
+<<
+/Type /Page
+/Contents 1268 0 R
+/Resources 1266 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1237 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1261 0 R 1262 0 R ]
+>>
+endobj
+1237 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [52.329 699.813 157.883 709.364]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1246 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.296 662.753 237.803 675.256]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1247 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.827 662.753 530.494 675.256]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1248 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.551 649.204 428.54 661.707]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1249 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 609.879 196.93 642.515]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1250 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 596.33 119.322 608.561]
+/A << /S /GoTo /D (structbsec__input__t) >>
+>>
+endobj
+1261 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.492 393.102 423.586 425.738]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1262 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.492 216.83 423.586 249.466]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1269 0 obj
+<<
+/D [1267 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1270 0 obj
+<<
+/D [1267 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1271 0 obj
+<<
+/D [1267 0 R /XYZ 29.788 582.382 null]
+>>
+endobj
+1272 0 obj
+<<
+/D [1267 0 R /XYZ 139.844 550.241 null]
+>>
+endobj
+1030 0 obj
+<<
+/D [1267 0 R /XYZ 147.131 533.662 null]
+>>
+endobj
+741 0 obj
+<<
+/D [1267 0 R /XYZ 117.426 370.939 null]
+>>
+endobj
+1027 0 obj
+<<
+/D [1267 0 R /XYZ 121.048 194.667 null]
+>>
+endobj
+1266 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1311 0 obj
+<<
+/Length 2413      
+/Filter /FlateDecode
+>>
+stream
+x��Y[o�:~ϯУTI���'qsr�M���}H�@�G[YrtIN���wx��VZ7]`���Er8�of����gb��l�,l������`��X>��c�*b������#��� ���)ry0�ud�l�"��&����X@�h=`�QΆ�ƞ�s<D��|�8���`І9�����uF�[�5J���9�j�vg(���G�k�:́�qf,ƘX������#�R��
+g~��P��q�P�&��0w���pDV�#Y�-�C��-80�;"�+�/�>�S��ŽE�����ދ�u39����Ц�?��Y�U~[�y0[t�!�K���t��7߰���?-J�ֳ\�ˁ�J�yW�P�}X�x��k |�[������]2�"ꑁ�ى��<��UVI��gu���@����bM��L�*��������X�ː���YV�c`+/z��tl�C\�l�b'�s�E��a���I#�ܧ���k4��0D|�0��[�
+�L��a���&�=��|���c6]�/��NfێK}��wqB����.'��2����lSWjx���e��D�?ġ����bNz+:��'��/B�����Ni*�߫��M�)Lk=LJ�,뻪�*^j6�|����y؃�`~�ww�:gw���}�<��.��f=W�n�QUފVW��O��^�c糋��4���%�p1�.f����DZ<xX�R$��D�b��*�Y�!�=��V�L]�D��<q���'H�rҗc��K߄gqI4�2��+��\=��>�b�N��z_������-��\�b����2�n����������4
+ n!���H� >}����D4�E�uQ8CP���@��,�a@�a���������t>�x~1�]\MO�9�z�~S0�yCW�\��zs>i`����]s�R;4��œ���q�D���#^|��s��k^v����q�`�-�2�Kc
�wa�I��G�@��q�k
+�ݶz\��ڜIz3��8�ztl�n[�	�}����#o��ipP^�z	UeE��bp�9�9����	�9�@`'�+.+‘r��hH����/�؜�:xA��z�|M%�y]5�s�O���u\�v�(�o�}�
+�ȸ.e�\��>��:
�M�7��T�b��z�^�!Yn�>�aor^�#e�e�oꆭ$�eF��Q�}�nU+�Ƙ<���:��WAFiҁ����]hr��)�������MX�븊�E����K����%��[fJB�z���BEWFE���������s$��
+L
+�S(��kp�~�a��㘯�m7�ym�ݣs0C��&�|#	Qu�
+�ב�2&+��.ʇ�9�$����.�u�1T��Д��"��=γe�v��#NR�(DŽpJ���,��7�$m���n�&n��A�YWɓ��afb{�D��`��z|�>��<��*n`aw���&�/�uyR�6��۶�N�z�i���G�K)��u�E^�����ZM�(,�L�F:!N�����)Jc�*Px�J��]��7jۡT{JR-�&O�2�krڨ�u�d+m��Μ�����"��Ƙu����!Ss����03�.�Mխ洖��k��0�5~P�l}� }����z��C\�. 
��V]Ij4"�z�{�|��s^|ߤa��uD���K�g�/9���q!���C2T�)���"����2�(Q�QUSVC�7I/�D�(�v*�B�@�4AҸ&l��4�C���.���y���~�)ʭX��#�q(d&��!(
+�Kk�����]����K�"JY]�8��
��v�gˡ/v]p��m �N>J��]��V|
+B�-��Ya��	�W�	�7'�V�!o�w���u�����u�N�n����e"J�U@��u�� 4��j�L�:9
�PMC��H
�0�x�\�\>y��k� �+�g+��yTKWV��]\�?�=J �/�m�g���-o���ƾmP�R�`��c��T�s02c��9ha�7�t�C7_�4��9L��ĝ;��i8�U]M1�6vm�w?^@~#��*�, �.����m��9��9hJl�? J�p�H���"�w|��yv�ad؃Y{�����Ͳf~�B��?����a#�\��|�#(D���/�Z�R�뎣��kZmNrp�����_�Zo�k����5����C�4�00��2�����b����@~�"�cR�K�a�K�d����jB�6$)N�d���]��D�"��މD��?=�
+��,���0{Q��	�2L�@$�4O*]��WE�w	�y�N\�e+��HTErWw���h0!=�y�S���r�����2S���M�4xۻm�|W�W��˴J9�ՋN���N�T��[������
+endstream
+endobj
+1310 0 obj
+<<
+/Type /Page
+/Contents 1311 0 R
+/Resources 1309 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1153 0 R
+/Annots [ 1263 0 R 1264 0 R 1314 0 R 1265 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R ]
+>>
+endobj
+1263 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.809 675.124 447.794 687.044]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1264 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.809 661.575 560.743 673.495]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1314 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [288.809 648.026 378.685 659.946]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1265 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.492 592.867 423.586 625.503]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1273 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [52.329 443.666 153.175 452.276]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1274 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.593 405.665 242.91 418.168]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1275 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [332.395 405.665 531.061 418.168]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1276 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [292.551 392.116 428.54 404.619]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1277 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 352.791 196.93 385.427]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t) >>
+>>
+endobj
+1278 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 339.242 125.999 351.473]
+/A << /S /GoTo /D (structbsec__output__t) >>
+>>
+endobj
+1312 0 obj
+<<
+/D [1310 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1313 0 obj
+<<
+/D [1310 0 R /XYZ 124.091 705.286 null]
+>>
+endobj
+1315 0 obj
+<<
+/D [1310 0 R /XYZ 36.164 570.705 null]
+>>
+endobj
+770 0 obj
+<<
+/D [1310 0 R /XYZ 29.788 508.809 null]
+>>
+endobj
+1316 0 obj
+<<
+/D [1310 0 R /XYZ 29.788 490.267 null]
+>>
+endobj
+1317 0 obj
+<<
+/D [1310 0 R /XYZ 29.788 325.294 null]
+>>
+endobj
+586 0 obj
+<<
+/D [1310 0 R /XYZ 183.266 293.153 null]
+>>
+endobj
+1309 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F33 531 0 R /F30 532 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1321 0 obj
+<<
+/Length 2273      
+/Filter /FlateDecode
+>>
+stream
+x��Z[o�H~ϯ�e$��T��eޜě�h:I;dF��("��Y����^͏�ST����n�Ү䄂�:u.߹Ź7�#�";��������_�	6�+�K��p�l.�44>�}j
>*HH2�i�"K�����5wkCN��m� �#X�1�������%9�lD�e�A�PIT2hBu��H�aY�SI�w#6z�~9C3�&iךѝ�Ń��W	����q1��2K�A��kb)uaL
	��Q�v�����0Q䠅S��=��c����t�����"�%�_xg���P�\nۆ�٠.�ǰ]eoon<�.�,X�3����8K�<�=y��M��0����NI��	s�����Tj|-���p��+�.b��2�
+���'�ja�uͮ�d �B�&{B�O.��8��GI�\o�yXt*�z��k�)/ך?P���'�3L�#�v��x���$m���qib!���*f�S�X01&����?IÕ40�g���)��IT�i�p�8�c��pw�}����{o�M/���Om�R�F.��M8a��Y���8�U8Wp��y����旭���o�y������6�‚U)��&\8��>��4;D]�m�("��c2Z2��~yK�'������x��^J��y	�-�e���|�����f�~�7��ܵ�e99f��|(���
5�-P��l�8�m�_�&c���o���g��Uf�s���~�&��A��z�9
���6 �g� 0����d"?�0$����:�Xp(kc`6��ٛ|������l�o����Xd��ɏ��2
+��з��pVO�-b�-?�z$3uw��h�=!���j�r��°���������ͣ4��7u���d6r��E?��8���Q��|u�A*&4�a���bBK��%U�$��(�����$ywf@�d�R	Fs,�z��VDխ�n�(H�,3��O��6��i�E��|�4�Z���}����Q�P��X���QP�݄A+�@�����m-�4`�5ȋ��(���K"W���-�
��XPҐn7��M����pNJ78�K�,;�w>��ɸ؛P9\
\�5��e�E���w�!\���6 ��%�8�H���"����h��D8H�%��WS�~4�+�r��X�%��,\A�xաy�]Gs��`\
z4�_)�b�I��'mTLA�.��4g�tp�ALؘ�tt� *=�>���Oߑh\�2�����x�OGs-��Sr�����N�+H
+̥��P2�0h�#�&�E�u��##�\�
+\»�����?��	%�l\�ّ�t�\�ɩI*�r?.!R�L����]�K"����r�����/��w^�J����oλwSz�X`�^Oټ��u�e�H��˰Т[��vmْϪt�
4[�d+{�7y�|
��h��M4y��*���k�f>Mx���l��$A谷Ci.�md�#[`D`L�/�1K�8W!��	/��N�9���7�[ÇC��,U8����޹����������$�ЏK����(�s����(��Xq��}��]܅�p
��s�j��0�I��҅�����<���8ʖ:���}����I���ɆlC\��<L⸛�!݄
+	-2�����@��:ެ�n�����Mx)���L���،�:�F�m���<�c��O
+^�+���u�ܤ"w�)N�^В��O*�v�8�E`�Rv<�u�
9M�ژ�D������d������%v��J������:��s_ugۗA9�ndm#���m1���d��I^�yI�oE�*	�����]��)`Ȧ<�{'��T%�Y;�4��Ms|��c���f̄`a�������40�9�|P�Z���!�FWG�'��~����)���+�o�X`�b�Ml���m�N��J5 �
�B��>0�z�����)9~@�B��Hꭼ#�aX����f`��{���d�6K/�U�]������M�K).�/d�>� Py˝1�N���#�_����j�#��mD�qYMz��ve����#���-���������(S�������6��/�Y@0�}f�|t�~��:$�!�	�G��J=Ka�g����{�]`װʒ�c��"��[?��Hϣl�d��z1��Y%Q^�(
7i����z�H�I��D�F/��_� �8&�m��+]u���L�U
_���2����*
+껽�e
+���V2P���&L�Cu���k�֩"��S�C��1����0��c�5
+endstream
+endobj
+1320 0 obj
+<<
+/Type /Page
+/Contents 1321 0 R
+/Resources 1319 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+>>
+endobj
+1322 0 obj
+<<
+/D [1320 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1323 0 obj
+<<
+/D [1320 0 R /XYZ 138.408 705.559 null]
+>>
+endobj
+1324 0 obj
+<<
+/D [1320 0 R /XYZ 104.459 688.98 null]
+>>
+endobj
+1325 0 obj
+<<
+/D [1320 0 R /XYZ 52.936 672.402 null]
+>>
+endobj
+583 0 obj
+<<
+/D [1320 0 R /XYZ 88.117 655.823 null]
+>>
+endobj
+582 0 obj
+<<
+/D [1320 0 R /XYZ 110.536 548.651 null]
+>>
+endobj
+584 0 obj
+<<
+/D [1320 0 R /XYZ 117.823 518.523 null]
+>>
+endobj
+585 0 obj
+<<
+/D [1320 0 R /XYZ 147.506 422.914 null]
+>>
+endobj
+589 0 obj
+<<
+/D [1320 0 R /XYZ 72.332 352.651 null]
+>>
+endobj
+590 0 obj
+<<
+/D [1320 0 R /XYZ 112.357 295.938 null]
+>>
+endobj
+1319 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1329 0 obj
+<<
+/Length 2048      
+/Filter /FlateDecode
+>>
+stream
+x��YKo�6��W�(ͧzp���I�=$�B^ѻ*�������P����cׇ�I���<>�����%E�∠5"��>��;�$C�CJQ ��D;�n�>��,5��2ɰ'���f�n/��2�ח!E��H�̤s:�6��1���%e��Ѕ9�0��A��`��(C�~?œp�y��5�N�z��b�ѻD=,��jR�m��{��e�EC!�"�'��w)+j�A�Hnt��tO��-�m��ي��瘆�^�fqt�@I9���-b!�������"F_�7y������ʊ|W���ůG�EO*d�p?������A1L������t��A�R4��9�2�Z�3	���X�ѡ���)��0��H�����"+�z�I����*�U��s�t������9��	K�p�ap�z�~h�e�V�X�n ��ƍw��}O�M�à5���\B���#��q(�c<bx��h]ޙ�����Dbx�Ǘ���׋�|�q��j���l�|���%|�-��O�s�@��|����:,�,�A,�Q��H��q
��ń�D:�H��w��6�:[\_����-�ײ	p���(���oTT��*���DT���
+���N��/1���)e�p�B��g��p���[�I5��Q�kr��ۓ�AV�����.��YSʝ�w�**�#6_7�9o>̼����MRG;�&��ܨ������,y�X��XS&�WBx����oM[�|�H���vУ�B-N�hz�2�1���B:�f�B���˓l��+wy\�QkkXI{I���Ʈ,L+P6n6��6�4�kG�Aw��jJ�(�aRTww��>O�h��0r"�f���1/���:hP�B]By��g�
F�<��V?i�1H.f8��D��Oa��������*���a����*�v�Q�p�͆�*��
+�Ȳ��>J+�
+b�7t�ơ�$]��'��I��1��M������O�Wog��/
��@mlA�w�����Bw��v
+�R#���>i�Wq�V�Vy58}8\{.�1����*-a���8mb,78�(]Ui煨h�@���O#����9}�C�B�q.���_!���)ü�v��`-�kXR�Eo��
�E�fىKa9	_�`GR�2�FV��Q�u%������"=@��w�z�lw[e+m@}zl��@^/"�E:"��n��
y�oC�I	f���%��:pN_��A�A��/H���Xm�֏�bO�ď�z
+�R`�.r_Ԃab�Չ�q���_	��O�T� :��y��0�s���>\�6[�f���.�A>S�4Y'7��UZ���yB�� �p�:>�5)~o��5�7*c�ˇgˋX�FUZ��X�8�M�=Nغ�!,U��S߫*k���'�ŭ��������@�T�
e[`OT�C�p�?�3N����K3�{�hKn�4��aS^A�����$�xɍm�6�y��?�6��g�C��M�'Ư�_)�7w����hR
+b
�!�M�U�|$<��5��^�6���G7�y���.��?ժ4en��&ʴ��'����@�l&���K=����]���PZ�j{�vP�� 8_K�b�n�1ȭ߁ܳ��nS3�8�Z�ZLf�(��8T�¼���)�A‡�}{���/aRj ����Q�o<�g��x.���y����u���S�ϛ������2tp���,���0e�vk� ���<Ӵ="�]�#w4���U��!k�ݎ�xz�~�~�U#��Z��U��0�1L��}�ZJ��ﯶ�eVmw�������߂;4YKR��}�m�=��O��&F�V�1?�S�/n�	Q��!��g���4�ޛ4|
+�|{��؆L$�p� ��c�d�їźo�ЉN�pUK���XG;�?��o�:N�����zA訿��<)#{��C�>��Tڡ�Q�! [[`Q��&2_2 �tm����L�O,꾎s�w�2d���Aa�dq��,[�J���Sc���89K&�/Qu���B����7V[
+endstream
+endobj
+1328 0 obj
+<<
+/Type /Page
+/Contents 1329 0 R
+/Resources 1327 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+/Annots [ 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1331 0 R 1303 0 R ]
+>>
+endobj
+1299 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [333.093 564.094 485.412 576.597]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650aaf8083737123a5c4d012783ee10a522d) >>
+>>
+endobj
+1300 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.496 462.581 443.488 473.312]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1301 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.496 436.17 437.761 445.58]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650aaf8083737123a5c4d012783ee10a522d) >>
+>>
+endobj
+1302 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [393.234 413.654 560.743 424.494]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1331 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.496 400.105 432.034 409.516]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1303 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [315.496 385.869 443.488 396.599]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1330 0 obj
+<<
+/D [1328 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+587 0 obj
+<<
+/D [1328 0 R /XYZ 36.261 705.286 null]
+>>
+endobj
+1327 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F33 531 0 R /F30 532 0 R /F89 511 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1337 0 obj
+<<
+/Length 2077      
+/Filter /FlateDecode
+>>
+stream
+x��Ymo�8��_Aఀ��J�}s7��&im�ݶ0d[qtgK�^���?���(K��l��p8 �h���3���x���EvD�tq?��7xC��%�)EJ0�	���}�Z|T��d��$î���N왛�(�����TX��V0��Ki�Ӓ�Ô��SK�4Q͠sLa_i�`�\0M�7��D�aN8PӴÒ�F����劣�X����b�˱rI�]%bu��P���T��@K�r0"�Y7�=���d�li��ł��sL}W�?���������1{J!�7x���s�4�f���To�Y�����������!��pO��S���J�&A���c�t��-Ѩ)�Jk��$��'���^쒁J3�v�
Ό�q.� ��ؼ�(�yX
+�R{��_�C����pK����Bq�{�o��*����JK��b�]s_�*��ŜK%�O�����}��=E� F�]�5��J���/�G$f�� >���OF����p�~�O�n�>���X�����þGJ:LpL<�J_� �*�X�a"=��1:{`z> �!�X��'�o�.�/ǟ����@,���A�o����1��0��h���0�Ἒ*V�<��_����.do.�gJG)�]C�UdEj)L���WW3~��l��='�Y�����D�BxƳЬK��3kH��H��S�����»�^֚��4�Z<������]��p�}q}62k����6�ۺs��.MVM^�a%A%@�>������`��y�Koq�.���h���hL�Aa��z8��~E�p;�b�V
cX��|��S�X��X�@/�������dY�D�w�C�w���sts;<����ʈ�l˷��Cd�'[��|��*�o��1��_A��+Ǫ\�1Z.+߯H�_��5/��#ғ�|���@�700�����ʸv�x׫�o|�B���k�V�4��4����(s�����O�BAn@zo�u�0�u[��5���?z"��76����Y�>X׊��L�`i�kZ,��T��"�3���b0����4J�]K�=#���گj躰b��N��p{@{��lp=�_���
��qo2�q�y���+[`qe��-G[�}XcYUh~�EX�XO�K���(p����Ӱ��(W J�M&�K�D��ԍű�r�<�Z��lg�5�6H�D����t05�J���>�������k�:Z�O�QƐ¾��6���û(�$��	����Teٹ#���c��R��a�6����,��@b�ں��zZS
+��d����u`��4�l[���2���;�Y8��9�1Ɋi6K��N�ZL+�_�G�e���3�����zs:]�1x��i� 	)�LW��hU�*
G�7M����<�6��S�&!yP�\&�
+�4�"+n4L��g擙���Ea.5��w��!۾%6]�50���G�d9���p����qz���`�Fpt	�p0"�
��$�W��(���ӟ	ɢ�(�w�{��b)��_��t!yU-�U27�S�x`B�'��lu�s��S?X�46=
�����Ї���}�B����JG3'yٮi��ɬXAR-(	������Xʞcn^��M�S^r:�kBT�� :]}+p���j�����(8b�]ڭ$����Òԗ�/Dϖd�C�/�#}u
+���R�4���C\���,	��s�9�>3����ўmh�9Ge�$ASz;�QNE�֛�E��
+���Ƣj8CGNg��lv��r���ߵ����Nw����kш�cT�Vr�����$���נ�J��9����Z��)p�o��i�T�C�ƚ�5�s�a������es���f�_�����^����`�/�RP�M�������)z��{3�mC����ח/�]-���e9������I�Yb'A:�%a�3���(['Y�,7����z�D���ѯ�p�&�bV�R�p�@�Z�$�4��=Af�
$Bi+�<�����D6S�)!|(�\3]��2��m�j+��f�V��-tl�&�(w�e;�I&�o�T`)�/d�{��>��V
+endstream
+endobj
+1336 0 obj
+<<
+/Type /Page
+/Contents 1337 0 R
+/Resources 1335 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+/Annots [ 1304 0 R 1305 0 R 1306 0 R 1339 0 R 1307 0 R 1308 0 R 1340 0 R 1332 0 R 1333 0 R 1334 0 R ]
+>>
+endobj
+1304 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [374.689 661.575 503.968 674.078]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a381b968290256e77d50c4f7e92bfb27c) >>
+>>
+endobj
+1305 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.98 648.026 523.965 659.946]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1306 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [364.98 634.477 560.743 646.396]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1339 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.136 620.927 469.998 632.847]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) >>
+>>
+endobj
+1307 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.136 577.643 557.456 609.969]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650aaf8083737123a5c4d012783ee10a522d) >>
+>>
+endobj
+1308 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.82 536.996 560.743 548.915]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea1c0eee38a61b05c5239c871f9cdc85a4) >>
+>>
+endobj
+1340 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.82 523.446 434.849 535.366]
+/A << /S /GoTo /D (group__bsec__interface_gga832388c889417ed197609d9965625bfea1c0eee38a61b05c5239c871f9cdc85a4) >>
+>>
+endobj
+1332 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [361.671 325.771 497.66 338.274]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1333 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.318 237.223 413.365 249.726]
+/A << /S /GoTo /D (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) >>
+>>
+endobj
+1334 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.318 148.675 374.562 161.178]
+/A << /S /GoTo /D (group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) >>
+>>
+endobj
+1338 0 obj
+<<
+/D [1336 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+588 0 obj
+<<
+/D [1336 0 R /XYZ 36.261 705.286 null]
+>>
+endobj
+1341 0 obj
+<<
+/D [1336 0 R /XYZ 88.706 488.007 null]
+>>
+endobj
+1342 0 obj
+<<
+/D [1336 0 R /XYZ 97.794 471.429 null]
+>>
+endobj
+149 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 424.97 null]
+>>
+endobj
+674 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 395.975 null]
+>>
+endobj
+1343 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 395.975 null]
+>>
+endobj
+1049 0 obj
+<<
+/D [1336 0 R /XYZ 499.696 328.834 null]
+>>
+endobj
+1344 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 305.467 null]
+>>
+endobj
+1068 0 obj
+<<
+/D [1336 0 R /XYZ 415.402 240.286 null]
+>>
+endobj
+1345 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 216.919 null]
+>>
+endobj
+1346 0 obj
+<<
+/D [1336 0 R /XYZ 376.598 151.738 null]
+>>
+endobj
+1347 0 obj
+<<
+/D [1336 0 R /XYZ 29.788 128.371 null]
+>>
+endobj
+1348 0 obj
+<<
+/D [1336 0 R /XYZ 238.806 63.19 null]
+>>
+endobj
+1335 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F33 531 0 R /F30 532 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1359 0 obj
+<<
+/Length 1534      
+/Filter /FlateDecode
+>>
+stream
+x��X�n�8}�W���5�KҸi�&Mm�A[���ؒk����ϥ(YK�q�E8!)^��p�<���)�g�戠�4��|!H���"%��D���>,
L{�dؕ~w�q5g=Ef���I��OQ��(��]�}e'��)w��(��P��}La_��\0��J�^�O�	4�ݨ��Ň�Gg)��_��f�3˩��J4̲�"�!K�|�U��e�%B-Ԉ��ֺ��Vq��zHc�w�6�T�c�f��tp�HI9����b>��B�o�=����i���#�yj8�I�nr}����
c���=�O�����:_#Ne�]qЁ�%�4m��Q�@�{L5��=�Vs��k|�g�.f�1��6\$��o�<N��|G�0�|:T�fQ0���̀!.�#ǥ�7���X`y��M
+=gW7���������f:i�v��2�`���0�QX����H�ʼn,&{���$�?5������>x���ڮn�ƺ*�+�m����3ۊ�Z'Q����үY��^n��v	L& �\4}�6|a�]\�xss6:�1gt�jo0J����8��{�^F��|��� יm�/�j�.��`�+�p��tT�*<��.�.��}1�Lf�'���&N�9�/�<k$�)V�l����Pk:�(�c��1X�v���G<(]��
��
V~��!�&���x4��Lߎ[6��CMX��֡�`%Tae�Yo�Pg�,
+�����0M�<Hʸߥ�
+�e��b�lo+p��)@3�n��_�P]=Xf��聞�]�k^@,g3�nWz��<������I�ٳ*0����&�T�^�\^�]L���u�
��I�yM���"������ys%ۻ�wsm�]�Q��H&��d�I2��dװ�'7��Ӑl������̟M���m7�!$���NFI˦�����d�@�<6�x���X@��Qm��`�R��xOĶ\��.�%�`��h�E���|��
ߕ� � m�s�Yy��L��x?,����º֛����s:�j
+6<+f����?:�m#Om.�d�M]��|�Zۑ�yj���"���v��J��"�<r<F�x�#)�����U�iddN��9'W�(�8�r�dL>�w��u+b��F�MF%��d����G��J?k��mR@�L����S��K��`-#�8�u��p�q�������s�-���y
�C{�1|���Gf8�����#���j�E�+�LU6��j�N���v��x%���tj�nww|~aL#��¶��$�>Ѝa���h)i���p��ϫ�� G�L��SO5dj6�2�H�����.�-�.TOb��=�����S�ũ	ӣ�_��P��z�\6��)���W��p�qG��d���6�|a2�^�BϠ)�
����`�A��BGq�N�`Y�����2��b�(?m4?�6�}RC
�d�*�"�ķ���ڊ�N6Bik���F��t�������N��$X���n�m�qqm����a�p��5�hY��n��:t%�/X���-����y7�
+endstream
+endobj
+1358 0 obj
+<<
+/Type /Page
+/Contents 1359 0 R
+/Resources 1357 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+/Annots [ 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R ]
+>>
+endobj
+1349 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.347 523.174 289.901 532.349]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650ad30626f0de1be98802cb5e50c8b67207) >>
+>>
+endobj
+1350 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 462.152 160.548 494.788]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1351 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.884 390.998 299.316 400.172]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a381b968290256e77d50c4f7e92bfb27c) >>
+>>
+endobj
+1352 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 329.975 160.548 362.611]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1353 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [207.884 258.821 299.316 267.995]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a9202c1504b464b16f432da6a4dd582a2) >>
+>>
+endobj
+1354 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 197.798 160.548 230.435]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1355 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.006 126.644 327.56 135.819]
+/A << /S /GoTo /D (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) >>
+>>
+endobj
+1356 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 65.622 160.548 98.258]
+/A << /S /GoTo /D (structbsec__bme__settings__t) >>
+>>
+endobj
+1360 0 obj
+<<
+/D [1358 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1361 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1362 0 obj
+<<
+/D [1358 0 R /XYZ 235.359 681.917 null]
+>>
+endobj
+1363 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 658.795 null]
+>>
+endobj
+1364 0 obj
+<<
+/D [1358 0 R /XYZ 334.184 593.965 null]
+>>
+endobj
+1365 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 570.842 null]
+>>
+endobj
+1367 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 459.721 null]
+>>
+endobj
+1368 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 438.666 null]
+>>
+endobj
+1369 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 327.544 null]
+>>
+endobj
+1370 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 306.489 null]
+>>
+endobj
+1371 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 195.367 null]
+>>
+endobj
+1372 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 174.312 null]
+>>
+endobj
+1373 0 obj
+<<
+/D [1358 0 R /XYZ 29.788 63.19 null]
+>>
+endobj
+1357 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F158 1366 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1376 0 obj
+<<
+/Length 1346      
+/Filter /FlateDecode
+>>
+stream
+xڵX�n�8}�W�X1�JԾ9��M�ilc��Pl��B�\]�-Џ�!)ɒ��4m��mx8s8�s����h��"���@���C��%�)EJ0�	��=��G�P��0�i�aW�dz��5kQ���_O*,|�ֻ#0�������0�.�Œ2
�t`�)�+�T\����B	��<��p@�ح�=`:ίw�SP�_����3˩��J�̲t��P���U�ʀ%B-Ԉ���C��V񜭇)�E޿�pPRq��������pJʱ/<-��|�ߋ
�0�H����<5��I�fE�>��x;�,Z�P!��{�N������
�EHe�Ɉ�8��Q��m0gT*����X���V[�7twu�*]�<zd�|rim�N�p�E�&�㪌6�1���\	�	D�x4q�P9.ž�V�&0��=�rH����j>���LVw��du�n���-�-�=��P�D��P�[��6�C������b���
+�(�^��zP^;��:
�<����2lV���t�UO�`��4)��L�ܶ����d�z�5��f��04���.n&���Al�q���g��l����>7�������Znn_��j�����~��ܤO�r�>���{�D3��F|5�.7��Rv�q��N��'j5���˻�t2[���V��t4{ţֿD����:ٗ���K�ye^�"��,�nk҂����]�e��
+L�a6Z7�q�����m�w���j6�N~�����m�~��"̒ ��"+ו�I�;��Xp��na����Q���߃hIj�^j&�٣����M@��"\w��y�}���s:��6E`�����P���t�~�m��r��iY	$i�C���"��ui�����0������X�@�\L'�"N+�pL��f�(G�&f�k[�����H'���X�<��gIF[y��b�g�p�������A�$�È�����Ni�>'b���?�J`m=���z����6sG��i�w틾�����ep>����Ŋ+ؙ�l	U�58G���d�5K��b��)A�<|<���M#�sc[�ꁜ�wc�(���JR������J��VV�g���o��7U2����Y�lvGF?y�Xkc`�~Ԗr*qsB�<�N�;o�e��M1����i�oc�l�����AHy,�^�B�CS@�����&J��$_-4��4b3��P��Ө0�GՕ��,��]wA��D�Wo+���v_����l J;��SW�w���
+��&�5��~G�}�{Ҭ��)�u<m�aV|�rC>���$�0�����U�^g
+�ǿ�
+endstream
+endobj
+1375 0 obj
+<<
+/Type /Page
+/Contents 1376 0 R
+/Resources 1374 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+>>
+endobj
+1377 0 obj
+<<
+/D [1375 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1378 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1182 0 obj
+<<
+/D [1375 0 R /XYZ 229.882 684.487 null]
+>>
+endobj
+1379 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 663.877 null]
+>>
+endobj
+630 0 obj
+<<
+/D [1375 0 R /XYZ 192.29 602.651 null]
+>>
+endobj
+1380 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 582.041 null]
+>>
+endobj
+654 0 obj
+<<
+/D [1375 0 R /XYZ 228.66 520.815 null]
+>>
+endobj
+1381 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 500.205 null]
+>>
+endobj
+678 0 obj
+<<
+/D [1375 0 R /XYZ 254.722 438.979 null]
+>>
+endobj
+1382 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 418.369 null]
+>>
+endobj
+1383 0 obj
+<<
+/D [1375 0 R /XYZ 319.609 357.144 null]
+>>
+endobj
+1384 0 obj
+<<
+/D [1375 0 R /XYZ 29.788 336.534 null]
+>>
+endobj
+1374 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1387 0 obj
+<<
+/Length 26        
+/Filter /FlateDecode
+>>
+stream
+x��	
+0TH/�2PHW0Pp�I��p;
+endstream
+endobj
+1386 0 obj
+<<
+/Type /Page
+/Contents 1387 0 R
+/Resources 1385 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1326 0 R
+>>
+endobj
+1388 0 obj
+<<
+/D [1386 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1385 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/ProcSet [ /PDF ]
+>>
+endobj
+1409 0 obj
+<<
+/Length 2058      
+/Filter /FlateDecode
+>>
+stream
+x��]o�8�=���2P1"E��=4�6�{�m�CZ���:X�WI
+쏿��e�N.v��; )r�g8��7_edٜydI<ru�A�;�xDƒƌ�Hp
+IjE��~{|T�D2�h��@�S���#���CQ3�(�bJ�Pۓ~H��0bT2�DQ@�xD���N��#���$���=�!�QW�*�ο>��@��¾��!��^/�h��Z�\��IL����E�������<f�Aϓ��u�=��xI�-ʈ�o�V��|��8@�����O�̧�CrsGxL�("al�}��[�j����a�\����V���7?�}�)Ä�F1�4B���=������r�A|�&�c�ϙ�����Р䄰Z�CS_����d@y�&J\����lղNڼ*��U�gJ+��xz����.Q2����ȇ��DqQ69s!B�ˤM��ۺKۮV��J�B���y����``~1�B���̰X4*�/
+5oT��岙�c���UݩZ��z����=+_R΅a�U�S��Y�߮G���S��Az��=�f8�AxHb9�c��̣��
X� 7z!�A�y�c ��
+�걝��z�l��$S�!�����gnf����M�ӭ�Lۮ�r4=�v?P���<�ʶ��tW�71�Q,}T"�2������8�o�*UM3�0�Nt�En
�
r?ĭ��T�����~X�}&̆8��ʴ�M�4*�PP�֬�7��4�<�����jׯ��~e�q~]��U��U�FA��4x�w?���c�z�6��@)�ƟԺɻ����p��s̳�>��kށ��m�dt�!뮜/��T�},���#�ӝB%
�(��v��;g���<:6�C2��ս���S'��WK��c�v�4uPoaW���(󽩑�~��4����z�y��?��П-��[��ΗK�F���@�c��ﮪӾ��3Eaޮ��Q�<QVS��<5��,��\��Tm��{i.u��y��O�>9+M���~��\�8�X�={�-Y{��j@��^�\�����q|��I�h�=�$
+��S��x76+Й+��}���j�?Q�$/���S�ծ��􊮱����t9�����Vx=1c���{E��"!�
+���[T�E�sQ݉~x/��%6
+�aHgn�����n|�@��:<�`�*�?LO+{�zTi�*;�߽�����[���_Z�W�Zf��rwHu. #Yͫw��s��9��B���Ȧ3�-�>S�B߱CI���P>h��%��PK]��V$8����&��c�El�-LG�UwK�G����^�Qt�G�NA��{3�/o���&�^x
�'�aפqH}�
D�����ʦ3f�Qi��+XP�i�O(�X�0��02|�G��I�ix������e��D�K�o�{gZ{o�'��Ϻ�o��f�����a%3���7"3�)�k�.�.�v�)%����%�y³�#���B��� 6ZX{X�TJ���_Eؽ쵁:�1�,��������v9�mta�g��՛�!��`sO�/adm�K��C�Z�/�vT}�!���n�q���Tx��U�MWI�Tؗ:���U������P��-@W,T�~憐�/�o��pao"�=�����wϋ���B��!4t�h���
+s�D�6%|�%�f�
+"9��@��
� ��^��5��I��0���wf�{�s����H�{�a=�,$,�ZӼ���h� �B� :�Q+֣h����ȏ�3};�ݔ���Yw�쎰����[���)�.����z\k݆7I8�n�z�~�c�~Z��:p�H%����%pMƂ�h�g����䖉�fPf�_I�P��w0{D��3ç��Iߗ�I]�]��fcjJɄ��JpJ�ަ��BX�	����'�I��:>��!��ͦj��F��pެ�ܼ�١Z���Q������@��E7�1{4�\��N�yP�O'����u?C�w�duːo��G�: �dAZ����c��1Rb��GP)l��
+�ǿ����{
+endstream
+endobj
+1408 0 obj
+<<
+/Type /Page
+/Contents 1409 0 R
+/Resources 1407 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1412 0 R 1406 0 R ]
+>>
+endobj
+1389 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 555.914 121.973 568.145]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a300b00f9580b9af76d441cd4db8d7083) >>
+>>
+endobj
+1390 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [82.999 519.353 150.479 531.584]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aa197109b334a2a443d9349812865bff1) >>
+>>
+endobj
+1391 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.179 500.539 345.816 512.036]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1392 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [82.999 482.792 180.795 495.022]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a500cfa825fa7c6ead38eba7bf7b4b955) >>
+>>
+endobj
+1393 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [82.999 446.23 166.253 458.461]
+/A << /S /GoTo /D (structbsec__bme__settings__t_afc3ab51b88f259e5cb76c10ee0732e5b) >>
+>>
+endobj
+1394 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 409.669 118.341 421.589]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a4407b04a0d403a9fb35fd322999113a9) >>
+>>
+endobj
+1395 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 373.108 192.293 385.339]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aecd99f57df2bc07663a7de83f877228e) >>
+>>
+endobj
+1396 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 336.547 208.668 348.777]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aed0450820cd910e06e26fba04256bc24) >>
+>>
+endobj
+1397 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 299.985 190.471 312.216]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a7984769929826a36f59e7b9dfd6e7447) >>
+>>
+endobj
+1398 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 263.424 182.595 275.344]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aa4a1eeae4e7fe44a8093a3862996fbac) >>
+>>
+endobj
+1399 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [134.294 169.017 244.198 181.52]
+/A << /S /GoTo /D (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) >>
+>>
+endobj
+1400 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [308.144 134.896 527.207 147.399]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aa4a1eeae4e7fe44a8093a3862996fbac) >>
+>>
+endobj
+1401 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [84.31 107.797 320.65 120.028]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aed0450820cd910e06e26fba04256bc24) >>
+>>
+endobj
+1402 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [324.718 107.797 543.208 120.028]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a7984769929826a36f59e7b9dfd6e7447) >>
+>>
+endobj
+1403 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 94.248 253.297 106.479]
+/A << /S /GoTo /D (structbsec__bme__settings__t_aecd99f57df2bc07663a7de83f877228e) >>
+>>
+endobj
+1404 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [79.408 73.676 231 86.18]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a4407b04a0d403a9fb35fd322999113a9) >>
+>>
+endobj
+1405 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [498.934 73.676 567.119 86.18]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a500cfa825fa7c6ead38eba7bf7b4b955) >>
+>>
+endobj
+1412 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 60.127 179.344 72.358]
+/A << /S /GoTo /D (structbsec__bme__settings__t_a500cfa825fa7c6ead38eba7bf7b4b955) >>
+>>
+endobj
+1406 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [201.613 60.127 394.012 72.358]
+/A << /S /GoTo /D (structbsec__bme__settings__t_afc3ab51b88f259e5cb76c10ee0732e5b) >>
+>>
+endobj
+1410 0 obj
+<<
+/D [1408 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+153 0 obj
+<<
+/D [1408 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1116 0 obj
+<<
+/D [1408 0 R /XYZ 29.788 649.232 null]
+>>
+endobj
+157 0 obj
+<<
+/D [1408 0 R /XYZ 29.788 649.232 null]
+>>
+endobj
+1411 0 obj
+<<
+/D [1408 0 R /XYZ 29.788 603.186 null]
+>>
+endobj
+161 0 obj
+<<
+/D [1408 0 R /XYZ 29.788 221.409 null]
+>>
+endobj
+1407 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F89 511 0 R /F97 510 0 R /F33 531 0 R /F30 532 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1425 0 obj
+<<
+/Length 1484      
+/Filter /FlateDecode
+>>
+stream
+xڵX�n�8}�W��F��i�[Ӧi�L���0d��5�$WK����\�Ʈ�L$!E��syH^f���@ж��h�\t;�D��-.��!!(��\�R����'������	�=N���\)3���!Aq6q�S��H���3�!? X�@�������r*��8U�����2��e���U
��
�wC�p����i��崼�^��L�\����YV���%�8����}�W~�ko2������ɀ1LBO�_�f�7 J�p�}�
���z�t?�.�xw�P?�/e^e-�ϫ���Հ�B+�B�i���?�(���ȅ�R���fj8���-�0�D0��T�40?AV[t����"<L}2!��ye8��k�-�:-r�pۤ�Ԅ.�ӹ<�
+A�g��!�c�:&0�����ߤr��^q�ɼ6n��`C`]��
K��$l���Q-�u-���M9��xC(E`�y�T��5��5`Q1�T2^o2��d]���Z�/^��,��E���iܷ`����T7�'�JRV���WiS}�ǟĀ�+}h�m�4�Ӡ��L�/����ٳ�2K���$���������W�\�7�9�SS��,,gkgh��uK;�
���ā�8��[������@��?�>���u��b�x�WW̟��vUc����g���i��*}��"��b&<ƛ�!&D�RV��(��S�����ơ�a�u�ѥ�=�}��uj�	���>Hd��#��K�;Y��ZjcQ�������I�g���}ׇ�]s�N��zE�IK�uU�C��.���W&����
+0W�����Ki]��Uq��
�R2e�]������~u�\�M��6�LD�ȱ�*Agj��� f^0�oQ6�zU�v+@Ϩ�&�6{+e�+��ԆPyA������B�ƅΡ����]���i:>}�KF<�$���Y$��s��8�{���,�*]������_k1����+��|(E�2�E�V���?���h쀼��X��M��&���ŕ�SzZ]	1w�����d��N���nਸ��R��B��j:<8*�Q:�9�%����i2,($�>��]2|���oz��F*ф���������ԥ��z��KI��eoF|���y^��	3tr%Eur<"e?�Ja��Xŭ����X����͜I�31vVjx;��?6����S�1�NQs[Kͭ{��k!�Q���F�H�;��z^T����%���ჰW�c�h5uo�n�GcԻ��İ��@����p�c���9�J�_sD��FS���a
+�|~�mޚ�mG2��*�Rme�ݩT��)�|r{/َmT&��U�Q��@'iu(�h�
¹�v��y�٦R•�4q��%��e�D
�y3�1������i�(�L���|�ʯ��f��R��U-Eٚ'�r ���-<�ڜ��I&5����L�c��/ܑ	��?��H
+endstream
+endobj
+1424 0 obj
+<<
+/Type /Page
+/Contents 1425 0 R
+/Resources 1423 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1422 0 R ]
+>>
+endobj
+1422 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [264.057 195.541 346.689 208.044]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1426 0 obj
+<<
+/D [1424 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+165 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1415 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 718.941 null]
+>>
+endobj
+1427 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 718.941 null]
+>>
+endobj
+1416 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 648.631 null]
+>>
+endobj
+1428 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 626.563 null]
+>>
+endobj
+1420 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 558.212 null]
+>>
+endobj
+1429 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 536.144 null]
+>>
+endobj
+1117 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 467.793 null]
+>>
+endobj
+1430 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 445.725 null]
+>>
+endobj
+1418 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 377.375 null]
+>>
+endobj
+1431 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 355.307 null]
+>>
+endobj
+1414 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 286.956 null]
+>>
+endobj
+1432 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 264.888 null]
+>>
+endobj
+1417 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 151.542 null]
+>>
+endobj
+1433 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 129.474 null]
+>>
+endobj
+1419 0 obj
+<<
+/D [1424 0 R /XYZ 29.788 61.123 null]
+>>
+endobj
+1423 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F32 514 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1445 0 obj
+<<
+/Length 2050      
+/Filter /FlateDecode
+>>
+stream
+x��YYo�8~���c��<u�m��� ����}p���E��PK����KG[m�N�&ţX�+���/P�k��!����Qh��A2�8�ł�HHT+t{���K���&3�&er�k��΢Ho�#c�P��1��ǔN�����<DQL��L�0�b�Ě9�!L��7*�I���0'�iڣ�!:`���}����̾,�)�/��8��H,�.BJ�q�(��x@h�PKzDr+��=!�xI�a��?_-80s�i���Wg�KpJ�q"��nKp�(J��W�Y�����y��xq�ʦ�[�=������j$�xx'��Xӿ�FP��#Je��,����G�ˀ9�2��<b\��j�NM}�������	q��V�Oe�vu��Ui��<SF����K-p&�	\H�<$�"�(ı&1����ɢU���Z��{U7��P��n���2�����t��,�!��`��m�n� ��M����^�ն@�Y�ϝb�9b��c�=�1q'��)����U䄒�gگ�o�H����Y<����I�z�|�S�z���ݫ��Ś�?�ǔ£��n�Mms[�[�����x�[w��;ը9��Ճ�ߒ��O`.�:�<?��cVwF޼<t��~�������[U�r;�9'R2�WΰL��>���2WE��ߦ7]��e�L<djѯ,�Nq<�e����n��w8MD$�6L���xA7�L�����ِ���H�YhN�Fp�i����dĜ�
E��]\*Ӳ�U��Z5U�
q�l����h8� %�fV☆?�範�*}���|W������R�uhRSå�����E�p�Jc��-;Զ���۪Aq�g��������Xg�e��J�����Dб����Цk�;g���p�6CuV�lK�*����w�7�Ų�)`ʵ�{�nm{�{l�m��y���h��^;<��������M�›��j�u~0|,��~�*�>IK���F� ��.�M�֏瑰�=9�=.�u�2K`Ls�n>�6YfÁ|t 7�=��=$��]a�`}��icg,�l��>m`.~1�b���a���G۵��w�����y�El��zy������w�#�QG��(�b�é2���)C����8KFP��#���V:}<�b�N��Y��6m���:V5����	��t��|�j�B�k�*���j�HQT��Z�tV��	rÍ5]�6S@�ަ���m�)�z��x��2u�˽7)]VA>����O���_6�1x�N�h+}xBt�Z�yBF�a�X�m�:�����Qd���:�jU�ύ�z��q �J���q2{q1��R:�|�W�aꏪi�M�:^�N�Ǭ"�Mm����T�(;ꀚ�C�Ct;
+{ޣ�����C�ڱ��:�G��]������"<^+�_Z4�	t�AKt�&`0G�`�9l2�6�6��y�8`������h:���B�!�Ao�^�r�����Q_	�R>1��	C��dL3�_�~�P�p/��8����s����<p�D.�2�t�n�{��i���(���Cc�n�wi�S�/ͻ�����Ɔ�ߖ�w	���oT}qD�������?�1	F��������EHh��:c���̊#�Y���}/GL�M�ǥ6	��Pj��$}����ŵA�&��As����\La����?�I ���s�i� ̰�o�ىm��9��S��?@���!X��Q��,���"�ݢ��h68��v��~Y??�0�O�Ӣ/ǵ��/|C�K��&�)S�R����=z�V���9�uA�x\n�ɭqK�7����ؓ5��=b�酁�S����K08�+��S]����9���7|���~�O;�}[g�T,~�OP=V�;����B�l�m0�M��:��|��%��͡j��lH�CQ�w�P� � ��C�kf�.�@��D��Il������A��sڜ(����Z��"=��|x��O���:̀G�����ѥ�F9���d��ާRx��f���H��!
+endstream
+endobj
+1444 0 obj
+<<
+/Type /Page
+/Contents 1445 0 R
+/Resources 1443 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R ]
+>>
+endobj
+1434 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 489.708 135.304 501.628]
+/A << /S /GoTo /D (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad) >>
+>>
+endobj
+1435 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [64.803 456.681 95.29 469.185]
+/A << /S /GoTo /D (structbsec__input__t_a000803d39a2be521f2b5e7017c31303b) >>
+>>
+endobj
+1436 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 423.655 168.653 435.885]
+/A << /S /GoTo /D (structbsec__input__t_ab535651a26b2e2c44c83e441385e3def) >>
+>>
+endobj
+1437 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 390.628 126.217 402.859]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1438 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [241.606 260.773 324.238 273.276]
+/A << /S /GoTo /D (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) >>
+>>
+endobj
+1439 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.183 241.968 448.691 254.471]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1440 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [28.792 228.419 145.995 240.649]
+/A << /S /GoTo /D (structbsec__input__t_a916867811b65988853b69f729b91c262) >>
+>>
+endobj
+1441 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [373.813 228.419 492.216 240.649]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1442 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 188.297 173.879 220.933]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1446 0 obj
+<<
+/D [1444 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1447 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1421 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 680.603 null]
+>>
+endobj
+1448 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 660.7 null]
+>>
+endobj
+999 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 595.455 null]
+>>
+endobj
+169 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 574.126 null]
+>>
+endobj
+1449 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 534.354 null]
+>>
+endobj
+173 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 354.675 null]
+>>
+endobj
+177 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 169.39 null]
+>>
+endobj
+1026 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 143.316 null]
+>>
+endobj
+1450 0 obj
+<<
+/D [1444 0 R /XYZ 29.788 143.316 null]
+>>
+endobj
+1443 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1465 0 obj
+<<
+/Length 1721      
+/Filter /FlateDecode
+>>
+stream
+x��YYo�8~���T4Oyk�M���&�!-Ebl�ڒ�#����;<d��MR�Q�-)r8��ᐝ/��hY�Z"��f��(�_`� KS�"�p($���}|@<.Xj6�e��@��U�n�~/��2�o(#,b���D�̤�r:�v�1�
+#�%e��Ї9�8��A'�`��o�@�~�aN8pӼ]ôW���m8zS����}\�Cj��^�� ���a(�RDq��V��>e`%B-;�ɭ�}����1]�%�M>>Yq2��8��O��)��r�0D��bF
+c��E�.���NWG>#�BuY5*=��x?{�(C�4�li���	�`�="`T���F�����P����I� '�j�M���Ӂ����N��x����]Ѩe�4yY؁�6ϔQ�xz����]ݜ99����XD�
+i�Pʊ����T��Imk���{�n��	,��Z�W��}�����6��j��򊑼?B�ǖ��L�9��^�/�d=b6?��!�A 4@ `�ʬ�Y�Ik����Ŷm������j�����\��X�N6۵�^�۬�@[��e�x�2�ySV�J�[�6���vV�3<��ȻF0�cH��_?���||!N�'��͋&���S'l�7x���B���H�R��_޴M[u���+��U�v��w�u�hJ�R�J'���
+�I-'���n��O0X,�M6�� ���x4��=X��3KGQ$E	{�E�C{�n�txYԟ��(&�&ۃ�0ɥ�1�x3��li<x��nl��;�Uy�6�_��+�¯�VAV.�n�p4y�V*�w�ɺU5>���+uo�Ӥ��Ur�����+�%��3��'T}_7j�W�^O}rAA��*
+
+V4�����0w�:?]��j;�h+������§qH��96���8&P$�0�"٠�l'w�7U�����Q�*R��ġs��6����o���{��uV�Or�:�秐�&I���O,	<�"d4]c���.����r�=Q�p{��X`v��p��0D��_��K}�0�GMژD�w��><$�Z��G/r����3���x�3�?R;<C�Q��#MA���g��ٞ=Tz����R�C�g/$��w�*�\G�r&/ol{�WM��K��.-~\�'i�VIz�R����t�K�:��O�'x�и1��3~~�ݎu�@��8[�0r��23�H�
�A��As�}�
s������ߕ�i�Cݦ��X*ݗ�]ެ��e�C�cx|�ߔi��#h7ת:>�CF���ő����m�z�����/�D�����}���:"�����	�&���I����Édt�pbIv'O�a�T�;@�$xJ?C��]Q��tXe��>/���i�9�4D4�,�Oqhv`:��d�Cz9��)�(%Xۭ��8�x�kD����?��'���*Mޑ����=���t���J�F:=.�n�gL(�c>�D�A�:J�w�O7�yV���)H%L��a4|<���h�A��p���~��7��씁�+А�wx�{��%6/T���19��GL�����g;��
�JI��Z�z�ʗ+}m4}��^黧{�qˤ��
U&Že�������Y{������<�\z�2��X7y*��-����ʯ������N"B�(�ܩ�<��Uݚ<7<p��v�����ʋ��t�1H�UU�k<���IɄ��8��p9^����_�j�U
+endstream
+endobj
+1464 0 obj
+<<
+/Type /Page
+/Contents 1465 0 R
+/Resources 1463 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R ]
+>>
+endobj
+1452 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 705.788 173.879 738.424]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1453 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 565.094 173.879 597.73]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1454 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 223.584 135.304 235.504]
+/A << /S /GoTo /D (structbsec__output__t_a74a917725569b67eb14e78a34fa9c55d) >>
+>>
+endobj
+1455 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [64.803 187.415 95.29 199.918]
+/A << /S /GoTo /D (structbsec__output__t_a1a046572bcb85189df10c9ac8f362999) >>
+>>
+endobj
+1456 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.258 168.798 394.563 180.295]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1457 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 151.246 168.653 163.477]
+/A << /S /GoTo /D (structbsec__output__t_a91006cd8f20e88a5ff2b6ebfbecdeb95) >>
+>>
+endobj
+1458 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 115.077 126.217 127.308]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1459 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 78.909 122.573 90.828]
+/A << /S /GoTo /D (structbsec__output__t_ac4e7ef20f713075472bc953efb13957f) >>
+>>
+endobj
+1466 0 obj
+<<
+/D [1464 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1028 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 702.891 null]
+>>
+endobj
+1467 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 679.17 null]
+>>
+endobj
+1451 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 562.197 null]
+>>
+endobj
+1468 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 538.476 null]
+>>
+endobj
+1029 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 467.755 null]
+>>
+endobj
+1469 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 444.035 null]
+>>
+endobj
+1000 0 obj
+<<
+/D [1464 0 R /XYZ 345.082 341.456 null]
+>>
+endobj
+181 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 314.241 null]
+>>
+endobj
+1470 0 obj
+<<
+/D [1464 0 R /XYZ 29.788 270.565 null]
+>>
+endobj
+1463 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1477 0 obj
+<<
+/Length 3304      
+/Filter /FlateDecode
+>>
+stream
+x��[Ys�F~ׯ�#Ue��0~�m�q*�a)�ڊS.��H��ò�������T�83�k���������[��[y�{w?<�?�{B
+$	�"NQȅW$���/���
+�L�3AQ d��+�sϋx�3�("�%�����
+ާ4�t�8a�F	BQ%�u4B2R��K0N�߼�7H���0j�v�U�+���o��&Q��}\�!�|�� (�xK-c.��'����j/�O(X	Cް`F��뀮�1]�����2Zq2b��_�]\�P�$C��ޣ�Q�������}�*/�K����6ٖyQ%��?��k)C��#	6������*��0�z��F5��y�m�DDЖ�T�49V+o���c: ���7���U�*�*ͷ��]�.��X<=�ɸG�BP% $@<b�0dlq�Dfo�*N�di�z���"�i9��u��F9�>�f��mUԋ�.Ce����������y]��ʼ��f�����yVk[���".�]�|��쑔<A�ܻۀ87��ND�#���iiʊ��j�����7����Ϳ��]��3�@��Y�%ɒM��<�&P[��.��(�o�V���Q}�%��g����E��V�x�<�00����t��3S�	\M�-M��`��bk
+ܨm	�*�n��Pm`���8�g �/�2(��X�,>���\�|Y��9]v Rk���yY���Jn�p4[�4�}˒�U	���5	�U��Y���{��
?��hQ�+-ꗴ��8�l����0��W��jx�;̐D�Q�X��|������,�B���2�$GN͈Q��I�������rH��V�+>pI]⇮���:g/u/��@(��n����N�U����>����@�a�t�Pn-v�J�M�gC�.�s���iI�6��.�3��#�3�����5���m��lڦ[Sd}o�F���
+529Lc���v����".����6I���6�	�lj��(�
��ҿϳ,(_��j�c�z��������������N�����@.$"�	h LC��Ќ�Pt�i�p֢��)�"G�Q�x�3
+�)��0������x���"�L'��'��)��q���[@Zv�ץ3
�-(D�$�ө�2�xW
FB$��G"!
+�h���^���8���Gkuq��,�s�#��b�P�’h�C`�������_�p3�)x+P�(�2�'�4SJC�x�ejr����m�`g�z[$YC�����6uic鹭]�:p�l�vJ�u:��P��YX�D8zT��DZ�(�d��O�}�~��׏ׯ�=�)�k�wrKS�l���8�Q��+�5�8�K��kU��h�$��ď���$z/�L����͛��~xd&`߸�z1�l��V9Y���I�q�h�-6���ҍ�+-�vIq��x�HN�h�:�0
+�4�Gan
�t��!A�vE���{ESpoP�fφa4�F��պ����-�A�+
+�������1��d�gϷn�%_�J��^����ʫ���'�QfÐO4���.�(��&���S��B�d�?�/�ŝ�օ4ˤH��5�Φ�:ޮ�f���v-�uF鶮t�ֺj�!<��	@�'�t�D4����b���ap�a��.'E�==-aB��0��&�"``�������sD��P+EQ}�Skt�(0����LI$Sv��H�A��Hi��Dbq��dL�nER���O�#9�Tr�7rN c!K%$�!}�
bv
+I�XtE��𚂧Z]�����;�οL?aʒ"Q��^�Nj��ZjY��Z[���"�t�0��Z��@1�����ͷ����a4�6��	�0B�S�!!��0�!uhD��t0wl 4G��6�;7��PӚj�s��ݳ�,���6��sT2-�2�~2��,���Wy&b�$91#)��:A�s=L�L��A���o��2��- �3!��%�� 3��)��3`Éb�	X:ȴY����S@�ٽ� #g%��	�t3L'
+�(��rd�	��;F�-:*�y�˥�o嘌0��e��+�>�ʇ4���6��{�Hg���.��=���)+�ɕ�w뤆rZ�Y���YS�vE��h�K�t��_����dOW��٭]��掦�u�o�(0���f��I�y������&�7
���^s�͒���t\��=ɒ�R�
5�2ϲ�j�I-�{C�����k
+B&��
q�ՖH�B*������I�Xg��v��Y�\���/���q�}��*�8��N�	��Dб�=�ځO����F'�(����{>�Մ��E٥h(#�������&�H��kv ���<�sӿg%��hā��������LՙV���H���
+N���y���km�\�GQo�}4����a<���\Y�L8�%���]�<�A��zw4��݋͸djqT�خ{�`�:��t��i�j#��w�f��"��V�lm�VZ-?a��G^�`r.Skfo��fwhY���*ϗ�bj)�	Z�S�u�U��ҺZ�n��)��A_��/�j��0��y��?����z����\-C����v�U�n6��0t�H��� ��׳v��XKᔣ�lrb����)X:ԴY�w~i���է�����v0�\���������I���(B\��D�v�$,m�Y>iC�������8/��GH�3n�$���n)�x��YWWB$C�݊ޟ�����L:$)U^�����•���R:{�Ϯ�겞�'Qw�5騧���О>�m���J���Pt'�m�z3O
+p!U�1�T���pD�o]���=��G�#_�M���y>P�xxtt�K}8g`�������T)cs�hd'�_�-:���ky����A�����8�)�'��d��b���wh�}1�b�3o�υƽ�K����R�)��_E,��q�V#���.�^����o}���fM�����~���}��Z����Z��V�A	p�Gz6"����~_l��Y���HŁc��I��d��&M͵���;mԕ�=�M�Ԙ���n�[��{�E�pD�V���gغ�?���f���P؆Q>���xPV��R���z��B���b+Vq����o��˴�9��R�Y���$��HvE��MĢ�T���
��&��M\gCԑ��6IfY�r�`K�Y�vW�bu��񷝐7�.k%�[�iwIQٵct�N��\_υ�C��(�u>|��L��
+endstream
+endobj
+1476 0 obj
+<<
+/Type /Page
+/Contents 1477 0 R
+/Resources 1475 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1460 0 R 1461 0 R 1462 0 R 1474 0 R ]
+>>
+endobj
+1460 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.801 666.651 361.949 679.154]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1461 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.971 666.651 567.119 679.154]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1462 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.21 653.102 240.304 665.605]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1474 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 613.777 163.57 646.414]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1478 0 obj
+<<
+/D [1476 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+185 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+189 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 596.231 null]
+>>
+endobj
+591 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 570.989 null]
+>>
+endobj
+1479 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 570.989 null]
+>>
+endobj
+1480 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 475.536 null]
+>>
+endobj
+1481 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 326.877 null]
+>>
+endobj
+1482 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 177.703 null]
+>>
+endobj
+1318 0 obj
+<<
+/D [1476 0 R /XYZ 29.788 63.19 null]
+>>
+endobj
+1475 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1491 0 obj
+<<
+/Length 1772      
+/Filter /FlateDecode
+>>
+stream
+xڵXIo�F��W�Q�g#��%u�$@��Ѓc�8�XH���i����Y�J�k'd�p�Ƿ|o�lq�A�r�
�����3��HDG� �)�@�B���G�g@MfxMP�h|kּ�{A���
+�yD�z?b�S�ǔ΍
9�BLX�BI� T�z�G%��f&A�8մ�F:K��3�5M�75D;�������X=���b��k���IJ��}�",���'���-�Ē��/�������?%kw��������a����dv�$G<����R�0��^$�v�&/����r:WY��Z_�->L�.z�.�C�N��{�6? �J�st���м/f�	gYH@s�`�A�n�O�@D�iHFB���nex�UjS�U�gv�Nez.���3��Cg���sɐP�}ǚ�SL/<�ɴ4^�ɀ�����ׄ���vBS��4��
+TLW�Z/�:�ղz�j@Ъ�cH�6œKK�}��*��W��M~oLJ���xg,�!�x�61z���!�����\){=ޕ�u�ay�0�oM?^�#Тv[�ž/,y#�cs鄮N���*
9�W�o挒n2�����{���0�������S_�`[m�B����%J�.S�}�ϋ��B���҇��S���c�j�?�
+0[��EE�Q���X&��B4)�˞"|-�1Zz��'_�`yU<!㾮��Q�~sp��;Gk��w�r;�JF5r�y_w���e�~��@g?��!ű�<HLlq��)�r����,���Y�zO����;���RH2\M3��No����njCӂZ�x�C�b�����h��6�-��UQ���FݫBek��	���N�P�tW�%s��]R���e�ٕ�F����
�sLI ,�����}�#�����KP���vU`���y=�$�NB,��{�����6��hぇ��2]�R����TQ}s@z��n]�-t�LK�	��?`�&���"'��q��y�- H���΅Z�q�i�:���索�tׄ�KU���`�Ȉ�8�a���P�"�4����lĚ���J|2�@o��z�tU�	���as��GC�S��,CI��7
+4^ا/i�}6,����!��e�jէ��Q2w\���*�W;ǟk`f��c7�Zn�X��H�C#U�r7�:�~�&�8���z�Wy�[ԍ�T��w���~��r���E
��'�o�Z�H�Q�XHW���'���FW �iWvD�L�끺$�����(���ֿ��8�(=3F�z#˫Қ���R���5;́z�Rū/�4��-��揷���^�癎�{���KO�U��gŠ�˓Qh���Ґ3D��mG��x%��7����x�i����T/`l��I���}:���J}�{~�Q�CH��n`$DPR��~CA�3����h(F��/H_���Z>�zk��L�e��w�M�h�v��e�wKo����z�������V��7r̍l��'H��b_�/1ĝ���z�^���Mr�&=�P���thrg����Ok����{���v�/C�S�Ë��+��d��9��Ę�}}�G>�ޯ��
�mɖ��kݸ�"�lu�7s���aܵ�nc�I��1ξZ�IZ�2ޙ�T�{��ie��[*T�	��fINU�V@���FVu�N\�`��'dm�����ڇQ�U���������fI�h�=p{�:��=F9��DPn>$C�%���b<���up
+endstream
+endobj
+1490 0 obj
+<<
+/Type /Page
+/Contents 1491 0 R
+/Resources 1489 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1413 0 R
+/Annots [ 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R ]
+>>
+endobj
+1483 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 638.955 163.57 671.591]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1484 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.188 546.503 400.067 559.007]
+/A << /S /GoTo /D (structbsec__output__t_ab188da3e58d458f4b94a64379404da46) >>
+>>
+endobj
+1485 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 505.466 163.57 538.102]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1486 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [64.803 215.194 126.817 227.697]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) >>
+>>
+endobj
+1487 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 180.881 126.217 193.111]
+/A << /S /GoTo /D (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) >>
+>>
+endobj
+1488 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [193.933 73.676 327.241 86.18]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1492 0 obj
+<<
+/D [1490 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+1493 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1472 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 636.452 null]
+>>
+endobj
+1494 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 614.986 null]
+>>
+endobj
+1473 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 502.963 null]
+>>
+endobj
+1495 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 481.497 null]
+>>
+endobj
+1471 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 414.01 null]
+>>
+endobj
+1496 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 392.544 null]
+>>
+endobj
+673 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 325.058 null]
+>>
+endobj
+193 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 302.166 null]
+>>
+endobj
+1497 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 260.796 null]
+>>
+endobj
+197 0 obj
+<<
+/D [1490 0 R /XYZ 29.788 142.722 null]
+>>
+endobj
+1489 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1519 0 obj
+<<
+/Length 2069      
+/Filter /FlateDecode
+>>
+stream
+x���nܶ��_��
pD�7��[s;)��66Ї$0d-�V�+m$m���ΐ��Z�k���&Er�s�pfx|��7FV�QHV$$gG�A�_`$$*Q4a�h�i,��>����c�B��)N#�L���=��A0�+Me�H��@��SL���1e""�fT1�H���渦�F�EBr��)�^�_��`C܃�E�3`��o9)����>��>���/�h��-'�0�$�J�$~�����q�R�:�J8^��^�C�� �M~?�q RAY!�����S0J&h"�\\��Xk'N�K�q񦬳�W����uY5&{���磷f�T��c��L5���9$K���� TNn��
.Y��!Tp�4�1W`T�`V+�o���LE��l�����:��YUi���8��Kc:Ԟj�2I��R)��Ԃ���0E�d�
+�D��Y/M'e�ۘ�qd���p�`C8�T�u(h)s��t�]�K`z���)��A�"9��z]�
`�jqU�첶ڿ���:_�/�ׯ'�>F�1M9Z��v�cӂ�^y����|ͫf���l�����:��QG���^��L��pݏ�~|�HД�_��w�a�ݢ={���j�M+?����Y҉�(BD�
�5�%�/Q�./}�(E�?���K0���:S=[J-�ܞ��'u�<�)���	 �7Z.6&-�b�>�l���v=K$���n�be���lM��A���`�j��]��e���:��z��2_v�����{q׳�ܡ��T�ȱ�V+{��TK�sp^2ch�$t�m:~�|�PVݻ����]�Y�oQ۟B���ô�J�>���Ƽ�Ԧi@v��;r�o�8h8���v��η�X@8��λ��.�L��+~X�@��X���9�`Tc�8��J�ǝ��qZt���=0��[&	
���)j��뎺ತ���������
+�E�ْ}B�a^@��TG��^��՝v��Sm+3�G�J�.~�w
q��=�0c�P�� ����"����ȉ�^����&�0�V��m
{L�e3��yuL��:�j �y�g"~!uF1
Eҫs��������6�4[m��!�<��uFG����B��8��W�Ȭ�}!�����?�rO��Ƞ�J�wsa�h�>?Ƙ�䱧DK*d�2��R	m��(E;���m��3Sܹ�sm*Sd枭���u���]N�&uhl:V��I���N�)��J1��'��(�Nm�d�<!�ܤB�x_�{|��$�ĄGvcic������|~�H\��T2N�^FThJ�֐@�O	,/�!���"�����j� ������o�&�{�4��ᣥy����E2���O�����u[^91]b3Ū������gߵ5��,��+����6o�.��Mf�K�8w�#�
s��ok�ֈW�EQ��a+,��X��Y��ڋL����Mڂ�M�3l\P�|ie�8K?�A�&�E��}�L��n��|��s�+�a�ef�
+Z8�ݵ�-��_�P,"X�����ߺ���:=aR�,G�=^3��^�.�Z3M����e����r�$iUl�(���6�WO"��/l���qr�?
������U���@��M��@�9�_c[��v�+S�~Ĝ��.�N���m��`P�l:��a�[���ʞ`ǎԳ~oKp�p��Ƨ
+����1#���4�ƭ��L����-�8j>��Ό�<�(��Y��wy���ńa���t��0�w�#�+��� �pVB�rk� !4Ӷ�E����`2L��.o�u�s��tz
+?F���-疷�=<z��i����+�7�g�4�v;	�W�M�b=|��ɯ�K�5uN��Gk�1���q�13� �U����7�R���׾��	��a�)g��wnm��
���'��8V�[|ƾ�B��O��:?�J+_φϴ��P/�z[���$�m�.sW�C��V�.�vH/�2NJ�_�(�.��
`��9�B�F��֬��*r���ݷ�kW�n/�t�]睿ő��}f�Cڇ�vk�ƿ�8��{�����6�2�}�PjZ|���P�
+endstream
+endobj
+1518 0 obj
+<<
+/Type /Page
+/Contents 1519 0 R
+/Resources 1517 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1525 0 R
+/Annots [ 1498 0 R 1507 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R ]
+>>
+endobj
+1498 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [90.035 521.522 226.024 534.025]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1507 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [116.505 495.79 263.981 508.326]
+/A << /S /GoTo /D (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) >>
+>>
+endobj
+1509 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.076 479.883 435.17 492.113]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1510 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [327.076 463.975 445.479 476.206]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1511 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 405.792 173.879 438.429]
+/A << /S /GoTo /D (group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) >>
+>>
+endobj
+1512 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [55.476 392.243 163.57 404.474]
+/A << /S /GoTo /D (group__bsec__interface_ga832388c889417ed197609d9965625bfe) >>
+>>
+endobj
+1513 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 283.55 106.199 295.47]
+/A << /S /GoTo /D (structbsec__version__t_af823001b85e62b90279f9e6f3c478c23) >>
+>>
+endobj
+1514 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 249.291 106.199 261.211]
+/A << /S /GoTo /D (structbsec__version__t_a9d47d254d17740222791fa0f53c7ac52) >>
+>>
+endobj
+1515 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 215.033 141.37 227.536]
+/A << /S /GoTo /D (structbsec__version__t_a3d9b11a72027026f492a438342a2efbd) >>
+>>
+endobj
+1516 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [76.934 180.774 141.37 193.278]
+/A << /S /GoTo /D (structbsec__version__t_a5daac4534748c6f0be9f009273613b02) >>
+>>
+endobj
+1520 0 obj
+<<
+/D [1518 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+201 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+677 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+1521 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+676 0 obj
+<<
+/D [1518 0 R /XYZ 234.846 638.216 null]
+>>
+endobj
+1522 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 617.606 null]
+>>
+endobj
+1523 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 510.563 null]
+>>
+endobj
+1069 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 389.752 null]
+>>
+endobj
+205 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 370.414 null]
+>>
+endobj
+1524 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 329.111 null]
+>>
+endobj
+209 0 obj
+<<
+/D [1518 0 R /XYZ 29.788 142.709 null]
+>>
+endobj
+1517 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R /F89 511 0 R /F97 510 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1528 0 obj
+<<
+/Length 1144      
+/Filter /FlateDecode
+>>
+stream
+xڵW�n�8}�W�QV4���fs��M�C�d��Uؒ+�I
+��wH�f�F��$�m�p�p43�Lo>Q��F-A�#X 
+�7�!Hj�5�H	�c!Qi�b����P��0�j��H�C�I{gEV�����BS�n�L�C�Sc'x�)�P�(��YPk`gLa��q0�".�����$����LhO�mL�o8�(���ƾL����%)�����"�!��P:~�UoxHx�P3"���OOp/q�U�|~5q0Rq������t4����k�h�@L�X)k���9�΋*]�C����UQ�&�~]Nd��.�c������}!h��2��D7Vl�h�n�0gT*��1�X��VKt����*#�bz@���O��}^�e��Y����]67��k��,�R��d�2���Qq�&��lB�W�YϽME�ۘ��f��c�c	|�
O���,�x�|-�=��e�'E��.�ku_�6���2���)+0�>;��L�
+3�t ����h��1���6`p?�-��o���R�����u�@�O�Aod��Y�;ߩE{���{#1`�?�S����3��w���5C���=G�o�|󿔾��t����<
�b�Y�S��q(�((Me��Bs��.�:���n�դ�_ԅ�U�/����1�WŮȋ:K��������63S��ØQȢӱ�Ax��2R$���e���߄��:�)fR�Ɩ��#��T�WG��Bp�$��
��dtPEb(�]y��u����Cx$��E����ݹ@b���D!o
+%�߲���i���,�}	�PC'ﱱ��OYu�P
+��o�b��L;��i�F��ix���x+֝{���C�}���FZ��[��A��n��H���<ݠ_�jw�`�����հ�꣩�iD\4uMS��{2���/�l:2p�r4�
+�x	��9b�vm���^Gǹtt���f��?���!S�[��^�-Wu�̛,�,�
+�uU�ˤ�g��/�����gն���SЁyڮ��78�Vi�e1ߥݖ
+�<������f��NR�dŀ��9�l�h���;!7fM�W�������X4���:���Y��$��;k@����[S����;�Y�ܫS�	���9�)V2�S���Q�C:
+endstream
+endobj
+1527 0 obj
+<<
+/Type /Page
+/Contents 1528 0 R
+/Resources 1526 0 R
+/MediaBox [0 0 595.911 842.745]
+/Parent 1525 0 R
+>>
+endobj
+1529 0 obj
+<<
+/D [1527 0 R /XYZ -13.423 915.745 null]
+>>
+endobj
+213 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 737.428 null]
+>>
+endobj
+1093 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+1530 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 719.646 null]
+>>
+endobj
+1095 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 654.393 null]
+>>
+endobj
+1531 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 635.851 null]
+>>
+endobj
+1094 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 572.558 null]
+>>
+endobj
+1532 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 554.015 null]
+>>
+endobj
+1096 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 492.707 null]
+>>
+endobj
+1533 0 obj
+<<
+/D [1527 0 R /XYZ 29.788 474.164 null]
+>>
+endobj
+1526 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /ExtGState<</TRP1<</ca 1/CA 1>>/TRP.5<</ca .5/CA .5>>>>
+/Font << /F45 229 0 R /F44 228 0 R /F122 619 0 R >>
+/XObject << /Im3 221 0 R /Im4 222 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1 0 obj
+<<>>
+endobj
+2 0 obj
+<<>>
+endobj
+3 0 obj
+<<  /pgfprgb [/Pattern /DeviceRGB] >>
+endobj
+1534 0 obj
+[799.4]
+endobj
+1535 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+1536 0 obj
+[513.9]
+endobj
+1537 0 obj
+[777.8 500 777.8]
+endobj
+1538 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+1539 0 obj
+[295.1]
+endobj
+1540 0 obj
+[1062.5]
+endobj
+1541 0 obj
+[500]
+endobj
+1542 0 obj
+[633]
+endobj
+1544 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 222 655 789 811 549 713 549 549 494 713 823 670 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500]
+endobj
+1545 0 obj
+[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 222 655 789 811 549 713 549 549 494 713 823 690 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260]
+endobj
+1546 0 obj
+[611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 278 744 1042 1083 549 713 549 549 494 713 823 766 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556]
+endobj
+1547 0 obj
+<<
+/Length1 1416
+/Length2 6052
+/Length3 0
+/Length 7019      
+/Filter /FlateDecode
+>>
+stream
+xڍwT���6҄�RE:Q�CH��*�� �$$�� �I�U�*��H�* H��)*J/_PϽ���_��V�Jޙyf���ϳ�Λw���v05$��I�uu5�  $,�	89��XW��~��)��#R��PF� X�O��u���W X��K�@@!H�o -T�x�큺@-$�p*#Q�h����ߏ@n(,))~�W:P�
��C!�.�sï����P8����2NX,JJP���S��@��x��=�X'�!C{��#� n�?�	�8��Np����	AÀx�+
+C`�)�04�:�HS���!~�u~���l,��W�?����_�(醂 ��G���W��za��!� ����C< pW��uPM���O�g>
Ga1��Ō�e�۬��WF���X�?8�ﻷ���uA =>[p�����P�&������������$ą%D�0w ��$x���7
+�+�p�g��A!Q@�0?����@<`@,����?���`0���`�p����n��o�h���������
+�0{$�����_G,htO���)ߟ��TRBz}�����B�  $"�?����]�O����p@/�]�ߨ�{��C�?
+����O]���L�����/����R�4���2��;R{���+�����!npW�?<u`�2�E�ŀ�o��vua��n���B�rPD8�)������1jp/��]8���6��&�s�#`w�������+�W��`����`���:���?�PE@���B�h�7��xK��������@A�O�g�: р��
+:^�e�m�~�@@A׋&.�X
���Ʒ�&�V��	�A�H�t�sup�a�"�'�ʐ�Vڡ��P�5�[u�f1�(;kJ���dX�ڹMO��0g�Î�r
{���>?�ښ#�]������D��[��O�R�ؤ���wY��������8)}�������EW�&�Ң��^Y��C�"i��!�ɮ�xEt���On�AKі�z��eZ��	�T��}3�]�Q�Z�V�s�b�U��XTD.W��<��3��c3���N�VaӾ��<O�a�޶�����M�vq'�$�h��+5j�N)
���i?��N��+�x�1�L�k��+�����=5�9���v���pO0��ٳ��/~u��b<B	���L�^V�����sz���=��2n&d!���b,W4#�`N-,|��VnrM��s���{�>8���;��J\S�Q��h�B͌oF���-���ZhzU�2��mq߷�k�J��
Y�W�kq�����q4R
+Ȟ�l�-28�A�9�V��RW�[)a�=A�^ދ��@��=�a�GI`��&�t�0�@��H�߽.m:��(�����Pn�����T��-7E�੡p�D/]�O+�S��eI�����aݤe}J'?~�i��W���'�F�(.�6�F�U1���R"H& ��s�殰#3�N��5v�V�s�s����J,���=�.�o��b��H�\���z������я�	N*�ܲ�n��{Y6�!�����l:;��^򵖯�U`���A�%�H��v�MYZ�!���N1�vy:<�mA-�@�I߫�	Ľ�iN�F
!O�H�Ѡ��G7&����	@7���t}g
a����jS���%����'��$y��g*�=���ƺ�ݱ��K���h"�P���(�.mВ�̜����F���.Q~1���G!�TN�^D�z��;|Ш9�`�2V��p�0���;�X^���f�QͺJ,��gPջ���7Mf��o�Hۋ<�7.�����t�Aw��;3!͇�~�<��w�x��`l޳[��c'���<nҦ�
+���{/���T/��Y���1�F��9N�]7+�t�%�����.���L3Gi��w�>�i��y���M���lq 
��5��'Bgt�+���o�-��_�p|�n^N>�vj��8�c�g�آ �-ִ�&�h^ce�`��>��x�/8/�:e�4���x��;6x��د�fu$��2T���p�<���L�V�9Yߺe1�����J�IvsȂ��x�`^i�3e7��
+h����	j���g'z�H���֞*E�`��׺�6 p�{#�
+mu�d�+pai��@��&EV��	[�����[e���U�`W�盟���^��7����Q���&C,����lQ���R�
�}2��G|���PSM�J"1n���l�}@@��s��P!+(��/�s.�������{��ɚ�CC{���r��O�:&��|�;�u]��~�%�nT�����R_��[���#{&��fcZI?�2����`�X��@h�E)!������gœ���'�{1�=�^4�h����92oe����ù��a�kz��;4ve�P,�1�������̜;+�f�:��<��&�.�,=XipՄ=Xe��VA��S�@�Υf�x�3�(�H~�!M�5���f�<�2���>���;¥�ܒG�ك���r�
+ѽ+oFK���$��׹gz�����AЃAgz9�q������:q���Oz�MR+�3���a���,}��3��.�IO��OL�"�LV$2D�}�׊Xa���ʌk
+��+�JfJRoV��$��Ѽ�1��K�(j
0�(�MH���A��}!���P��W�HCC����x�.�%���*o�׻z��o�^��F�҈,��x7�sL�i�3����1�@B�,�q3�iU4�4yg-e	ui��x8[~<+�Jt^^��M�f��f4#[ΦV'@��m�W�j ���И�N�OPnHԅ�Á���S�3qzџᷙ��?�yjbC�sW>������r�����{����Sr�ר{��W������|۬3[eCb-�c{�w;�f�Z�|�`d����N���C��A��&G}sJ�>��n��k��Z	�TD�wR^��|�a>���R��|�bt�D+DF�3�8�=����hI�R�0�e;іIͷ/k��/�Fy�O��$�U�����R&:�)+5�Q�� �l��,q���G�؂U�MI|��;�� �dS��QQo3m_\���R�wߩz��g%��S�rܤ�T��˪Euk��{a�S��3drE���y��g�{�ص���ʲj!\�����a�#1,�εk���]�j$An3��&��
O����q��5#��B�藷ʋ
+Q��ݢT�^:*o��"��v���3$�D}�r��ZR�Ny4�ȫ��Ț���<y���9���X�=GVIĶ�j񌟨����޵���@ܫ��Xt9	���(G��s
+B�ȸ�R�J�{���\��9�C�b +�m  a7�7�9���^$w��{��R�)?�K�˦�����ݓ��l�nQ�
+s6��~h��<�NCv��F�6�bAT����^�=���|&Q�T�M7��9�ؾUO��r�?�HBI+j�e?�z#��zѵ�D�w�����}��ڗ��Q�+�����.�:K	R� �_p~fR��{,�l�q�^iu1q*^�c�n4�ȹ,��gݳ�/���h=�i�9|eR�=��v�9�9��)��5VCy��V�[� @eq�����Z��NT*󤂹uc�����O*�2���8?���~�2Y߷�,�,���P@�T�b�Z��	j1n<�7�
+�IJ��+�LW����S�t�����6C�/�\�uF>-}}u@]������
���&8���X����ơ���@|(�&��Ah���o�Kjt�3-���l1NWc�j�>Z�@]��*�Շda�����av[Qw���w:�BO�i75�3{�ӈѯ,��_?zs������HXlF��@�/��rx�<t����D��>*t|Dž�i�P�b;����2�jJr*���8�������U����eYvK�q��с�8��GЯs��HT�+��N�hEȫp[���g.Q-M��N�\k�׃B����̶��K
+�Q7Ӑ�
+:��T+C,�J\[�_L�&ҡ��#L+!�ȗ�v�f�D�+�~�Jj�{�E��]��p�
���,s=����pP���j�BEs�������P*��UC��6uwp�f\���c�'�~nfY��?�t�p[��_\N��i'�Q��&�"H�����L�����E�뷨9'Ku[�K�6�����>ka�
+���񽭥e�[/�=ڢ��Ϩ	b��r�gY�VEJ0R�V���B�!���]�j��t4�gwvo���7�����{��dB�gN]NW|�I�G���Cy���o{���J�sRG��Z�l�4���K>F���l2��|���J��4�r3��Y�|춄���O�k�w0Ĭ������ߟ�����m~�]����JlA���j$VDbRt)?Ww|ܔv�Y��HIV�c���M�L�����>'4��� rvX������Q�n�{��3�j��9A��x��0�^i���J�`cŋ�2�	�g��K��V��Y3!w�og�9����}����DQ��美-�{�5N�@�겹�e��ա�*�T^h�`�'��]m�����k��,c����a��g�䕩��	���M&��.Dq�7����o�B�}[��百��^�͍l��x�zܩ������"PI�dJ���ƺ���gfo��rד��m�3^9��Z�t�HQ?��<�ơ��{�5�2�qK��$�I���_a��+|S����zR*����t�seW�����ʑ���i���b�c�z�[=��Hh�����h���%��ʏ������*�dg�q#�)�tY��e�BV�m�z0�l��$P
���Q8���uL��5��Զw����e�g��U�V��33�j�v"�іB���&P­���<)u"��%��C�(R�%�H��v#�xQ�+,GWU�]]��|;�҆�ш��!���
+���z?��k���M��n��`Z��IF�J�z�g�ЫBi(s;K;e5��#��zm��I2�1�ښKX�#��"�r*�M֬����;	�#���w4�k^Y
+m�
+,�r'���s�֞�=S���w��.������y�qj�]cAt�i{Ŗb��FKo~�ɲk)�+n���|NT���'�mY?��*�z��!b� ��Ƣ�������c_-
+��]
KbfR:�;I�&�*2<)[V��ߒ_~O(�4������#���!ØcMSw�;� C�^DP�շ���v���S	!I<�*퐄K?�����QrVn�%�R.C8����Lb��qT�FhWh5G����[�%����(�n@��t���a�'i�v���)�`u�$F�@����c��l<���V�Ԓ��)�����^Յ��$QSW?٬v˞'R��V��K��*�
2<��X����#�e��„�el��1}�0g��%	����+*$/c�Y,�z�$M�]v3+���`9O���ִ]�,�C ���+~�lc�-�>E�Uo�W_�?�=$%
!lOA
+��bG�(�(�w���y��4�m
dv���� �K5�.�ES��1�)����]�P�+�ކ�2�l�^���Y��?Շ��*�5}�A��w+��y��?�L'�Ku2R����]:C�
+VQ�q�Ռ�T�~�?�/6�d��m�ɿ�\�Dnw��X�G��y];p�
+�R�E��*���j��!9;���a�2O��+ͣ��D����.�`1�aE�/%T��8x�֘�:�ο���0�Y�)T|��L��~�@�Rt�|dۆl#/�`���	��aq��Fz�\�_K�_�g��~��u�Pԑ���9��n��^��|:����6lU־�Ș6{���G����Ǫ1m��tN�Q?�!E��
+g^�ؗQ�>L<���{�������N��<�v���Ҕ����G��0��b�B
+
+[�07Z�56ӷ
e�."����������C�FƼ�G	mu:�o�����]\�Y����T/�Y�6q�vMK��	cb���0�aƥ�N���S�:�\Rf�"�Z��K���t��#��/g^U8~o��HOJ�I>�_���E�d&�s<��v�#'S�膀�5�H��K]��<i��	��z�=E�
+�X�uI/�1r2�i�hU�h\Hd����a��!o;�F��9��W.��q�����|�
wjY�j��}�akp7�`���g�����?/�$�2$�X�?�ӝ�@�������ʿ5T�-���p�~�q����aj�AtF�*���/-h���ݵIc��nt'�Uj���T��1�_l����`(�X�z}�fӖ��M�����!��ɰo��4RP��sS�S��+�����Y���T����"�n�H�DQ�p�^��0,e�z%���޲�I=�gymO�{,6������,��(�+���"@�!ʚ����{\c�c
+��=�������AA&�?�|>�v��X�HI��'���j�g�ҟѐ�:�G'2E�0}�1t���;�h#o
�~峊�ƻ5�_��+w:�<��*��
+k?_��.P���6��0�F�P�f�k����q��+��:v8&R;#�X�R*��+��
���]��'Qו� e�\o�uF��<.���lrN�[D/����6� X�K��a�Q��_]�Ȓp�q@@�u��U�����k��#�$�Մ`�X����cKptzy錔���	AIB�ζt36� �|�E�[����ϝ>�v�圱�5GD-�?\T�u��
+Z$��"��qr���,�8jL�����ŅK;J�2p�rݷ����\s~�����a~�Ѳ$:�cNLJ����j��ux�L>��	͋��y���->��j��Łyn����c>�yR��X�PHi�d�{��G�%�ź����Q�xz �qKʽ����w���ǟ�;V>|�F�����z`G���a������\��x����m����I6.�r�����v��	�kz�7ٌ��(I����(�^
+endstream
+endobj
+1548 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SYFPBV+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/greater/less)
+/FontFile 1547 0 R
+>>
+endobj
+1549 0 obj
+<<
+/Length1 1398
+/Length2 5932
+/Length3 0
+/Length 6896      
+/Filter /FlateDecode
+>>
+stream
+xڍtTS��.�HSiJ���kiҋt�EZ!��ޤ�M�" � M@��"��4�",��;��u��Z;{f��w��ٜlw
�0�U'KJ����,*��sr"q(�_79�1��Ġ��@���}�0��A(�"
+@ĥ ���`@���.(�<�v����A#��JWw��#̿^8/����%�;PpA�#�04�
�9"\�'�a(��G"p>�(�#�ùJ	{yy	�\�BwY^��s�X��'��50�sA��L��0tDb��
0�8/�;�;PH8��gx�����p�@]�uE��������w@� �.�7�W!$�w2Ǹ���>H�`�D!�]U-!�7N����~a(,��!Q0[<�w�0@UA���;�t�a��Hԯ���߲
+�N	��@���SF�#��k���Yg4���װG���
a��*l�F�y ԕ�B�.���8�
+��%*!
+ ���7�Q�WyCW�� �?���+�����G�#��~X�'��{ ���w��9�!�8��D���:ލ��c�����܃��_��Y��e�A�|���_a5#CU�?�;�����E��A(�@ `�����e����'Wm��������_-{�e��_u��,��������`(�@����;��F�_U�_,��T=P��a����#sA�|������������P��j#�.�U���JP@;��,���#��Ho��]$���3�F���B�w1X䯏>��^`pg��'��W������ه
+���%<�8�sw����W�����P;��oj�Bh��g��1���,��Y/G����q���pw�7���e�V:ፀ������Ü��Z�j��W��oe���-�"�u��Y/&<ʙլP}�Q�rj�Qt;��0��\��G�@���M�ĩ�)~���S��	
+L�Y��ܻ	��R����9tpR��{=���u�\��Fx�Nk{my�����%}��^��w�%���Oq�:Y�2����^5To�{稻X:b�5<CV�9"p�*ҽ��b$5�s�W�y~ɢ�U�U�3�.`�g �U*L}��`�Db��B����Ua��GLPƱ(�3T"#o�=�!��Nf^U?���td���;��eE�H3O�������X��j����I>b�������8|�ɐ���.��l
�2r%n띊ke��ذz1�_J�d�Pw^�V�����7�[BF��-g&5v�e��)�{
k��'F).�i�)��H��r�������$�U��$ob�޾�k���g�$��YP� ����B�pt���=)��u� T*�3�h-��-���Tb�����������u�/23����<U�N�����4��xplK\1I����"��Lb���Pv����r�_����)?Kk+[�Q���rfK��=&�kǓ
��S����]Gc�iuȦ����л�R>�.�<?O�����jm�G��9���#n�¨�sKb�>T�z��pMM���(����$�&2*Rהc�mI�_��xp[z.#0������h���C���K�XP֫����Ȇ��|�x�Jgi1��u�
P����|m�X�����Tvé�|.�������ޜ�pCl;by�ƻ�d�M��!��-��A����*62muu��U���A�sG�=���<���K�^���ث����#R��Z��E��o��a=�w���A�z8��&Y8����'�9)��w��sA���lILD3�qchÁ��Ƽ��S��
+�S����LJ=Hf �/������s�|G�әA�r
+'_?X)#H�YeN�u{X�%�E��2����U8|�$v5\m�'����l�M�c�{�����jG�\����~Wz�+N@�,�j�Q�L*�yɿ]�V+Vh�/��z{�Zu[b�1$-�l+��ޕFM��X\5�od�ް��F'�",~w{�朏���Qiztq�^/l��[+�2���'���[�Ci�<�'T+���th1EC��U��ca�����/LS�@x��ra2�!7����:���Yԥ�7��8�H?�3�~�gi�X���!);�����'y=	�Pćfܒi���2stWg�_~Is^��;��
+�������w�Ӹ�O���%ay:�b/9�ͷ�&T#��Y���7�͎;��N�k���mj�C>��:r�g�rd%����y�`�j�+�|8xx�J���Q�)���E�����x��bJ�/�*�����q�<d���a��&���V��C0�l����\���ZE�
+���;�8�嚦^�¡��w5N�F��GϤR���-N�xȴ/��9�D]8~�Q4
+�2rZ�]C�������H�=߻R�+�u�,����tW�^�Y�gG�o���Nk�=h��,���?V5Qz�\���Wc��6WhN���6��&�y���9�*���Z�(����F1�ɒ!����X�⻠O�O>��?@�ع#fk���;����9�j�b}��"^�M��Щ��	&��-@�ào���>�MP7Jm�t�o��`�!OȿC��eq������~�����C�Sel���B�Y���f'�gf~N���3#j�.c����p��K]�a� Vg5���'�*���s���V���nF�G�B�[,� �q�.��o>��Jׂ���UQ]��rH`�}�8��z������b}���B�y��K��C�CD���t˻2�06�\�\M6�y��̥>1(��;������/o'P�cd����l�C�?���$���Nw�-��%NC�{�3���R��� CSLC?����[�j�t�]�X¤�$��v�io�n���K�˩l��K��//�mŦ'�~'�ɏp>nl=�p��3vK�:��L��3+p�yH��0�|�l���K�PS3��5����2<�Lj)�����E����O�I�3F毊�n��_�a[gм�W;W���,�y*�u��g���;���l`>�~�K8��S��szT���e���ٛ�/+����a	,[�4s;�.9$f���������r���e��$�S�\b�+��r�2A;�p40�Ƙ���Z��4 4�8������6$>������>|Uw-w���.[�0*�S��mp�n�&5�$�R�&��[\��O
D�� ����l^NA��!{�@�.oi-I7���S��G)L�g��E-�{;���n_��{7:ޟ>ͫ;%���Hm��x�8�Tx�ҩS��LsB�얘[l�~F���ej9�SM5k'��}���h����;EvK���T�R�z���Gm�5ϫ��a�#W;�$����z4��������#��z'�	s�
+�_�@I�1�uZӽh��b�sZ�h?�]9�10���*�C>����e��$
���j�W��Ã�B���7;��~N�ֈw3t���L^�m�
�|}=gٹ��{�wPd�3������������C�Z��2{���N�WG�����B��
+4�\,�A��_������K�mKi@�n����Q��Zy��=��D)!v�'a��%���1��ߟ.�pr�Z��j�ݽ]A��UI9���{���.�����𲳊P)�=��9ݗ���k�T�#��;=��F\�V.��:�jB�ժg#()�c��e�I���`~+t��3�Ur%�{�;�*ь�_�vcOEn�p�<a�5����Tk��+�����a�5�O�b%F\�S���"��}�v�$��mIK{�%��5�ͮ40�)36���m)��[h�U���0���k鬟B��o<o<
V�8qJ�$���+'�Ng���n�H�������I?�51)�L�5k�M:]m�<�apz�~�s ���䯷��
�K��M�I�ɂ�����dW�Qąmtl�gW���"�:D%�!q�K� ���x��w65Ѡ�͠A�徙ѰǷ[6����6�F�I����E>�6jg�������$!ށ���&eW�����$�D��[\-�[��S߽v��"٨�8 ��4��|G���@4������(VRɃ�3@'�uo#���/ۉ���R�jl�r�z+��#���$mG���]��y!vR����>�ű�xލ�#�ZS�B��R�Ȝ/S�����v��|���)����|RPu���fIt��& �a�yI��|�6Q�a����e�e��/ߺT�^Xq 4k`Z��+Ҿ��bW���~�K�t�?L��ȇ�P~}NN�t�8��#'�ƭ�[�=����q����y��7��lU�!���4�9�G�q��E��)�ԇYǐ!�&1́".��A�'X�H�
b��(��sÇ9�v��,C=��dRFJn��q\럔�N��&š7v�e-�O�0S��o���?B<��xqETEX��kŧ�J�G��&򁠮�g����m��e�Rq\~$A�ȱ��f3�q����!��l���	�0�C��~X�+��Gi-G)�5��#7��
T�]�'�xFN�|R��l�S��="R�|H9�zo"�L�h3@"8�Ɓ7�31�B(��ި��
+��w���:A�Mă�����`��+C;gz�?���g/�\����q����7���j���B����o~Kݨ�8��|ik��3��R���2��pbR{����q+�T`��Y=x���i�̘�|)'V���FA=����`ڝ/��h�mm�,~A��H�iZKv8�뽈�r�����Z���e�3ѿK�hS"Y��㏽w��<�m��f���h;8�\��:�,&��5�N�:����>�4��#���5�EJ�E�c� K�jJg��y��N�B[š^&&�Z���Q�[!��Ω������:!�.�ϯl�ܶy�.�G�g\u�g@���Ŀ�sk]-7©��-Q���)-�{}�'�Ȋϩ7�Ηc�	��[8��֋��Ơ1;١B�	��;�|dzśLe�uˬo�Kא�c	�{9��'��,�����/���eHx�T��`PS���o�f�r�K���ɋf[H��r�j����9�6��Ʋf�F&L�$��-����W!7lo��rET��,�o\��E�<�|i��]�KВ��B����$��L}��֔������L 4�'�삘ps��=�]Wk���%�7�"+�a��>�����#dg?�e:�m�(gB�v�YByK�V�Ɣ'd[]ߘk�+4�kC0_c�.�%�4
G�bb[ce\�H�5L�_Tpvg���:`�yF,ύ�1�!�.W��6�<_ٯsB�D��^�����S�5R��n�n#���iԜ���qQB\��U4(f��~�NLJ���T0駆f��)w��e;�����9��a_��^�gb�Q���i^��+'Sgj����&+��rbO�����+�����X83�]9V���=�f+�]��3’6�)�4뀵<|+�b#�Msi��Θ����G��G)	�$G��4|i�V�|���i�F�Ux+��.��e�_��j�)_ڹɔ=!�N���[����ʢns�t�>	�ߦO�q�lR�$^�㢿�����׸G�i&���|�6)�t2J����h����0��ۓ��I�(r�B�NJqj݃�Ԥ��P�O�����O-u���ؤ:U����P�GEf�\�+�����5O\�c7��Z�oV���r��ŗt��CK��QH��Јƍ<��b��ZV�"k����c�o�e?�Ʃ�.;y�u��>����V�su��Hl#��$3���	e�A*��J�i�����7$�2 d
G{��	PD��<W�>�t�{�!�E�>1�o����h����5h䤛��3��!�;r�B@�kxi��_���>�d!{w�ȝ���z/�×c���т��%�]KbO�u6N�5���/1۾�@�Z��cX���ȸ�ujF>E�hB�����ǃ<c��=7���짼�1�(��Y�{�]�Za}�ʥ�6И���.O4�O3m[��f�)|��JN�G���4=��'�e��Q��=՝T~C���un};`Q?��[�k�'��L���)[m��ד�J}vW�A9�`Ϣ&���0?���WRV�T�p��������7�=��P�s�r=�9��z��rQ����R!h�}o��=S����J��0�LsȰ����4(� ���7 �'c�ŒF��9��m��a�]�%Pm�:�lj���`*ψ����|�15�Fp-��ַW�ܲ6�¦�,YTόy6���
+�p��N���v�IwC��I~�@n�����p�s��W��W��nE_��a��:�J����g�MCr�U�1���=_ھ?^X�����-�"b�
+=�eȱ��^:~�XZ����[��(T9��1�sz~g)}F���r��%���n(���X��I�	R�U��ޭ��K@��XΟ�uF��3�.�\�����Ky�Lb���?
��b  �Uh!�q`��a�wCj}X�&*�q��?��7C�N��ں��"eva�]�<�����=˳��U�1Y"�~=�_��6A�q9F�NODŰ�5a�� �{G��٣�����.o�G�#�Z��z��gY��a=U�O&˓2L
s"DyD�1��1ྡྷ�Gd�Ż/iK�g�͞r��(Lrh�wXU���^��ޭ�w�I`j�|?�N�X�Q�Ӹs��Dy��M�뙕sT&.]���
+L)���kR�Ͷ�U!�;�+��ti^&�E=g��З�G�Zz�A�l�rS_�NY�-0z{���<�b����Q�JX���=�˰�r�O R���ځ���ewF���0�E1�y�e��ï�[ȳ�	ie�Ra)i�)�chZ����[�M?
+�!����qD������S�猡�U�ؖ��f$
�-��D7����oZ�
+endstream
+endobj
+1550 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GNUTFA+CMMI8
+/Flags 4
+/FontBBox [-24 -250 1110 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 78
+/XHeight 431
+/CharSet (/arrowhookright)
+/FontFile 1549 0 R
+>>
+endobj
+1551 0 obj
+<<
+/Length1 1388
+/Length2 5940
+/Length3 0
+/Length 6890      
+/Filter /FlateDecode
+>>
+stream
+xڍtTT��.�����C
+"0tHw��H�0�303��� ]ҩ�t�t#�H�  H�t��8���޵�]{������{�g�3����Yí �p���(P��R����@��	;����&a7� �P8L�9(   F�Ba���0���#�_�/"�/*�@�9��E����P�� Hv��'jk�”���	�����>��s� �`�B�A�0� G�>��<���S��r���sww�9!y�[i���w(���� � ր_�AN�?����?z}�
����0
+G(Cb"\a��S���	�q���8k�qx�{7�~^����+�;Ý�A0O(�`u��t�5yQ������#�	�ă�@PG���w� �������xH0�B�"���F���s�J0k���B���O���1����g�0�;��`�Y����ՙ�uq��)�u��H�������@1QA1!��������Jo���m����L���w�`���@m �������m��D�����Q�+�-F��5�揌Y>�0b����z�}2���s��������i�*q����6yy���G@�# �E�����?�肠���'V
f�D�isO�j��/8�����d�pl!�����(c^���X�����,�/��wCʮ���͜�����u���A�+
+��-8���v}��Z-�5��鿭j(�	r0[�y��x�B�P�2�b�E���`�����0�.	��s�D��e���� 1��c!1lC�^�/���?�P���ֿ�' ,�! O��1�0���Pk��oh�xap&���`G��Z����� FK��`WS�7 0e�%��7��|����W5�T��q�Y���K>1��}F��Q�X���H��(R��ͯ�̾M[��$sq����^����=�M�{V1S�G��^nj,S
X9O�$�!z�t��l'�����g��_�5��A]�,�ܬ��^Q��I�(n����h�o�.���~֪St�Z�٫$�T
��S�8���}���w;�������^�(��3*
+�Ϳ!��z綝J�e�rKvۺ�x�+�J��}�m����;����h'OS%�EjN�@��Pl��X����"��p��C��G9��AX��˼�`yA
�f4𼂖m{�s�.R8��#G���GOo`I���Ȣ]�A�����7G߳+�g�Z\\��Ƥ���3u��&�4�3��ct徒�Z��L�V��9<D'=(\��8��F�~�pW�~���8���ee�'P λ��R������m�!/�����&��N�:���$�&GV?�"0�e�y\‘q�:2���[�&�2�/�$����:�V��C������G��c�Bh�"6P��9��9�{�o�x��z���{��J=!�7+�)b� �2�}cB�!c�Hr��ʪ�W�^�ŦI��{D��#�k�<C5�q��^/˕�ْ��ڣ*���Z�M&#ˮeҘ��AsgqМ��l������W���r9��	��qq.G���
-�Mzo�ӏ�y_~��d�8��(A�U�S;��n���A�бâ-"�U�A;m?6v�]�Ԥq.'��܍���?'uw5���ȨO����z;	���էwB-ܾ�&��:m��b�M��:��#����Ж3���PԠ����'n�U��[�گ�!B�
Uu�d�"�+Ӣ��,&�W���k�����i��<�Ⱥ��^ܣ�\��������Tc"X=ʭ�.sتh�ls�iX�6���������j��W�]�A	�U�[�����D	�x�`ڽ.B��i��=�;.oš�T�^�l�1f��b-�x���4U�������ӕ��'�͆W
+y��®����F/�+����k�Q�9u�Vӻ�0��Μ��S���8�lq��<�ư�����ޞ�x^��,��7�)
+�R���Y#���#]�;�'�8�
�Hw8��ݽr^;q�Q^�l�`����,��䈈{��M�<�*����SРZU����sZ| OOwБ�N
�O`?�Т�v��%饏�h��a;{>9�IB�s�ǂu3�(~��յ�#�\K�;�v�Q�]�a���a0��Ò'�8=��{N����E�óV������va�`�+"��^S��v�:�~��A�W?���L�\>�u��]�ڽ<�\(��4��w�jH!���ai��a�ie�0�d5�[��F�ȇ>1���c���h^4�Ч�X:�����v,�[�6Y�S}[1�^{&�]���A�E��WYW��Xl����5�v�ޫڨ���r�"�n5��a�x��Q���٢%>A��C�e�n���b0�T����oc��;��ǔ4Oe9����ߐ��䍕Tih�6���}��֩���y�,��|f}r5Ԯ�e9g1su���[�t0�}���c�r�]�Tn��o��O���'5b�c��bI��\���(��-��_�zՆ������r"]m�j�ǐ/Œ[ƺ��+鑜y�5?��;�n��l �N�
+K������D�0���-�Aq��
+y��͠)ٲ���ئK��GE7sy켲N��lpi>���~�����\�*���$���y_�z�����3󛸘O�&��X��c?\=�`J�;;�$.Y��2Tğ��l3XMW��%��mؗA�S���q�
+cF��Mnڸķ���\x���г����x�p�'3�]V�r<9w,9@��H"�>�9�]h���b��]��w<��A��/�wN�(eܾ�j�ݵ�>;�z9���wWx
+�T�L��+�Q��Z>Пb�����Oiw̢�<����kT�D*��8�H���6��ޚ���g�,ڮUUS����z.!�1�yذh�Qo��V����X�fR`��-�V����1��-���\��.q@�k��=�!�^\��X��v����"=U�}�ڏ�;��-�?	H��e����	D����%��Q��lk�{�ˑ��{�\7xr�'͈G?v��?
+N��w�j��|�,jlC���wCL�ĊJC��jb-���#���������W�ʰl���,�d��)9���U_����5�����1�+��R���wR&��������Ǽ%�ș$Gw
���[p'@l$5��?F�ӹ��#C6RN�[	�7�c�W:� �Q�
+�1�d&��qpu5~������OK��r?�l�\�%�T\ՋRC������Q�����tE���[�6E��t����u܂���yDɝ�GЧ�y^�K��~�g��\C�p����~�=�Q���~��mk.����v�`��p�X�>�{��Q������佶�����?�!�ڴ�'�e���$d��i�)O]4"Ϩ��{6i�5����'�x����cT�dcJ�c����W�6eZXCMޞ۽��]�8s=���2-��ϭ���� {�]^C��R��I_�s�!��V6�#�azsi;uTk k@���Lޙ�����s.�4����G*��m�v�S,�؈�LlSQ����I�eO���o���T��j���h����b,^�� fI�]��h7%��w/ݰ[��o8��O!d�����
GB��rC�8���c�����6�h�4_��%�4�����eƧ�o^o�a/��f_L�ʫ�&��1ȏ�Oڪ��dfL\y)�:c�oqL��;��^R�M۲&�{�Xd��GC�8��D���U9)2_!8L�I��a��C�z���!4�nz:�c�x'��oŝ¿�r�<�:i���+�.`$�`?�)��Զ�؜|+�T<_
+�00x`�̦�7.-�r�zSm��č�>Y�tS�tw"��V?�H���-�Ȓ`�w�_&?�Y��S��̨���;ڇ-8�S�P)39�IH&M��5���l�^y_Ӊ��[���(�I��:g�8�����������@�pd:��zH����0;��(�r%��܈M
+�な�iˣ�-4
+E��yp�;O����ߤ��l13j�
|�8�}��I�~h�g�ڮRUz]�R���\$ʈ6Qj*9�GPK�@L�}B���������s�&/�.���TlN���39)�/��S��z�/nM�y�
�$@�^]�IX�6���:5፵W�ލ�m�X���;�!���!S��}��B�/�<Ͼù`m)��x��S�����UR�����%�D.z2/��YFm���lO�pDyL��n~��-|Fcɷ&��PW�}�/��%M+c��&��љWt/�n�kЙ�Je�>�}�l�	D�4��M/jֶ~씡�b��bl���sep	/,uz��JkG���d�4�����hWT���~�@a�O���K�㳞I�+��'R��Z�� ��ᇄ�+���֡�sj�HhQ�߀����r����Ɛ�
+��X�Ͻ�ᜲ�����š�)	��L�
+2�KǛ�9�g]���}٠�p��K�\����˩1��jaٝ=�`7��$I�p�xw��� o�(���i���3R�~$�U�՜�*�myI�d�vǐ��EyӻH@ʦ��+o8�n���ɠwa|y�i�//����v��I�G�n3�a�B!ޒ�"�G�ÆZ��W�ޅ�ٯ%2��9�6��S�x��y�հr*b4s��aQ*�L�Iu�*x(A����[�I7vc3��:w���U��N��@i@Za`"����ぱ�&�O<0�𚎂>����WW��+ri?�䰂N
v�S"��s�i��Շߌ���>�N�d?�<ˍ����*���j��(>�r�}�@���\����|i�8�6`��>�reX5�0$rr�5�SJ�e��q�+�u��6%ώ�������r��WZ����������	���%]�1�0U8*
�X��ٟ����#���i��Tq��#� 8'Y\�D
 �{���Kko<�
!���s�7	ӈ�*>)��PF���\�SQ�8V�	���"p�煮�x��zX����{���m���&ˤ���3�������=@�9�z�#"d}���H��5�Bqx��Z�\"�<͙����O^��T��-�*��)&�����H��������BF��>��,,���4��$m�x_�r�QFRW3��N�������4�_�N�.�r�Z�>����I�p�/��wC�:O�V��H�S�#�O�=���4k�+���ӻ�p�H+��wd��v;�~)U�W�<|K������$)܄���)�h*��cwW�ߧ�)�F�ڵd]��u)�Zg�*��o���D��@�n�`����-)���=��Pz����}%����A@I�*Nn��:\��{����'�ܼ]�����Tޚ6u�ofOv��Aג!o�$�i���,晵J3�3[��Qg1{zޑ��Wi�[��H���y=6�8?g\�ށm�
O2�7BO�f�p�+
+������!��� u���@�n�&ǃ��.wRq/�I�ޚ�;��_�,lV>���yMb��^O[$�^'lw��M�h#�{�z7&��9�l�ֲ��,v��W�ޫ�%4U���9Pa� ���/s�˭n�E0UJma���R�yC~M����h�� U�ULcg$�z�ނ�+ב�����d1��&�g��ُ=nG�E*�M�5�y���I�7�E�z�bA�i۷)��K��-�Z�qV��sP1��eQ�ی����y��N��r��2`�š���EgֺU��o���}�q~���l�m�-p��h��슄���w��Z�����U�?L&V�hm�IhlZ����+1
+NjhΠ+
+I�sd�<V%z�H ������`�d=Mf�_�CVc��08Z���[�ծ%�M�d�ۤj�tpE��/����<�>&3��i��V�*#��cǍ��%lp?dЇ��k.�^7w�%�knng�����Ԉ>�Ɂ����/Ո�
TOU�=�h�������O'_c�O�I�7��9�����ҩR���у��0�l��DE���G��&���l0����S;��-����+a@���Զ�Z�&�rCwA����D}I���$Z��.��
P~z-�?hffd�1�<���V�H!�$P���˶��&N~�x�k����v���:�/g�Z(���6�
+we�i~~�e�	�WMFgv���$u�;�r�8�*y�F��Q����컔�!����e��в��3)71ǒ���{:��sr2�ԼW�d'3Ro�R�5�vF�6�z|x$�
+9��N��,�β�I�X+v�uӋB�)�����F��W�V����e�Gg���g�L��F^�:8�*��;�O"��㺔�,n�bUk�<"�k�N_u���˝�G�����_'Xk�k�A�r�>�j���tN���}�}��ʪ��\3Y�Q��@jM��7��!{/TyV:z���g���Ϻt>Y<�?����
u�c�^޼��ߟ�3������^�R�g�퀈�������k��?N�79�!'A2�.(�Y� a�3O�%I��Lf뺄�+N��~�[�ӑ��G���<��&���X��ek(Q�gСCɶ��K0]��k;��0M�|�Pi9�f<�l��fH�N6�Z�
+wD%�bb+݀�b[�zx���2�#J�tY3&s���KYi�T=�m�ռ��|l��n�ۖcGZ�|[��J7��^*�K�:e�v=j��)(u�2�
+ՐRX���������g:��g[���G$�A���_�\De)��h�'�辊�'����B�+Ei�0��'H�q6��J���c��N4�E����@��Iw���`�m$�t�Akj��&u���h���]E0�v���@|S�
+endstream
+endobj
+1552 0 obj
+<<
+/Type /FontDescriptor
+/FontName /QMHUCV+CMMI9
+/Flags 4
+/FontBBox [-29 -250 1075 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 74
+/XHeight 431
+/CharSet (/less)
+/FontFile 1551 0 R
+>>
+endobj
+1553 0 obj
+<<
+/Length1 1386
+/Length2 6039
+/Length3 0
+/Length 6990      
+/Filter /FlateDecode
+>>
+stream
+xڍxTSۺ5Ҥ#H7 �& �w��AjHB�$t�^�7�J�]���(]zQA^�x�������}�kk͹��d30T��`�($F$���[��� PT!��4�c���$�f04��������T�,P���D�@����4HB���RQ��U�
+��C!ahN���������%���III�(��<�0��8�ܰ!`���0��H�#���K{{{���B('y^�7�0��a^0(����=���hB$��g8�/�1��
���C��!�H(���0���Ð�u���l�$�W�?ѿ���������#���p���#�����H�/ �Fa��^`8��nPW2����
�c�Bh8�׌¿�`�Y
	UA����4ɯ�T�0v�}���+���{�GB��t6E�x´T�`�&�ۜ`�PJ\\�=��| �¿
+����~;��3������1`�pG���
��0��@��t�sE�p��s�#I��k�9��ƞ��`���������0(
+���7����iݷ4��3���(����@PJ��@��		1@�?������X-�#
+ �W��}��e�?��#^�?s顰̅x�Mtk�������;����_Y�W��wG��o?�_���v�#|� ����`U���j��Ps�_�ՅA�n���€�jPB:a-�+����V����p��/��e7��7	3@���0�( �|X�A\�w4���]0���YW
	AA�MDL������`��������|~� ,�Da�!�쌁�G�ɯ���ؙ�hW�98�r����������L�V�{�[�0�B2?��Ȅ���8�Ub��<J����d�-��z���Y�0[cꁲ=��~��\y��l����1�W�!����U�}�¡oG��`�P�Ӹ��U��dC
+{+|+�T�ً����_�]v���Km��%��lL�x���m�G�l˘aKk�j�LO-��K�G��3�8�o��V	Y�?���,zX��[#^I�p��[�H� mr�f4��ةJyz;C�[$�"����颁��AQ�F'=����4y֣�f��{���rL�	�ѷ��8�>�P欁�g�Ո"
+z��X�]�t�Q�eg�:�Mq��Dm�LП��g'�Dl������*� X�G�.d�4��4Zxzl.˞#w�N���+-n�"�7Z^w�D��8���N�$Ytfo�m%7k����2�S��i�Cu��&�'N���wi��W���`O4�(4�zg�����Gl)�<MIN������B���'r�-r�����'����$R֭�0��v�6��c_X��V��뾳}��=��$x�v�ņ��TȾ��b��O� ;������?N֏�
+,���#bҺ��Vힾa�?����rb���;}�G���)�>�ð�� {x1��)Q�M���m����X�㸅ȣ�c��7R�ՙ�ݵwۍF�=��U��sR��պ�\R����fA�d'��d���P�Y���c�BA{��hۊ�QK,U�w
���^�4mu���� gxš�?�D?|��������p{����j�n+A��ݥң��"�ę7Ej�:�"�v"�7�[�Q���$�[>S7����;<�Qd����n�e����f�&N���J[�D�V���ҡ�5r=gU�w8(��B�����J�����3{9Π����su�wo��!�!|���_�m�����T�E�Q����kW�M%�i݈{1���:���O;̴�LV����AOE�;�7�4�7L�������E?��!�һ�$}��MaR4͕�z�Wd���'~���
�3C�?~�Ֆ����S�v[&-�Nn䃼@��jie�5{左��[�F�׽�T���s
U�Iȧ���Fr):]����JZ����Y���4%P�!M?Wșh�Ϗ$�ء��aS�zG���Q4c��Q˚��]��W��V��?�X[t8���4�"S�e
��=y�<#0����lZ��p\������7.�E���{:pU�"U�^����hz���zIǶH���aITX�>oxYPb��'yq���)F~Oi��7��&l�T�?ˮ�ge�(��l�~90��q�V9�]\��|>�\��*�Z�d�x����v��]W}�[�?+gM)e
Pj�o}q�}��G.A���j��`��{���ƴ5�=��G3W��C*IDz�Z3��+<��p�ʊ-o6���`0��r�����e��Nc�B�č�O[�%��,qe9��E^��Y&�D�Y�u���g�46���A��ѓC���������.�!�1w���Ն�O3�dz�8{Μ�o������w�z��B�>W�-��
�u�˳m�7fHqw0���LgJ��+�h��R��7�RI��[<�]6C�3�WILg��g�d���glt�yͱJ���R%�5j����0��[��0�r'����m�>�8�i�(�s��>{�m�e��Ǐlp|in���|�;ԙ�vgn��]����I������0S?�� !0j��)n��-R������}E:��/���!#G�㨛�U�9:��o۴?5��f�>���b��?�^\�s���N�Mܥ��b=!�ڌ����8w�n�c\6���΂��'�2,���Uϼ������r`}Ʀk��^�%�]���q[�9NJ ����[x;N��&"�-5�z��.���6���B�<�������{�������5B޾��K��~'\}�B������ЄeG��4lz�}]g�$-�!�JX�o�*T���2.�?`��g��l�`)V��
+!���d~�oѣ�nW��?w�ݑH]@	O7}oz]�������y�)�����1��X�
+R|[���7�2�7��r�4�UE]�z�a�Ei-��U'�U7�yYh�c��-b�0��kx��'�8�t�x�.Dѳ�k�x%������{�@���!
��f
+�nj���uɁ���by蕋�Iv|Ho�������J�8�3$%�ͽl˾&�w���I��b�p�a[rf��R��c�����G�(��]�S��6!b��s~P���^���Ξ�}<ѐ�&A$�㰓[v²s��&�>'�+���S��u����o�R!��O��ωm"��)�
g��K�[A�!��ţըC��~moC����| [�P���輱��:R���ǯ�.���n"�cd6�7w��K����6Ù���_��'��Sp�|�,��F��|a.2)��)9����\++�ĺ|�,"bB�nUh<gY�� �9q\nn���>M�E��3ƢQ��/�������~��;�X�T悔
Mqw�Q�,;�[����П��!%�7�QM�9J���0�XH�t��vdK�.�8����J�p�S\d�Y�iہQļJ)N���|[!�=��͚�����QbY�%F~=�Q?cґF՛��^gl�����᦭*��Ҫd_-���E�����i�����;���·'Mc���]L�]�ec�gz��z	6��R��	�k�S�HX��ܕ�j^��T��Q��J�̐��e�4>�c��V/cbje`�r��bq�ؙ�a�Ό���O`k�n�_�E�k�V2B�������DKWi7��Y͎r�K���%�ȑ<�Q�Tn��{_���=+V��4�]7O9kc-gG���z��������K/'�6ƲF=K��
+zn�H����H`ָ�@�x��:��g�V�_y�"�h���;��L�㪀)�xk\(��u�ƛ��[ƻ�G�� �u�ɡr�կ�n]��7�Y!D ��M�c$�ƣ8?�(ۏ�ҩثǥ��8��Sy��n鰃a�1��������y��[�[3��e}�s�<��i�[�e��B%{����h���W%-�(�[��AM�E_�,3摍���Y�3\e|�	,���E�����٥��g�ϺX'wk����+�� ���M��}��vвY��!R�lv]���'k�%z9
{��3��q��F_��4P#�D-���)̫���G\�t@����?��`�#�>/ɷ�khԵ�W��{��|���C����zn�,���)�v��_-�v����w�<�r����3#&��ϕ�Օ���v
-�>ı��{
e�
+�y�����Ѽ����5OR
�d��;,��
+�]k<z�l���K}R���UJ7r���-�U��v�?����Lw>A���\��8]�v��n>���&א�Y��8�Ca"�r7���q��֚��啢s�;<�5���L��l����@.��O��r%Ռǣ=��=+�䂓�6s��S��/�n2~
+}���U��RڈV0f�o�0��p��j2�2fm�˨@�.g^�p�d��t�,P�b�쎆D�Y0��g+*�m��ռ�?s�ngS����~�)n����F�XN�`����f�Le鳨N��}t�����2��m��� ��`^uy���u�'�����c����S�]0	`%O�)�Ĕ�� ��J(����RK0)a��䫌����	"M��O�-5Y@��+횃�-�a�F�����$O8���fh���1*��N>n�i�ȩ.��38�Ep:Z��=g�\�P���_k�n+:X�h߄�oqʑx�Xv:#-�"��]�SY
4{���r�#�}�1E(�B�uY0Պ���c��yOB4/�r���ky��8H��������»��r�C�o��27��n'EPf^�X���|;�8�Ԃ&Q�`YKF����Y4@�F3�n���f�yX�ܤE���)b
/c�=�u1�r5�|�!*x]m�:1�LJu������k��gsC�:!��a��\�����݅��xV�fO^��z����3z�:G�/NT�+t�kNQg7�ʯ���6�2�OWN�m��7w�|P�l��U�����(�(?�=$F�_d�2R^�_EU�\U��E"����|�|�w��p_*�IA��؅��ӊ)A���Ĩ�q\���ݱD�?jT��I�?�"+�!������rS�� ;/B��،���1��ПKf�v#�{�P�Old�uk"�'�r��O����P5��K����ֺAy�Y�9Xb��iD�*�������NQ����z��)h�rM���3��Sv���{C��OE�W=U#sSc����/�$��.gK����!�Aj��
+�Cb%�\�c�V�	��1�����B&m.���T2@�"��fU��R_B>����kqQy'�E
w؋�,%t��=���/�齗�AA]ޣߑ�RFɓf�ab<Ș�p[�Ci���$�������q���6�qn�y�Q7(���%�C�Y�FXf����r�9��b�R�3ȓPW@я��PH�V��rJU�͋�7��p,�lk��_�*���O��h}�'���yIk�|��N�����-��L��K����R���}şu�a��
+s����j��R�8���Ė8�w_n�oU�m��N��f��S�`�{*j��s���,�W|Ʃ����I�)i��"���flvX��=�5S��]��j}1��w�,oPN��5�b��*��
+]*"Kz�K�M�%)���։u.�M�����C�I��.�L��D��b�#P�3p��A��k�˪kS��E�]�u.��z_|�>�M`q��X��>u"9��=z��ڳa����z�����
+��s}�%��p�^��5`,���h������oN~J��xd���~;B�	�j�wgTF�CVc���l�S���d��,�i��R�оT����s�IX�a��-�s���*:�EG�-t>��ğ�JX"�[s�s�=d_SK��h��ǧ�'���y~{���j2K`�
+Íe�xl���TI�������&�y������ʞZ�ԁ��~��������᪸��nUmV}B�WQ�9<N��6�%fY#=V[A��@��6Ym)�D���W�s��j��D�y���}�lҲ�}8��ÝӜkV9~��)3�0P�{���P#�{��E�$�������k�ߓk�}��_��.'���B��� �?c_�W�A����ض]�<��^:� ��}��ږ5N�(��̠3nϯ��l��E��o�v<��y�F�;�%�߬��Z�?�]�Ҩ�������6��h�~�coe��䕎K�����w���S?�ֺL-�k�w�_�lŸ{���6+(���^>M�D��`�Ͼ�q����n�
�/ο�`�i�$�T�������עK�r3ݬk-=����m���x��A]��
+Hb`�#�b��\^y�)D��g�w�06|�b��Nm�P`f&2E%�{E�{S0�d���3�)F�y���!P��ש�݆�mO��/O&������h���@�*-�.�>�͍�$�l�mKP�Y�g5�����PCk-�Ǧ�*\���Z&������_���&���F��LX�?�o�-X���=�8�~������8�.����+���"�=`�Yδ�ߜ7W@�Ce�+�37q�㼮T���w��;?F�z��0|
����/�|;�����������ܘ�:��o�)�Ds�	=�K-�a�鴨\�gW�E�<����o4�'�Au�@
+��Uw[���%R��*�:��fa����ܱ@4��H�֥�U���#�O���v5*����?$�h�t�*����c����Ҧ�
��[�O[��M�;/:׈�/�؊
+�ˍ�+a��F��ʍ�m8��5w8��dS�iMfT��]!�I����X6����J���x#��D��WG�joL6Sssf#S"��
+���	R�{:D�qY�d��_���(��0W�T��6��T�v�A����a��#�I5�D��1H��_mʎ�A�Ƈటk߁w鄍X�D�g]�?�K��
+endstream
+endobj
+1554 0 obj
+<<
+/Type /FontDescriptor
+/FontName /UEIZYW+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/asteriskmath)
+/FontFile 1553 0 R
+>>
+endobj
+1555 0 obj
+<<
+/Length1 1376
+/Length2 5989
+/Length3 0
+/Length 6936      
+/Filter /FlateDecode
+>>
+stream
+xڍUX�}�FJ� 
��F7�HK�0@�6ƈ
���) � J(����KIw#!�(HHJ�g�����ι�s�]���=��������
M�T`h;�4
+'$
+���X��ED�A""b�nnS$����6�c�H4J��0poS���8}4
+����JɉJˉ���DDd�Dc��$��Qp,�[
��A"p�2�z�A�����҂�*.p
+A�!8��"�4AC�p��?R�)8�p�r�ž�� ��� ���H����c<�0�ρ�w!.�ߓ���@S$���m��`�@��	����w��M����p�o��o� ����EA��N�'�g"$�W0
+E��BP�Hh�t�
��p^8A �	�8c��x����~u�Q1B��� ]qX��sD�i𷬁���]\�(�?u$�_�����:�О(�?{$
+f�s����
+���V�����pPRDVJJBw½��?ӛz��9E������]���!��H{8����x��8�;����;�y��aH(hG Q�����p��g��1H/ X�=Q���Ͽ�l��Q����WX��BEO�����SUE{}��E�B���@QQI���,���i!�?m�����Gew���u���|���g��h<k�@��In-")������+�c��,�����;��ο�|����
qA:{��I��@���?��ߢՇÐ�.����A�BPA!�d���H��#�w�^p�!u�M��v��RsF���h,��%"�>���N����_.8^>������a?u&&)�`0o��Nb�}���	�{�b2P�B��!@���@{4�s��b@a|��n����#=�������u��i8�LO���a����*TX<���~���h�%��|��w9Ss�M���z_���ˈ�	?�ͣA/���T��8���m�ܞ���&͌�N�^��zdt������b�,\�U|�l��	�l%�t�8�bOe�=T�iZ#��d���뵴�������M�͆�	c��
qL����������Ύ4�<ݶr��Z&:����.&�G�:�XU���)�L�]"x� m�`ٺw�8S��[�����a'Vf7M������;^�\q
+�m؈ʅ&��n��Ր~U4I���H��7��K؛�>R�R�$��e���_�U��hܨ��E)q˽�)�����v��U�OJYA�d|nQ�G��R�2�V2��X��Dz�[~�
+twϫ�u�y������>�3n�
nD���%���G|m��`)���_�id�*����Yݱ�Y4����%�s����ׁ�B��qu��Y��k�Ü&�6������<�aU͟�"y��p�C����|�P��7�ᶩ�a�w0>�k[n��Cg(�&�n�=�����P���� &�j�6����;ѪBS�ɧJ�}�����ƒ�N��ϗ�<�V�nI6����%�1$!�b�
+2�„�b���i=�U���s���p��*�k�&�׬�� �p,�3G?}�@�@��F�쾍z���1v�!��Ȧ�?� � rM�I��[w�Y�Ξ&�����N�S\�V��8Bns\��޵3�ljY��ٹF	h��r\���L������j4�0c��AQ��ҙCzrEB�;$t����;Ty�_$��V�dJF�F9R1H�}Nf�>������l�J5��G1
�M+��}fm���?����:�Y�[�U�-X^ˬt��C-��*"1z+K̫�iI(�'��}0N>�F��L檥��Z�od�.Ά8�ar��
o�Ie���l�,�^�ݜ-P�U`��s�Q[����4����Hy��e<s�/��$Jz��
��
��
�:�K�4��jN��7��L/�v�L����������hB�t>PW*x.G�f8�a��
+׮_o����b�r�܏}���?&ȥ)�~�^���j9L��T�l�]�@1�v	�6Sv藄�����t�	�
+��0W�>�p�u���t�����+D
+x3بN��:�)�w��ȍ˪i��-�G6SXT]�������LQ�–D���ȹ0ސ�D��RC}��)4֖.�-���{�g�k%aܹI��3�v?
+�k^����5���6g�Á�zL�W���9w�j�)��|��E�������+5w�\O��TՁ4��S�G3��#����%�?t��+X�$ 6J�4�Z�p^Ѯ�"�l�@ٸR7�;�������Eh[t�_��J#�}g�H.0�׭\�G���GR7��io;n|����haA ��Wr�k���n����k�~�|cr�0�t�3�~���Qd1���QP�o������(��)���b���,Z��}]�vԟ���y���9�2:nj�y��-���R�{J���$@ڼo|�#U5��,d��X_]Lj��t��ٻ��V.'|�=2��C}(O�¹����KP�a�`�����v���*T��]�e�s�x���8�f|�V^���e�'���N���(�А�]����<
פ8�L>Z=P�,;8yq85Ri��)
W�T�LYΎ:����YpW�U$���2�-�آ9��8�gRR�o=[�
G9\�3Rg�X�"
+��w�a�\��I󣭡|W-�I<���5�;��͒;��pF4��'�A3j�M����+�G,�k|�������̵�py*]߬�fPa�s��,��.5h%�Q^�*�&j�]���βyc���|�;�M/�^�J�(�
+�A�$��7�CtNg�`E�|�y'�����{`Du�Qֺ��m���Y���npϤp�%H�V�*h���9�q�軜���O�Ÿ��ɵ�s?]|U���O�֙z��#��B�\�&��B���߫l�BXR���E=o�9���2�i3��=�U����d�|P�I�NYڣK�n��9��[��&$��������t�m��O��7<���d/��qE�F�@�j~���%G�F�!���+���iߋ�D;�TA42^��M^��
+�>�J'GxO2�N&f@��7�<��wA��u���c1�>�z|=b�#�i�}�T��4D�w�´�{o�&��5|c2&�"p�5�K�fAJ�{b\Ȟ���'�I�
+̓>Qm7�%2g�"3-m]rm�|�J���46���7o�h�+coFt�?�#`
kRj�s|IeV�'��d��+S3Y�)>d�j'�!�����f�Q&���&)�b旓���b{��A���y�-���zageU��,9���›4�Q��n�E�:���5��=�}z���N,؂�!@߫��~���=0����&�ݝ��&�>OѪ�r���_�Mj~@�� N8�/z�#��$B��~�FU�鑔!������>gY�sF��E�����]M�6T�i�7���~�Z\s��0'>[������-��=L��r�D��u*Dc� �&�D҇���`�'_����f��g/LO
+n�/�lDz�'9ϳ�c�'%*|��m$Оϟ��a��|�+�8i]�[H*�A<��W~f(B�Tlz�<��H�xN(܏^��x-�>+�w<:@X9��{���ă���c��H���|�j�Cfᖋ{�}�Ʌ�������x
+�b���>�g}oô��2�����DU]�3��X5�h�r��IC��m��[���"��Fj5�(��H�OE>�h¡Z���/�#�#
+7)�m���x�}��R
+]���^ߴ(�U��~V����ƙ6<?�����|�k�h��tٖ�t��-O�'/fʹx�+�j�w~
+
+.�hz[��v�zy�,GZ�4J�3���+?�C�E	1�I�='Y���o �k�%o�,gK�Z�FIyo�`�,1O�
+�j��.L�f1��	7tR�T�x�K�z(����O�4��U���ҋz��i��X@u�>מ���0�P���8���5��)���F,*��5���0�])l�g�ߐ���o�]�۲F�稯�7�Ǐ�_b�4��Q��`��:�Fc���%�ԩG�u
dNʸ7���:�V>t4	f��W���{�¦��b�Rc˦-�u�����D���vPO䮩R�C��X���-�5t�W���3
+&�Ȍ�(=G��qxt��n.~�Ѻ\�_f�s9�i�@]����aV�Cu��UJo���yp��/�3��?i�Z3[����!kC��jSNC��'�C2��*�u��$��T�2��
+���Z��w��=���g��e�ҋ�-���I}��!-�}FN�ɹ���{��ws<:����Mf�
+��`��3�����X��`*^ޟg���G1������U!�C���@���i�ׄw���_{��?dEr��@�#�=�~H��[�����:}3׎>f�JЇ�p�|���b�r��M߱ʒ�=ϡ-K�܊��ꤐ���DqN�z�04���E��6��1D��!�)���'��=B��[���ei:�t@�e
v���[S?$,�?�
+IX�*]��O�[�8t$�|�\�����p��]㓝J�γ��)�O��zpMNE3���0���hct�2%w~>|T�Yh���ht�V4X]������*7��R�^2��k8�r������de$��j��{�0� э�-����v�����Y�d��<p�TD�q�'"�>��b�9��IL���5�B�6ԬWn�Z�]�J 4&��"u�s�
+s��.q�]���*��IX@9}5��޿���7�:1 ���9�I�Ȉ�2�"n��A���m`�q����/�f@IE�)6]ۦ�'!~Eo���D�j��܌�@�u%���Dc�����7ty�d�N���TR�#��Ym���v�<ӗq��!F���=*�]IU}��t�I�l��7�|U^�G�xWʱ�A��uَ�@��"d�91�-�k�d���K��2ʩ���ΎR��AS�d��;�Q�b4��튋�u��<��������@!�W�L���S�Z]Hv;�À[r%�a0�y��x㖎�b��0!V��Q<�]�$N-���8�eNPr��<�M��"��k�{���K��C��X�FYK����U��kX���w��M����q6�L�,�"x�H�wѼ�p5�lt���x��0��e��X��?M�N�9���AE�_�-���I�r��]�Q��U�ڠj�>�`Lg��,Ok���z�2^��j�%�/Hm��"U���J�xs���#��u�`����da���K�Q�,�qq�{�O�{̹/�P�O6�7']ܟ�PD��p�$E��I�u�a���/�j��j8�����/'�˯�z�b>�w�LpL���;"b��<�m<��B����F�8�+��٭?H_�q2U{��n���P�{�~X�U@#�VR��s��ϞL9����e�m��s�+�sS��6���
+:u�뵉�Wo���[��P\�YTI���!�B��F��_���f�$�I}tV���:��,;����N˔
+}�������.�0��_��>H���]��Q�1��Q�.�b�����0�9@�dVM+IN?r�ދ����Va���>�I#�F- :�?c1���GO�ZF����%ϊ����
+���V%ݳ*�C[w���8��e�A2��oMɲrGs?`s��'xѴ���Ln){�A�@�o�uMX���
�U�\����l������n#��~K7�����Iݸ����e���z�����]v�����՗J�.y��p�3���gG�^z��x(L�Y׉�=qw�����:)���=�K�D�N�J�
�,ҀK��*	��#����ۧ�K�ݙ~|=!��7I}�ωXΞa�iv�-���F%�>���lr
+CMo��-�μa깽/�r���~T��W��d2W!�^:�]%J�lU�����A2@l�����iS�(�v���ߊ�� ��$�$�+x��O��2hg��W�7m�vw�u��$oP���-��m�{��d������d1����A��[���Tvk
+I	2�*��k�@�VV�~w�)nbh1?�/k��:K���cM��,�ȼ�<i{�p���2tĵ�:
+�}[O�w��ޜ7=�\�RMm�|���fQ�~k蝗T�b7K=�?���dM���i/��ŕ��~Ŏr�sV�9m{�Rx�ff������o`�K��]��_�6���DE����k<8V%P撚�8{����w�y��r�ԥ7=`������F�y�u�!�q.�[W�:���>���y��#{Q~H?�+i����=��EcO��[
��,�*�k\����G�8ڦ�ka؋k9nG�P
+$�e���<Uy�I�t-ս�:?��Tt��B����:�����|�;A5C��
�����c�?��Va�t��H� o�-�u��+��� +դ������(��&H�<V��n<]t�諛� ���t�P#�׮m�%�.�k��@��Q����m)S����vci�Z!�^�~;:��u�Vv.5�-�P��ˏK��w_�؎�/S&|���+�w�hE�-|����~���+��Hq��<?l�oRv����&X%ɠ����/.�X��❈#ėb%���˻�1u�q�Cņlt�/��Ɓ�uz�dUE]3G�/]�=�J�	x�w�T:"L��?�K��җyh���jr5էSߴ�v1��ҏeÝO�H�>��m@�E|^�����\�0A��M�F#8�I[k&�%�9�CO�I��D�2K�t72=�{_�N1`
+�&l�����6��jLu��F"f+�n9zj�ywJ�ya0�ݛ�z��L���.b�1It��
�X��v���cڃnռ%�rJ�Y����2�ݕ���oR��o�}�uIM7����4�	8F�-Q�f�OY4�q�~���i����Y7r��ڠW�&l�}�'e��Z\�%�����P5X3A�$"y����[7����r<r#
+endstream
+endobj
+1556 0 obj
+<<
+/Type /FontDescriptor
+/FontName /HTWALK+CMSY8
+/Flags 4
+/FontBBox [-30 -955 1185 779]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 46
+/XHeight 431
+/CharSet (/arrowleft)
+/FontFile 1555 0 R
+>>
+endobj
+1557 0 obj
+<<
+/Length1 1378
+/Length2 6048
+/Length3 0
+/Length 6992      
+/Filter /FlateDecode
+>>
+stream
+xڍtTT����� R�5(*1t7R�Ғ�����03t"HK���!���H��(-ݝ�������[���Y뜳��yk���<����JP�L
���	���*:��R@HD����q�_3�����QH��P���8�M���tPH��($������ �Կ�(�4P��u�Z($�QA��0pG�̿~����@!))	���@%#�:`�#�_F�
Q8������8ZZP���C��@a�o�=�8G��q�A���]`&������?vC�=����Cb�nH(�jj��0�������������o��Dp��`0�rA��^p�����Դp�8> 	�#�(|<�G����ߝ��jJ@0~���a!8����F������P����~��
+�� �m��s��H����������4F�]�`��!x�?6(�a�@�'�Q�Wz#/4�S�?����㇀���a��v�q7����v�sB����G��o���Y��Z����~=������B"���}���Z&Fƺw�L�o��2���/,��
+	��%$$�~�L���m��XM�=
+(��[�6��c����+�����E�Y���� 1��������e����RsC ~�y��7�������
��
+/�CMaD����\�۫�ㅠ�t���_HT�$��Ǫ�=aP}8���2�ƿ���#a�(,��݂���ˇ��`������Ϻ����΄�ā`����$,&��
+���d������3��Q��c
+�����Xg�)8�r�Q����������Z�V5�	���|BAd�8�<i>�Rb���1pyj�5,Ƽ;Tws<��Q�4M}�U�Z�؟���8d�/˝��AO�7�'�42q��u�)o�g��q��CQ�C�asԛ�l�����M?�Kt�,V,䝷bJ�]�T�I,�(���U�sN�\��%U4
�"��H�x�0}���t�5g�������o��Evr�wV����2]������a��}�Հ�tSY�@�81�S�K��I"[��ӱ��M�="nu�*��z����j���~(�,F^�����[�	%I��];t
ƫ1j���*�}�Ҙ3��8�&��~�T�̨�|�Qz�;�����G2gk��G����3�3d��[5q-Ye㏺�5��%�^�%�I68}.��8���-�Q-zUy�!�w{%���G�6�D���e]�*!
+�gCV�S}�c�^c�����tS_����K�j�8��+Q�l����$�����c'�#��‹]���@CAU�N��T1�mlbC�x���D�Њ��P��qI�T�z�ޣ��-�S{n���g!�"�ȵ�5���-vŶ�F���ދ��ro��<�d�F}$�K�{3E$w��$�U;D���P��n�a�D��8��[��D�x��H�ʬ5�LN�,�-�t35�_�٣�Ρ�s{f�>뮧�[`�6kF"���K�xQ��6��T������`������&�k
+��<u+7+c�"�]��w�k���_�}j��p�}���
!�]��O��zɷ�
+�b�j4��,���.�9p(,_o�������誢���-��t��|:w'����c�/���T�%Vl���B��Î
+r��#�G���C�K��[�������*Kv&s]�'�^���S�G�v��]���D�(�
��_�z	
��G��&1as,�&���Y��?B��i=X`5ss-�#[3}U��+�FQ��x���כ�!���
+Z�AJ����
��:B�������#��l(��G+r+��V,�fL���5��5�8&����X$�|VeRx�¢�z��������+~�E���^:_�L�E��'�����7��A�m�0eD�k�wF2�~�-<��v��^<������
+ׄ�щ��9Sne`��x�-q�X
'
a=_\���[��$��2�+E������-Å?��c6WSnw�ϗݜ#4��Al�z0c�%3��r#ϴc�>��Q!�0��(m��WF�i��mJk��U�6�&J�Q�ʵ����Z$U�A���d��G�0�r�W��ϊ��˺Q-�v�����?�u�e�}�b=�Ltf�3�c_[� ��Fqo�p\�	����BujVD�~����+��< s���AC}��""O��4B24�$�N��:�%cfz�›!��a�_�(���:�]�Y�_�������x,�U��/�i�
[Ru�D'�����*��Ք��4m�Ã��o����1TQ��,;���g�b�^#�E;SӾk�dK��yv#�'��Us�
afּZ[�E�NM�x?8y�3��2g�n�Q
��η�V�s�f�+>)T!��~����;��u3� cree�'�
+Z�M�ݯ�*2M
���Ӕr���,����#�Vs�hoW��� �S��c�ބɠ���b5)��"�W�l�H4��^ow2xF��mr�����r&%@Y�M+�­�/^ߣ�~��Rb�uj�;s/-HF{a��ǹZ����)�v�J�q�t)7w ��r��p�r���!��e��N�m)�����;�
+`B{�C+�q���QR�uT�G,o��h9�[;�����n��#�줥�=�v��|�V�30��[� '��A��b��m��8��`:y���LR�=*6���:6X3ʁWJ�Z��b��~��Rө a���'XGʦ�j�D%��lPPm���?���)�Dh�
+�����}z���4�H1�ײ���\N_�z�Bo�xRe�G��
Z�.�r���MH���Y�"�<<	��Y�범׿O�I螭�j�Z_�r��O����k׺�Rvh�ϗH�,ڛS�ԨE�ɉ7�DN�1E����37�?�~���*E�:b�5���;�.�	���č�;�J�64`�B���,)A�#J���Iz^�gDy�|��C=��:|7��(�ċ7G�o1�<��_B��N�6D��|���#_(n��R��g�t���$+�x:�y�H-�-p{�����U�え��j����[B�b�\8�1��뽱j�m*�t���5���X{�3:wo�V*Kd��)���^�,q'su��8dSFj<\�gu��(��#�9<�aў�1�;��a����
���y���䎜pE&s/۳R'�D��0$<}�-)���%zMe�JeUC�%hۺ�������J��[��;��hѣ����EW�͌]�h�٧����>��_])�B�Ђ��h��Z|u��<�w�&����"N��y�u~�����%{*:n�c�P��fN�~b���U�T�� �I�'a�i�mC]ף@�OdY��1����٦�����#ç�Z���J�(x��\�d�7_�m�2�c��`b\���1
��=Sy�6����	�J��G�>%x��,�j�=���>6�2m����g~�Wǀ��B�9d���(�\��]U ���|w%noG�$u�s�n^�,���M/u�^g�`���gb�����"�A��~�t$q 'Ե����|��]����gOr�	p}��˥��&-}f��`u��2�,��o�Rk���|�L�bb|`9fh�D�܃�c>������L}ϡ�;[��U�Z�=��FA��R�w�>ͩ0- �~���{HǙbR���|���v�#�����º�2EF�5�c䍇��~�WG�Y���tiZ�����&���_W�ȩ���#]���$��jT%KWg,�Pc������j��A���|
��vGa����TK�t�5�KNi~�z��ea|�1�:g��;��2���ۗ7l{����s;Q�jz�<�z�g����?��K������s����;�geCI�^d�M�8v>�רI����H,,���I�Uȼ]ͬ��kA�	�Hr)0�CU/i��˜���ͦ ������g����Ӡ=���ȴG���L�-C�OɊOnd���>��P	�夓D^t�YL��ȘO�Cr졞���0Ʀky��l�Vw90N��`�P�)��B�lڲvӭ��Dk�V�sV@�2q�����-���q�w���T���Ǫ��qfϔ#�jO��d���o�Gbh��d.'8�����v��������/��?N����"��0���
+
+�ʠ�v�wQ����t!|���F�䍄7��KT�9
+�&�mO)u*"j*R�3�����ƨ���\���SN���ɞ��(A���3��fI�,<\"��S��D�*˗�fQ�P�������s8-��L��!k�u`��	��	Q=���i�#�p��I�+��R��#�
������-p6�nl���
+(�%�{E�U\R���2��q��P�,e�m7�`s�3r	�6dy��������^��yF�$����PKs�Q^��P�];RHKMo�Z�����/	ϼ����>}�W\���5b)�ʐ!F���!��<I�I-�\����<�H��4`�YZ���[�x4*�&[�s� ��C^�RW ����D�z�t��&�yj�O��"&l�?Ar���Hj`(sW���-*Ҋ���:n��}X��W�Y{������,�_���v��1��|��!-��4v�0��6uʮ��ES}�\aYM�
J���T�s�P���y��uABK�B��S{>�H� ��5n"��S�B�C#����qp���K��,Yf��g�	�'O�.p虃[�������YJ���x}�A��&��s��h�1�>bV�
+��91v��W4x?iE�]u[�;N��P�W�C�FZ]d��	��������H���&-��!����Wꏯ���EK���#�敞�(ů���0����>MZo��G�ɷrn��6P���.Yp{�|k�<�5�M��y�0�1��w��l�<qE)չ��u�T�oiH<߻y��>w���|*
+�U� [>:~)�IU��U\����'`}�xғ�W`-A!�Q�����T:�I�J#��˝�s;���K�G�!�-�x�D�P��Y��3���@�f]k��f�WFۢoow!�[뎡�d=�H��/��Ue�SZ)BqS�57�P�z�-�A���J&�m�F�ԗ�H4�����!�=} ����L�)#ut�r��g��2u;�r�;#����7ʂ��XU��y.З	����@�;t���k<H��)^�3,�-�?(M8|��9�'뚰O��Rћ%x�ÿ;�u�܇��ʗ\�r�B,#����Щ~�JFqs��Mzc\p7�X�P-QJ3m+�4q��hߠ��9�ƈ���ma��ט��ɞ0I���/:�xG>�7�w���,��w�Ӕ�����PN��Ϊ��Ck����.�@�H8��8I�����+�o��s+/	��|�~�'��ǨJq�t�����{%���J�F�K�v�ZBWZLBF�o��rX�-�%r����<�䅌7�Y)O
+�\��
+�z8�����WA�,
o_:�.VE^�T}�hs������ �t��}�6�������00�6���b��1�a
m*�~z��Қ����#�r�A��@'9��z�Q[u�1�5LxtwS%�u�W���
z�X�[ġ;�)���o�fMm>ebrUJ�&�A�B�M�E�~����
���B�k�)�A�q[
?�&0�N�: 
�v|�f���[��^�X�ء���5:�E�S���7��=?�0����O1M�v�Oo@f�4D�i�m�s�U�)WبL���.��9��1��t=I���o ������@�{?����#��^|�IPJ���0�>X�I\l�Q
+C���*���?^OS!��T�*_�ĸ����im����!�n6	P��\��f{��F��u���v�/P�Q�:���T�W����l�>*�8n�Zy���R�t����i&vWɼ t����7��Xz�$��l X('�6���f��WZ��y0\z����
�����r™�j9s���(��V�O���3b�Yndّ_��l��`�u
�j\n�5�_L1���.C�w?<q�
�hㄥE�9�?��EKX��H�-�1-�ݺ����nK�f��=9�����������ѵ��V�8�`yT����=4a�O�wz��3UC�mt�d�?�m}kϧ[��Iƽ��{Fum%n�S�z��̑���5H��qC�W�[�E�wθ��3hr��d#D$@�#�]��:�`��n_�����q�B��L�i�� g�s^�q"5e*E
+[�ӻS�.Ģ�𷃢��QQ���ώ��V]tò{�Ğ5�������ȕ���ֲ~�"	Z!��H��2k���|�bb���C@�����f��B8�zz�l*�==9�v|-�B�����/K�LBd����C�ir����o4Q@�p.Z��{^��K��~���#=Nщ$�Zed=�)
+U��AN�`m�%�D�wSo��YU�����ڻ?�VF�<
�1�2ޤ�O�7�P�5�)��<�x-
�T,�i</�P����D0�f1A<�s�l?D�`8<�~���\J�Xz�����U�vV�!B&x޵h���f�R��}�:�~���C�)��==�m������=
+�qa������є���;����6VI�d��%��M��i�O�2tv�Hk2����$��lT]-�8�b�����s�T6YuR�g���q`u%��N�˦O~޽MDǾ�◲�8@��yE-]3�1��'c6]OT<�r�4R9�	���]�TC������uw�yùK���70�Y���Ѳ�e`I�C\�r����u
+ֵ
?ޡ��M [R,03�3��3k��	��Ѧʑ�x��w�`yv�-y��U�����#��Zw]\������S���'v?+��ö���V�$�'Ұb���
�^b�R��^��>n��Q�>��!���
+endstream
+endobj
+1558 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GJVTUN+CMSY9
+/Flags 4
+/FontBBox [-29 -958 1146 777]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 43
+/XHeight 431
+/CharSet (/asteriskmath)
+/FontFile 1557 0 R
+>>
+endobj
+1559 0 obj
+<<
+/Length1 1894
+/Length2 113985
+/Length3 0
+/Length 113889    
+/Filter /FlateDecode
+>>
+stream
+x�t�s|����3�Ķ;�m۶m{�db;�ۜ8�ضm���sf������Vժ��z��~��$�J4�v�&�v��4����A;'#s9SS#%['A;kc�#=3���������@��P��D�������V��ل �h�3r02�8�9����f�"�ٺ~F������)��3�������>͜84�C����!���HDl���llLl�����	M�,l���*\����������K�ɜ>�����FZf
+�g��v���cS(:Y;�O�������u���5������V���^�_�6�����vV3�03w�����H�����H����@OK����+N��&����X;��mW�56q���5��s����4,���lnadek���y^�Z3�5�o
�M��:5EQ5i
���E�/Wy[ge���6(9;�Y��Y;�����v�ra��2Ύ�����1|:���N珗���;�����@��)�����n6���X����������
+0pt4�����$���S�;����]t��vΟ!�{go���#�_W+�N�/���
+��Cl�:�?���C�:��=�N�1����#�N�1�$��gv�?��]�}f��C��e��gv���gv�?��]�}fW�C�ٕ�3�N�}֢�>kQ�C������Z���g-�!��Z4��g����3�C�qF�!��3�3�~�0�~-��7��Oa�>��Z��#�e;�|���?ś��?ś{؛������f������)�������)��2|���3�g���
���O�v����_˟b��,nfo�hbkmb��!��cu�_}b���������e��ß+�/r1q��������/���7�����I���2|6�鏪����d�tw����S˧n'k'�l�Yޟb?G�����?��S����?>�p�s
}�t�k�9�9��a�����l��d��������O����&���_�������������fS��1mb�nb�4og�d��#͹={pLX��Q���y��p����;�1�D�2\\Ӑ?��"�������K���*�y��H���(�Y|>gE��"�������U"�%͙d[t��������}�������Ā���8�}"��5��Kq�8����!�C���a�|lE���~���������^�8��{dK惍�E<
�P����;����4���Ke{�y+ȭs�ɂ��vP�Y����[9U:𱲈����Ҍ0��
+��U�>Q~�\���v=׌}��~]4X�@x:�>I��k�AF��%EJdr��J�
���%���$;�@���tf5,�׺xw�M��gE��'�{δ�h,��ݢ�qiz�y��:
`J^�-�S��8��ʏ��@��JM�݇��Wy�r�t���64i��b�d^f����r!�"��7�Nw�W���F�&6��5B�o��>����3,6!SD�7��w���s���Y�Ԋ�V�>7���<���$.�QN�$�-A~�e���t���������߸r�.��T<��l^���{�4�:�8�]ײ-�[�8Dޒ�"�<y6��yF0�p+�ݓ�eW��hs,\�6��b�v$Ç�xk?�����+}�W����u�	���U����6��f�dd�����#���Pq��,�߮��o���@��(��T[Dw3ޘ�$�
+��e�`2��{6v�q�'Ƀ{���X�T��`������Y�)�.~��<��m	_*�i�t�x��fdз��E��=m��a�=ؗf8�a(�oD�צX�͙�H��
<�Sr^���ʗ>���y����b�
+��-DR�A�ڒ1�b�᠉Tغ�3���/��"��_A�����x��9�A��
+�Ylc����Ն�~6!:_yʕ�\�}PM:�����x�(2����F�^ 3�$]S�V���.]I��'��t�\��a��]}[c B��2��-.3p#�UN
+e��^�Յ��9���t�;-i'T �k6L�����͊%�*�-D��'
+�t,��Z�1���~V%�n:$p\���לi��F��f�[죒9�<�Q���j��� ��R�EEt.$u:���<���>$�L��Gm&�|d���s��^;��~}��<���r�f�0�6�ձ^�]��	+�����I�h(
rZ�E���7ŋ���:��d�Ƒ��x�;w���1��20yU���B]]�]U��=m�c#L�y#U�iH)fmn�1	���c�(A�gi>��oj���C�s��f-˵v�0������wUO]�ߞ�?"�\")�L�q�n�f�'('�#+�x�c5-@�}N3¡�b�o��.��m��[é�|��4��Y��H$ޅ_e�ysjF)��a�ML�l�m2�zw���Mf���H��|��*�g$�8$=[Z�o�B
��K�v�RY�u�#e��ZJ�1>r6�}�)�w����3��p3�!B�<��91��P�������q4�����6\|�����*d�wL�F�޷;�N��������^,q�����o}����a���jU�o ��hD� Mkh�FڈPs=2	�L8��tz�"h��eܘ�^�ٵ���G�O�+� ���~�gj-&yp���Sꎎ�q	v��nj�c���r���%T���\�V7
+���~��bm~�T?��6q��V�ż!�s�N9ǂ��o� =S�ʝ$O:��I�s���צэ8|�G��	�Hl�ྷ^��H3���G���M�����4(t&2��w!��#0�7�ߴ�0E�����jT��v�ʊR���"Z��˨i��N�}�F@FQ>��$���2���;/�>�~�����=�K�	�.�T�d�2����O�%;NP��	�7,Z(D�����!��a�h��ƍ�Mֻ�b�H̱���X�w�Z��L�^!�/ښ:郄�L����yi����2|��o6�+����о�h��tO8�7�ދ�iU�Ȃ�,O��4�>�I�[Թ�\3V�G@��\�w�Z�8]}X|k���$�Q��E�i��jF�!v.���W뱄��r:�����
+&bxP��WL�
+�~d�q�Q�v���)����������-H�
}0�]�qZ���&(ޭ=�WG
���z�T�&�z�*Hy��"�ƘW���X�jnX�r�8*�=1
+����F��s4h(��O�m��|�PqK��dA~w*��|�!�iudK�.t�D,��?7���fCmB�����J���y���{RCEx10�N����A!X���lj��'Q$j��I�@�������r�h��=f��xHK��ĭh�_�3����w�`�c�hµ�6�KMR��r�������J�"UAԐ[���i�!�Y����(�-
+)m;c�D�Ƴ��i���zK�oh�߈�to��sz�OW��"�.m�s��+h�M@n˟=e5�ɨO���{�2W�����TfM�#)��{~��.0ۋ`����:�--�)i�r��	�^~�'�'T����}��˽��p�>�_�>SN*�������M�|�̙a^#y1o<´z5-K���m��y���S5��ώ�N4O
+�<1g�Cr��7w�q����'l;�Ǿ4�MW��'9TO��,�q�j�:�k8�si���R��lA��;q�X��<\̧D��
ŷ�B�ނ��b��U�
M8C��`�1Q��i�.����<� ����T��\��k�y�̗߂R��)�)��t��0���Gw>�*���4g�Yx<*]>Y�L/��߸�#sKUf�\��r���@ɹh�,83_B�fw��{\���=��­�S�:]w����_.�g1f�T��-�� �'��^e<yE��}�*�l��6M����S�4��x�$c�0��X����������5rP
+�(��D���|?�nəfSm�*��x��6�Y	JmM��9�`��gJӉ�(���ش���ljl>rt�hNo^cͫ�1�?gՆ�
0����PV�*����2C��w"Ӫ�•$.o#�:�(I4�&�֜u��m|�p��?����y�,�F�ZW�Pr����;�]DA�'��w�|�&�8�f>�(�����=5���6Xzמ5>���cZwz5B[Q�A����'H��Q*t)�U�ˑ*T^���P��6�%�'�����E|1j���wkC�.��L�-Y2����i�v�*W�+�{�}��@�E]�o��75KЫ@���B�[(�M 1P(q�p�;����q�����2������jLyM�y�h�7uޣ@꣄�o]�SZ�!OP��3|��bE׫**���]�,MtIr>U�,IB3۰t�ERj���Z���[���I�9�вV,)�?U`�wo�'���W���Nvq���6��4O�/$���:	?g����_�%�e��-�9�FM���O��b�}�UK%�[�I��'me3=Ve��C+����'<���������l	n����?PNS�����J�f���Y\�4�2[��X�����5bM�E�p�$���_��vcK~�xfgr�#D�IK������B���EZS]*�MQ���d�e�f�B���p#��U���cEqaU�J,�C�B�k�5�v�=���x 7v�ǖ,�vT�a�m﯐K�7��
���N�_9�.����+����Ŕ�^�._a���A�P�ė�ވY�ܐ�9��3}1�Z���p/�4���zAvrR�����-�옻�g�[����-��Rr�p!4I�zyH����Y��L�Ԯ0i+׼ڥ��z^��e��>��s]S�+'c�
��&�Ǣ!HWl%����fM-(�j�~�ۺJ������(|��*����ȒwQN#�oI:R��YW��Q_af,.d�2�RB��<�����K��_Cd�w�K��[7A~#,�ktr_�b������X�I�O����5�f���%)90����p]3�|��w��m��)���_��Tj��=%ۮ���A�X_
+������b���DG�2X����*�Q_4~.DE5�x�U�I
t_�L�Lv2�z�J�Z\TrF@V-�d.�є��l3���>�_<��ۆ�D;����͢j[s������#��A�_�j���ye<�
+�t�wF�K��;	�r�@f�6Y���)b�É_@�,����e�[��3d��BĤ�Xx3p�{kFOMo�����(��M�2���c+6
+�"c����0���]�/Z2
�������S���T�MůW7k٧��`i�bM���d�`���/�⸹�+R�ޑ��{�O���8�n)[��J�A�o�mm�e5Q��/���i����ؿ[ڽ.y�VW�"O��(
+^2-��k��i����m.qI�� X���vQ��c�+q�;���h�~V��B�ׯ�@��[�����p�"1�1\/���s5
�����mq��A�#�lʋ%���ɖYU(��Cκ��}�i`y*s^E�6�cՋ~��\�I�#wI7�Ub��H
���M:���"�נ#���l�rⓚ����,¦�G4I�����A�����y��(���صR��V�|��U/Z��h0^��m��n�7F�~�y�;]��7Z}e���к�1��>�s�Q�����+,6�Pf�cKp!��H.y�����=�g�6�;w��e�}x<'x>\����N
+��A˒����������Y}0�~h<"|4
�a{�X=����Y���X\��@F��/�9����iZ�-�ޥ��tk�&PU��b(lS�|��7㮶h)�l�=b��v���k8*V��-����C8@�k��h�$%�h����V����5�m���٢��P8���b��$<�[�BSe��������j�)r��}���l�/�;��,qL �x	�Ъ�*�_qQ�k��F���[�!?�t11���7�^����5��rT��'���PT|��i����=_X��c�T�[�Ae��ol݆1�IN�*�8(q�!H*X���e��/�KDŽ{\��.���S[z��R�G���:*aֶ���k�'���%��/1�+����h'�9B��x�w������n~�E3h�d��y�<H��Wn|�b�f�ጄ�Sc���/��fg�U��j�F�>ٚ"��:�3VD}�Z$��<B-k0Ou'�j�5�
��*A��Q��|�˸�S�E'�z8������ګ0�>�R���w�.�V1� �߹��S�	���Μ�U�E��~N���5�@�FvQ�T���i���M�OU� �>�Of�c��'!?`��V]d��8���f���+�`F��H�
Ĺ#�4�m�a�\�1��*C�����H����O��k�T�z�tJ��@�dg83ɻ�S�ʿ�J�M#�ꕔ�'G�Z�ki�����Med�E<V�|\=�Ja�+�s�d�ӹ�/2ţö�/�;0�.�N#���0b���M��1kuc�Q��p��K�G+2�,j	a�
,�]��=r4�s*������J����&���Q��J�nst$A8G����N�NȖL@�8����ݣ�uc�s�e�,��A+VZM���!N1�V���CB|wR��?�7~��'y�3h>�`l��Q��oȄ�u�\+�����cUM��� �Z�O;�ɫ/J&h��n.1rit3�[NH}!'0L
wk��-�_d��d����LW�KX�^�l�����o:�9�HT��Ds��`��5���2&��
�r��#�]׋cI7��ߘ7���j�A7l
+��=�と,����%c@��Mj����BP�qQ$��ҹ�^RB�j�$s��6*�\�'=\ljSDk^|J9�NT��'�xP>"Y�6�F��}z���I`�s�ͬ/�*�3��v}:I�����%�.?}�����pڏ����.�t��_D+r?�,��~��/	��w�:E�@���*����*���#�؅U�͜������bg�\7"�%�<7*�:6Y����#g��釰3�z\�=��d����͠L��?�!p�,wSF��ݒx@��U���a5����Ƅ ���#_�"���6�R3��.�N+�d��
+,1b
�A��?��/�y��1�Kdm�C��ِ��
+Ն�{m7���A%��aq����#����v�����s:��ڐ��,���0,Ǝw�����2�t*
N�*ؐ��Y��t=b`\��.�"#1�6���Ruъ�hZ	�
���>�%�*b}����Z�������������JFY�9)�J��u���uw�E��e�h���q va��\��z�me�:����{�k������P�H
+o�r��
+�|t�ue6M�ຖT+��}SOU����CưDz���+ڪ��jl�ëi3jM�O㐳���,.4H��Q�=��ChPz��0n��/�:���}f(����T�/�F�������:�Ð�Cތ4M���郄�����Z��^��w5Cf`bb#�9���F��9��.#�]�$�_�yt��ŷL�'FcS�hv]+�Ͱ�^07�<���5��u�ѐy�k6i���W�Zt����0����#�R���M�p�<x��tӣ�9�`�K�Vh#4��1[P�
+&�j)3�ǁȳ6����WI�����d'�<�j;�~|b�G��`�nA
,?m�:�L�NP�����)v������a�����鐉����H�=p�K�~#��뽶C�Y\7��g|����:}��i�g����լݬ.x$���~��?�0
M��a|�`��P4��#�L���V|a��@\u,Q�ȆQ������|y�cd/DBP=&dH��ׂ0(�|[F�$$ƂCkʎ�:D�A��uu�k�M�����W�w9�������le���{�����d�'�?�0���y�7,b*�o��v]
+���p�UyI�/Z���o�(.����3�N��.I�O66���2��e�o�a��wb.=�F7�ks�j�GT��;�Yb�=l�͙:��HJ���1}��H&�p����D��P�"���o��kc+P�TN�x�*Ӱ"�
+�Œ�<�����'VH��$��G�c )C����(͡�QO0��c �m{��$5��1�w.e
s�")�"�����8�����bXDΆF�kW��!�;3�%���g?&6�u�Pň������M�2��ߜ햵��R��&��y��{r�:Oʑ�1��g0��z���Ϟ�ҥxOm6=a����5Y*"��.��ء�>�I��}~S��lb
T�
�Z�3��I��L���%y��O9��Ŵb!rTV
a�n�{n�j�ѨY<���E!��f!5��h%Ά=�K��Lj��4��{S������M�ؘ��f�sl�@��ov�lG�=qTD�'��$&t0�4�����i�q����`���`uOQ���������C:��$̳�Yd+�#)uB�Yw�;�C����	��~�;���U7�Sᒄb�ٗ�������؏��w�ය%@��O$<%��|� �7���+��F�$AT�q��r��L\^B+Z9t3�䪣2��j`D<l]~�k#{�j���_��(�+4�:�Q�����lӨG�.k���~\]zF���R/9���C8�8-�������L~��=p��emZ5ë��2�2����sx�wg�Mw9l����C��8r܇�Bw ��>�q#��@����b�E1,��G��W�Yv�$DWi��=Ԟ;R��"Z�o�����P�	v[n��������8(���ߐ�FKr�P��y�k�d�F���F:M;
+�p�[��^c6q������ыjU���C�ޒ��"U�O`ޫ��q�i�t~�cp�T��8���a��2{ ��X���� �9����!3�.1A�p���JY��:��[dV]�����l�}���۹w��9GY��__����8|�~v҅"��Nu۱n��;����:q��	Q�ؔ��O�<L�����t�b��w��Pd֝��:%<�����,��(=-�L��,L~��[��q���L�O��$�#�τ�o����~C�����w0n�uOO�\x�\7�O=���� P��� _k��eF����t]S�f��t=�@���az|V:�8y��l�����Q�G��x�]�ķ�Ky���L���2�d�=��B:�^�\|;�'\
+�E��� �xIw��I4�ly��/�`����	����F;B� T�2�P��r.ziKG*Y��dK
�oؚ�ح%g�Th�-�2v�;m�v|�{���&w�G�W��/��.8n�	�I}V����p;g/����1�H`�
yL�yP��|b2w��+�
	<�T��sS$���5��Z[�eLz�g�Pe
��� q��ҚV�r>H]K�Q\���7u;}���#d�N�#cp���Z�
+p�!���+�NF5F�Ђ`�_���v֥2��1���u|ǔ��������]PA����o�2��\<�u��y�d��"�m�MC]��Y,m�@�D,��A�{h��Q��/{[���а?�;}�;�h+%$�NE�\�s�R��ō��Uq��@�g��R�Պ�>,���X���o�7e��BB�1(2qdsK�Mc�˳��u�5?�Fdk��grl���<�ˬ���%!#(F��l����C��moo*H}�6Y+�!=�)��]pcv�z�B��DŽIb�I���̡#�"��ǘ�*���*ٔB-" �bO��d^eq��[M�r6s4E&��5^m̀�&���Q��~��	r\Xb�ORC�2�G��0�4s�dx�Tu�0o����wO׍N#� rd�
���H>r�EbfSz�3�G���"�8ͭL]2!L�9*�à��}�������[�R�e�qP*,J����%Od�nSR�y�p�����B���]I�;=l�~��%6�̓����KG<�F�$庸Y�X��.���5w���Vq�	$��ͨӡˏ��,iRr	8�)`s25TJ�m���u0U�����0�����dD֠M`�_~�Lh-;?.�.�ٮO���|�L�z��I�w��|�Xf��u�AFN(��f�V����f�c�2���ߣ�[��臉�
CSV�����p5����O�7�Ժ��}���L�$JiU�3����X�ceO{�L��Z��
J�J��J��X4gͲ�@a����7�
+…AUH��x剪�m}�|��
+���!��Z��Ƌ�������_9�f��ӽ������k����
+Y�r�
����v���2�7�Ը�	��[�{I#�~�h���nܗ5�SYG�>r$4a�f�>��D��	~�����
+A#�ןl��x�P+��s��f���=ky�G�l��d3q��ʚ�b�In	Wd\/Hй1�����2���y�c�7S5��gl�J�J>��G*?%�0p{d��0��RL��jt�3�,�s������-�S���m�Y�"H5�>6��c�<j��_�2HI0:�!!�f��Jk�
�w,UIZ�u�w���@|,"��D�?e�8{?����Y��w}
�o�z�/+�q��iɰ�O�ġ��=|l�/u�p>�G?��p��x����U���!
�>::��_��p+� ���B�SW��B�r3���0sLiw��"㩍�H<̄������iG�E�1�� ��W�(���6�I����}A��˖&�{"��<���&��D����td�d��Na�W���2`e�����-�4�)�ںF��U����D�x������Nn�=��K_�Rr��fhJ�y�,�6|�ׇS����M"�PD%�)AY�7��U�}s������E�-4́	9|X���I��‡��s��Js'��@_6�R(v����su�̤9��GJ�����a&pw���C��?
+;ڍ!J�H���f�l��+�2N(6�=h�0�E����|����fzu6FR@������ +(��݊<�NJ0��� ��Y*�0Y���({b6����y��%%�jq-մx�b����k�8��Q� ��CSY�����:��d�RΨT�G_At�=�~���&�Wk�o��@��Db�R���k���L��C"�0�K�Sު����6��T^��͂<������ރ޻�Ɂ��|'�Ҭ�Ė�.~�W�"+`��[�������Ue����R�<�����er�k�gZ�*V����x�y(�8��
+��N��[ȵ߂`(�	_`�Z����y<�˫��A�?VC���i�G��i?jb�����޿&�(�5iF�Q
+IL��"�g�j���v�˄�>��h[�Y'�a6!N)���ם�R�|R�]U���4����qb�T�~9�U������|����L���8�IDY�}��1�a@yJu��>��Y����MK��l��$��T
+���^
+��@X��Dc��J�iOs̾��B��:�q�����.��U�� F��铹yI�|���$���:�7ѻ�(�1�U��{u�M%�kQn��(����#�m�3dމy�֏	4�|�e}�!���$B acf���<c�w��a����↳<��jDp���.z:�ʵ���0`�4et�"+��~�Q9B�]m���k��p
+gI�Sd�,ql_*��:�1x�r�1���W�㐸Ӹ0���~�� ��>�O��d`YH��d�+��-��W���>�~"ߴGsҨ�@Ƙf��+Q�<��1�[uu�>5����g՛b�]{���tW�w��g1�������eQ��6;=>�J?{�1�ڄX��kӗ$��
+�,�ۊ�6�����uW@ϓ?�P*o_�.T92m)����X� G��:��;���r�Keك=i����:��n�N~���d��z�u���5X�)$�k:`K6�.��]-�>l.᥽���ύx��E[�_��d�멗d4�$�<��+W�$üE�*p�����J��O��}�&�<n5��zCT��8Uj����G���˖-鳞��_9:ac��Fm�`�,J��-�N���EGK��Ѐ��b��Ĭ$�ǟ*��	�
�x6��|&!,̴=עWh�N��ǣ� ˒�+���l5�+���w���6Tw6��˄�n�S���Cj��!r%@X�Ϟ�a��=��� Ԕ�^��QdQ�>)�Y����u���"�t������:n���m�@��Q��ł�n����v�D���=g&Y�I��RԚx��G�|��-�qs�����B�9t�s�D�Ms��1��=QE|���
+�2#���j[�`����ֈHA%�(:��rV>�`&b#;ac��Z�����JN��8�����_ǵ��U��S���������W�:�>��S����{P,�yZחI�)Y����Wbx&��$ȳ�
�U
�̟��-��3EX
�]����2�C�p�Q�w0R���@
+�A�-�}}��ʫ!�Cx���	c``���
9S�݊�X�!h(�����D"�Isy�c#�qy����B��n�̕3v$׮u�n��T�Z/��E7D��ʜ�:��?$2��~t���s�G��`���5�oe���N״��
+Y���}�HnU���:�ah8<��!��=�y�<�$VU����2����k�F��a��X؂�0ޗ�b_jߐ�|���{E���L�X�i۔^3ћ�y���e�
+����b�B�Yh-����l�C>��� �_¯Ԑh��W�X��1�P^fK�VӦ�#Ə%wz�e}�b�s	��pT&��\��1A[vN����9�#"���*jˆ�5tHJ1�[���ɰh�[���	!�%V�&�v9Z�`ل�(�C�x��|ۗE�G���/3\E�p�_��W�j��2�g�.m�M�C��V��0�c��wa^4,_�\&y�D�
t��Ԋ�_�j�8�p�[=�{|���~=����B�,�m�%���;���ޤ�PiA
��-���	�r6?!Ӆ�x�����\e�?j����FB��ѮV��ѕ�d� �8J۩z�g��HG�P��%�R8�G.�UL�􈨼5���](������~Z����~pSL�3:��A�DB��R7CE=|!�}R��"�FB����fA�a�InX��Ui�m���g���SύAHTUvn�tpI���@���hIs�������[-�!:���8t��E���H�*_��
K���E���0��=��Q�]�(��~0��kn�X�sM�`� ���L؛ƛ��8s	T�T!o�N��S�ƥ6o��x��r�n�H��j����H�	��tV��*�����$��XCb{��?
+�{E�����D`2s	ޤ&a&څ[~������cw�Cb*�Km0
+%^
�H��d��j}�8L����9ו�b��nGʊ��ƹ��$�oƇ?2$7�����a��j�q��
��5l潏\����$��]5��(�7V>��ϲ"�u@yE��5v�9һt.N�Q�[�=���8������p�������������PK_+[94H�*�&)���PZ��L�MWj���m��#�D�=��]��o����Z�'��������AF�`�I�t�㨠�f��W2�~^��P鯌��p�gg��z�R�o�
1'o����!��j<e�a͞ܖ���:x���/���JIw�������3L���8M��E-"W�U�w,�i����p�'�=�tJ�k�x�j	�E#�3�
+�8�:�:f���\����Q�N�/[�]��E�Em�ȍ�q�r�<.��j�$���p/��7E�f�Af��;�ϊ��+��ȱ�k�$�ӈw��Ȋ��f�}�1D'�ܙ��um{��v��¢u�e-]
%��_{�єp`Z'�M�5��-�$���Oq!Qb4{����K`S@r�m��p�����"��.�e"�$,�q���"��s�A���)K��=�=���a���8��
+ڻ:R�����<�™��v�?�.���!�0��K[����l�a;�}��R���g-�'Y��4��*��		�u�;�-l��S�9i�d�Hh��(M&a�+�ۿp�^�6��!/��b���(ni��o���k�����̬+�%:y�3g�����vb�t�~i���/��|����������v엧��X�NM�Y���[:�f���SGKei�Dj2t�ژl&r�Q�M1�mC��Z@~�|��r$"�R5���dh����'���\j��/�l	\��M������[�""]U]��
��*�Gw��d3K�g�~���
�hB~�?���/�zۭ�>O-`����D��+<�U\Qb,I�����L�^Uq=9r���N�|Fk̇�7�
��	8��m#B�=6��a�����Y9G�Q��[(�����B<ǡ���ϐ�|X�Fў�G��A�x=��hշ*�� �t�@?Nдf:�C�"�s���ا߷�lw:���A%%7�Q��n�=�Aŕ��2�l�G��~������v!(�g���ȇX�M�L�u.�*\0����9�<]�اq�u���I'ˑt�Ni̅����q{����OR�����������f�!�;�VSVP��������l�ҷ��m3��ͭ�T-��&�E�`�-_ʣ�_Fy,�����Q�}���U��� ��O2O�(\(e��y�?�I��:Ȝ2�0N^C)ȓ�T$����0��IP0:��7��J�1������/����`ꬉ�ט�>U9��k}�u���Q+��q��t<,Κ��+�)ފ&��YlC��I�}�Nzj��S:�h��S�#F�sPݞ�)�,�߹2rvK�d�k$����`½�r*"4c��;*T`Z�DS��C[�4čƨ�	dҨ�NQ`0��;4��Wc�����
�`�����47�F^�̰㭰�(���s{��.����L��F�\!����mI�3"b�*B2�]��9Σ\C=.��
3���f����J�|�/r9�ف��is�vCR��c��P>�φQ`����vT�h�[�?�([{[�dR��T��?=�nJ�/����q��M�(ŀ��[�\�ӌt)���V���Aܺ���/�MBq[�ւ����݉3h��dip"K��5�����A�tJ��!�TV��c��a�IAnϟ����4u�}̕�X���Z����0���x8��Z":#�A�N��6o����^��k9��n'����.�.��ĕy��fT~�����\ �����"�/>�I�7'&�_=�+J�r�|�!*����I�����t���E�}߽�F�c(���<>�?G������h�#��O�X[���Q��ߟ/�fWz������#6����_ZP(��i�s��\)�ju#+U���.�~�4\3�X�/�j0�����ݍ[�<�&ݏ!�D>Wa�VǏg���M�Hɔ���kQ�.�&f�{��{™�[��ʏ���%�B����] ���\)��i
+���1P!�K����u�H+��$�C����ao�I�V%��%������.kʣ��ɾl��sM�m�Px>cM_�:h���#�su/��C�qUVʣƨ;F�;1���&m@A���(��MN[l��m[r0���l�rhSr@�㔳�\R���B�pd4I5l���pNA�AwY`@�Ao��>��K3��|�\���&I��e��RIG����A����D��/ƁP�k�n@<v��Eks�܆������(�2��a����@��t\�l9)�^�׎��4�
+����Q���T�{YňM��=�txG|�y-\@����J�%�W�����$���e��U~�#І�b�Z�/�UW�>d�g���
+���n[k��3'��q����MC�oR�8��K���q�`�ja�"Y,@A��>u�����k>��CF^�	�1�my�$��'���G��\@l\�<#�Ì0K���L�[�=�<�������F-fP�V�qf��vɃ��i��V��#��B#��@���6IL����9�^�u�N��k[���c�\e����-�x���׭�O��k�5*�"�Fq&�e}����Ԇ�ܡJP�l*K�́v���P�����jLz��M���s��ras̄�`�:�S�B�+=���Au'��-�l9ޅ�;m�9,�G��<r�H��j>�S����&D�:�{R��>R%�̂��8�b`�Ţ�!3��K�)�ɠ��3R�xr-
�4�p�Rz����Xɼ�L�u:,���5��kT�Z��5��v�R�7��(b�����b麏���G�^�y��ٖ�~-��� a��ɗg��.��\;G��(�2�s����������Q1�����#X����;ux���#�����1�����s�Ov3&�L�Ι��-��2��!��T�0+=��o��|�.��>��{Ө*�ueS)"��ϒP݃׺	����	�hy,��z����Ddzӧp��Db�J�Iԟ��բctOtg��Nc$�3S��ȏ�>�*}(�)߼�Or=�+x0{���|��:��+J��ӎG����[�C�Ϟ��hYv�t��Z���i}��+~��:�mQ�n�l۶m۶m۶m۶m۶mu�CW��_��gVPJ�k4�e
H��=�8��s��c���k��\<�̵"�3���w��Q�~����D�5/��u�����)t��R�l��*Ο͈��GeC�k�(l/yXoB�{N0YcNE��b��1�;ӹ �9����UKr�B�dn��/��2�[��V���jǜ�c7t�J>7ǾROi�q��rL��5�f��9�w�F)3n@���<C�=9QD��b�� ��KR�)�a�/�=��BI���玑XIN���0�ׂ?ʂ�Z�1S)�F���Qx,�0��]n��q2���1���"ŵ�"
ⴶЭ�}�dZ�5XH͢S������=���P�`�g�4�>�h�F�[��(�v�� >U��TC��C��:`���
++b��5�"*Um�i���[	��ŭ�Ғ�h6MW�@�� X���tH�oGF��?;���j��l���}$Ik���M��.
+��hE�_��%�x��ඖ
3"�aܥ^�:�o��*��PU`������c��CK�%n4#5*�������Y�$�R�bV�[Xljz�0�%�]�����(�;���:�
+i�
��ץ�'�5p'W����Ȧx!�<H,Q��x�<��7��G1˒c��{m�5(�v-m~�Ѳ���ȚH7��a���@�����F(�}ѣe^"�D�~�!���Ai�?�Tg^�\U9�O�gh��^˳E�/K�'��%�g�S�d�s_���}�?�ؽ3p�deX�4�ɔx�Of��{�G�W���ʿ��"d��A����XP|�f��'j���{yS8�\t�2���B�~®��
+q�k*��t�㙇ѓN���7��d����H'CbD�cFB�р�v�ܐYv����L]G��x��F��a7��b�W��h���n7
ՖR�p��Q�\�d�~�ki��������Q�P��)��*4Hk�T�vI��W�����y�]a
+�W�i�j����p��r�����y�����"�,v$? r��>?�S�u}1B���6xu^�=�PU;m%|���%��\��r䘝lE3֎xt8���}㭊{��#�|�]��=R���|�P�A��_t����ea2a������i��]��l�"u�nY,y��=tH��x�������}��9X��e���x����o)�ܤ�9���t7,�����>Zk���ݵ�� _�[Ϝ��[�b!�8��}whJ}�~�����|^\��%�� ���u�B��l�-t�x{ M��]aS����H�ŅF�dr��#�-n����^ꠄT�3~�ӳ�������]|ǚ��\ �]�ZB�&���L����U
��o�SW���T�t�PH�$�<�a�e9��
+�tC���_U���W��`4�|0����,�>I�,�:�6,���޳W����R��2h�C!�D��JƎV�a*���"��+0��!k���w���p\I5$�[�H�$v��{%s4��~�}2y�s��k�6x�^	��ϒmr�"8<�Ƕˣ�}��qO��Jt�J5�qJ�q*�L��5�\�������E5�U�<�Ƽ���k�6����l<
+��� ��M���jś��0׍��$�%��MΕ����S��awRԫ�]vw*f+|zׇ<����ى���̨�����_ Ί�2�eG��<���q�Տ�E������퉇�*�i�AR���/C96O�ˇ.x���p�8��Gr�y7)k��^Xz�Pr��N�j�)Wq�����ʜ���ޫL�Vc>)�/�	j:�(7�R��9n.M���B($+�j��b`�{��^����z���AJ0�~�h�S�4=�'�"G0W�	�t�cb/��ؐ?л2���g���s���1��ϑ���m��K��v"�8h~�v�]��8�}��%sG#=����ʏ���nn>}���ɳ!/KM�yF�$��L��%���%������&$�������������(���Fx�QHd�u�ןf�4��.F�Λ��y�l�ܰ:�h]&s�_ʑ-U��Ԩ[Vyc�ݐ�.d�p�e��"a��k+��Y'��;����_Y��Y9�t�U\:���*
+�X\�,H>�2��j��R�����b,�`!�/���������=P
+�rK�U����Ԟb�c��^ٗ��t���Ѕ0���3��:O���
l�594����˽ԙ�[i%{6#y���A�mC�����ci��t����P��A��T�N�X��$�GGo����f0{� ���?�Fj�k7�f�2�\(��8~Pu�xZ���}�q>l�9�s6q&v��D��M���"ZrA)'��kj����"WywVp���7c�e⃉V8����Q��5+�/݋���`�x�/)�L���~�bSe8��
+ߒ���v	���`�v7����;~� Hf�)n��{wa�続5Ӈ��(����"n���JO�h�VtѧN:l�k��w^5��~��3�o�"i�'������@ȭ�A��RM)�S(K���+�:��9��G�&��K��X���1sU*�y�zyG$���b.�!��8�A�(H�4�樋~$[X<���&������<�4�5� �������E։�W�X."��|�4]������ �UD�t��k��6��Ѡ�K�gȫSKU�HFhq?�f�p%)XcNPc�� `�s�{Բ��k�X�y�����O�d���J�U~3�)��Ba.�q�Vq�Ԁ<T�C��:�/���D�I�<���Ј���^+92�L+RL���'J����X*�8�|_]i����3��gd�Z��=��)��ցָ�N
ٯB�+jY���)ħƪ~'IP�]��숽�@�7�ch*�T��%���?zy�����P�j���1,e{$>�+���=zopP/a�R�jn���E��H���Vw���M��&�h�T���r#��vT��M��|�'漜~�=����S�!Lu�S�(��\�X�����fB��{r#��;Z;q���3mT��/u�,UJ�&�.-Z	L���"QR��L���F��/�Ȭe�*N���%�r[ɭ��^�.	�V�i�hS�"�.8����YZ2n���'ҰY�r���#%����N�z�jQJC��n@f�YP0H��5?�	x���ӯq};~/Ȍ_��{�ϓ�aH�C%���]��/j�\�2�<�^5~�o���%���Ye��s�i�n���Z��a���`�����ż��>� �g�%ls�|�=N3���6��Tv��ػű|�t�����	��
s��i+0�^��%��m�5ħ���|	�?>�_�J�����5�፶�A�)NI��mv(*||s��s�AҤ�:p������B�"����� �Wo*��de��
��`Ģ&Q��Q筙�-���:�TG���ѱC9eĻ��7���N�n��>��ʕ7�񺱇[�S�ϒ���>2��;&I+pt�����ul���'�xc��I&O�.��J&�#����zd��]�F�+U[kpR
�:��s�i�4�&:HK�z_Şv���O��v,n�L�q��ѹN��{���](P��j�;
+|9:�����1�cE���T�|��,����_։*]G
+��q�^�Z驧	k�!���q,��13*a��D�혶X�gc��p_��u�idº�g����C��,c���I�x;P#�A��M
+�$�F*�(�m3�5˶c[�\5[,�p�Ay�ǾԌ�����'�[�R����EzK����ZY��fB����!%�ƛ�(�!���H������V-�0O�a�E�p�O��0xV�v:ܮ��ιS4�&�H�=�4;Z]�&��8㙘��_�eP)��M�ռ�^/b����谻�v�Et�سJ3���ʰ�����`�rN=�e?P}iι�
�Z4�/,T�PM!(�,3���w�	H�[��=�Ab���3Q���Q�'�/�z?��@&l�uWjK0(�/��+�G$J����9m�7�N�c@��A�P
d�}g�?S�Uq���֪~7_��ǚ��S���)K���O�B��e��f�0����]9tu�ÁQ2\���7"�۾�z��x,^��P���z�c��U aH6|�
tS:�Jk�'�e��}O�s�g�1I+�T}^�˲-��4M/y�,��Fm�4�T��}�6`^yC	��@�ً�u��먪���)˿��V�W������"~d�cJoNdG&��*C�K΂ �LWJ��9�swI�P�u�j�|�L�:`ɾ�"�j��`����لX�~��TC\HX�ĸ�pf�y�M ����
+�Sʹi�)�m¡.B����²"5Xq��RRC�Ҍ>�e��҅�����9�o�?(א͠�I��z�X��7�է�.a�tx�|��o�o'jP_-
Q �U0�jX��u����@�?*`����!��lnBʍ;�lU� ���N�5�X�#�4�,'���Y���.��c/f�&��9��}R��f<2�Y"��C(� �dB���h�%�M�f���e���~�=�����%\{}��j�B9���z��o���')Zn�루$��@v���!&ԅ�X�_�9�)(�_����~�-�����W��Â]\a�K����F�N}�3�S*;�����@7�ƠB�V�H��̀,�!fwٱ�E\������Ln����i/��l���A�;�}��p��4��H�ΐ��J:w�C7���d����t(��~�
+�eg��M��஡�����S� H
+�	`/�L���;������6���%=���jg�n�l]�@����
+���[�l\�
@�U{ԿX�c�ֺ|�>>E�B#��=?DZ��+s�e���H��<�l�PixMҋB��mU���t��L@������J��#8Pͭ���W��y�e8�?O��+ZPw��Ι3V�zI0���V����n��;����"<,����\���
+��&��4�
�/��K�᲌��V�h�&�&c�V)��n9N|Jx��8A���g	���WzU䁯�h�O�z�����V
+(�%^����>�0I+H�M�N�#�L�%��	_�Q�y
+�
+�o����%�� ��F|�Y�4���N�UXay)���9��k`͍�~��h�5��d·����"��5��Μ��UE���[�O���ҩ.9�+���Ks�d�{g�$���^:L�`d�Ѯ<�O�F����e<�	,N�L�b���t����4�Y�s.�]��-T����͢�A���?4X�u���
��7�*���ݪK������g����	\�t�Z��H��n��(�xUa\�t�)z��p�E�l�u_b�FS@X2���##"��X�
Gg!\�8�.#����<��6�O��	��ϨJ/� ����5n��jb=��w��"�'7��_c�Gn�Az���h6|+I�.��4�Vuk�/f�����ሆݏ���T��ӊce��/L��M��b���P�9H�8��e��y�S��=5�$����X���p��j�+MW���?܄�SH#�L.z�yY�]�!��[�6�xA��†!V8Ct�z 	-��U�!�9E���/�[��~�[�Q���A]�zG,]�����k\��J�e�|�j��b����k�,ЭF��Ɩ�f����Xb��W��vo��>�UN��g5��԰��l��U���r)��#R��N���"��ӓU���������г>�-e/�S��!�@��}�����f�w0f��O
+��
+�6Q�Z�#�F1�8W.�'�PՈ��h9g������1x/��4O0�[hg�F����NǕÇ���!�nA��x��ɪཕ��َ:���0p�@��ԅ���
+%ûr�����"5, ˊ���~9Y(Z?�(���h��V\t0�II��9�m�h�kaY�DәZi�-&��9� �F�?]']^��G4���6�{��jJV|����͵:L�m2
�w���E���]�v�b{�d����I�.�-��rر�2�A��4���dFj���z��2f�8fǃ{w^մ�]8�U4c�'�l�"�z#���� y7��g�=-�-
+`�,r$7s�8P�	��R��*jb� ��@6
+��Q\����杛?��_�i�ǿW�j+��Jʒ�8��2p`4�Aq�f����SsV�K�5_KF�9c��9}�$�J^� Y����Iy����Q7�݊�?�P�t�Y��AX�trT��oDD<�`��BZ&��R�x1��ȶRL��H����.�_�ڋ�k�&_Ȗ�Ø& ;�w礄/�����"=F�E�c^x�AS	c��{�Q�ɦ
��Xzh��;�Mp

�K�␛Jdhn�O)���~l軖�J����};�|�i|P�k�9������L�B腇��z��}�9Q��Ŵ�~�_�(H̴�yuR�	�w�#�d�}�(���4��Mg�9�{�,^24�a��O�_ں1ӊ�KuIz��OV��';��E��:�#��q
�
6���O������`%Ť�	}Z��-^�7PZ����7��Mf��t���`O&���_�ܓy�L���BM�:�,�q�Z*�AN�b'Kȼ5��aR����l�q|�4� �P
+|�Q��Ed[|�خ��_Wu	��%-�ʽ��:�s�r���GsXfFw�},�
8T�csS/I=�
+"®��S|3��k�����j*�lӻE�`��L�K�>�
+L�+�Ko�ݖP�����<�r|��e�4�����RԪ8="��K��v���P�E4E��<��_(9�N��i�
+<����i^��1���kѕ�_����	��1B�4�0��s����Y@���R�����r��[$ӂxi!���
+k�}�B6mǿG�P�r��NJ���*��1�m��$L�,��6!D�j_5�9��i�E
1WT���7�������v��z)�C��‡�iQ����4e-�<���̬t�o_[q
�?o^�)F�N�)=]��w��Bk+z{ZU�A��t����e4�R���M���+͎0�]W&�i�v��P�.�J����wb�/>��n4%Eqc5֗�l��Y��1�+�j]Q���HxpZV�G�e��@I|�D^������3�tyE��V����.�_ '��U�&�|S�e��"L���G�3���	~)���ĕ�}'w���Kvq�9:\}Z?:]����#����h��U�E*�E�MK�à�$�\�C��gV��DOnq�����3��5�:���Ëʊ���c���O�9N�E��NSS�DG(��V��Y������q�Q�0J_��b8
�
R[���T��'Ɓ��C5ѕ|\�(�FQ��A�2
k�f�h�͊Ǥ3RIBL��}gV�R[��M�"1B���+�����dB/�F#�s��t#ꬹĔw���c���{�k�Qۭq�~�5�"
~8w#$���u�@���w�\f�
+�C�{�j�j���U�F��Kd�_��J{�=���;U�L|�b�'��ݘ0�r���������N��nC�x�1#�z��y�	R+Bn�[9M��
+r��\,T�u>k�ʁ�`���c���rl�>���
<��q���	�8n�!�
����l��o��^��{z��[�wI�ʔ�$D�T��Č�x@+ �5�?�q�d�ҏ|Ĵ�Z�h^%�_��E�s�k���,[�����p$�D(��0�~�У
+�P"�]v����ɑ�'���˶w-�M[|A�n��ğb<�6�Mg~�x�⾫.h�{�u1{��+x����v��w��Bߊ(AÏ�t3��.ҕ�ԁ����
+(��h����'$��X�Ů������ź,��0ͩ���;��o���wbj0[T�'���r��h��)~+��X�L��y|��w��/:~�}d�H��z�
08�B�Ja��-3D���]�u#�>����D��>@�����7}�M���7�]$�f��Pk��� ۿ���y���H��5P�~��Ü�Ư�t���O�Vk���M���^o��_�0vg��_�H�<�z!���u�3���Ω��̯��w��Uv�w'�J�LQԃ�ē�H�<6�v9��ā;�ZZ9����|D�y�5J��K'�����cC#���F����.��c&�)���}�������6u��6�q�����l���f�ҞF3~T||��ꇹ�w�$�k���Pn:�>f�K���o�Y�=L�>I�ն��M�fd���b.�t�.��ц��N�*�/�A����"���m5ZВ����#��[����b�^�4���o���������P��-\Br����n�y�x+h1��K���r]_���m���s�����m'UF�2�S�{R�WP�4��ٮŎy�79��A�d;~-����~��+�h&����a��^�^gݢ�F�8Tw5��-�\�i���"�����`�=�K�b�Tl�������mn��x�Xqo^_�&�kۇޘ�LC'R�i�A"��(�K
+�gtƂG�_�'���T�W�Iv�r����ß�Jw�Ms^�7�5eeki�e�_��%h֥(Gz��"�$0Wq[P��}6P>��m��I`b��42�p�7�A9T*������s���v2F�_��I����������w�x�+Vn���K��~̓/��(V!�����sIHBt��c�n}�K�븩���|�'���Q�5��c��8b�b���d;�y�y��~T���qH��4	,�b@��I�a9�3�K�FI�]�]��i���ѝ�ڹ�jrp'�a\�|��@=��9@P��ug������]�@n�F��3l�C������)�jŽn21{�ˠ�]E/?�RN�t�Ř�dYr6�&۴&�o�E��l�b?�2�^͹D�i��h���5�R$���� /2$�y_X>bǣ��������`��ϳM����_%D/!�ʏ���ik���P�1����տ- t�)a&���6����?^$ja��_���������� �����x\�~�m0��6e�C��5��y������r���/���7m��w�D`�����b!��)����-����-yVK;\��?Nbp7���\9�"�Fu�Cs�q����E�E'DM��-�Xu8fjV2��%1
�!�A��G�#�OOM
+�]A��3�:�!
+�ɽ�h��t�}v�_1�Gm@�0f�	�}?����0�Z�0�{^�jo)�5Q����F�$/'0�Gз�S!�{0�3]p�gz��n��ή�J�]�1lwk;Sp�y��H��۬U��V$��%�#���!b�C��9K�g�C��=]��|q?��^?TG��<LՊ�Q�:�--�~*�1W��Jt�n�]��z�(@�*n�E�Kk'�����ޚ:���g�����H�,��]�K����T	N*^�y˭BQ�^�6�
�hU�W������S&��;/�O�<�A<2�D�fֵ4��-�z�$�9��/T�c���%~���T�.~�,�ō�#����N =�A�*�.��H�7���R�H��u�������*�[!��랅ۤ�0\���dWȲ�c-`��(E��y9��V6��?HGLDR��p��a|g=B
+k'�hI�g@��I�-�=Ij��Y5��S�{��Il)�S_� ۆ܉��cy���uX�:���8���8���k�ưB�4��3XU������O(�S��nj��W��y����a-΄tg�ހ�=.kZW��$Y���[�Y�E�ٟ��{ɲ��c���R�p�VZˌ��R�$�+�~�5��X��Y�YP�����HV>�}��	�]%5`_��'�{�8��?�o�M��W.�LP{���ۃ���@}�ԔŦ��,����b/G��7�4�G���o�]]���u�of��� �Ά?��Vg�3�B��X�ڌ�XL�·�g%�n�������{`���,U�EEp����}^Yo
�Wc��E���K��TQr'N(FVQq\�rU�r�۔� �;���;�Ȃ��C4-zk3كp���9�l+O����l?i��Y����˚3P�&���,l���8�	�u��tV���s׿frs�@�EHp��~ho���g�4��%���""}®Cz�j�+�%�'��ξ"�����;�w�=���PJm�p�V(ݧ�;J^�{�LlM%�����$!n�P�r��lA΀�b/ݺ�T+Z����k3{D�'�	
��?MU�)�P𔽽�D����
��J���������~��쟞�fZ����9��k[
+@zQݲ
�@A�䨽��R#,��1�\@6˅<�W|���.�4������t=��!I2C��U��A-�b�)��H+�:�}���SK�%8,1&��A=��)Pr�ut�s��A��I[���<P�/@��؂�N��~��y����wV��iY��9�����%�s���ȩ/UY/��uZ����w"D����r=�;��׼#f|�w#�đ�L�/�/�e�m��Cn=�jh�o�e�m��,�d�S�ka�I@3ܤ@P��x�
+<GO��m2��Z��h��[�Ky�f�5��5}B�r����B�,[��k���Ɲa.H�+��&��u�;�0-酕��r�*�Ӱ�	!gb���kgf���j��5E��{fX�o<N�9ܥ�Ng^��{�b����h|��ǂ�q�<m��nX_e^��9�A"lXL'�����O6�Na��YɞD�8��G;fo��6�/��=�*��]��%Uw��=��=�p���p�"����^����]�W0&7A�Y=�A���=\f��-�Ꝗ���ڗ"��
\�''U\j���*
+�\TJ�d�%@��8E6��)��-/�
��W1�d��}\pဂZ�f�)t�@ιM�D`Z�Om6{C�`���im�+�c��ɷ�Ɨ�
+5a��V �x��a��L{�Ts��p���W�&�1�L���{��-H�[�����8mg�/���|1�wм����A�����<|R#����=bI�Q��!v;�Oi��o���"7"@Ѷӹ�
k����"��I��t�ʃ���7XƓM���r,�7��y��(Ul�¹�)�%^׳h�������?�G~�V/��XRZ7k#�z��??m�=���m6I���'����h��XF�A}��^�Cٻ��P����޲��w�dE��4��3җޠ1�z����󞍭do-�8����HLe$� �O�<vo�F�a=q�+q���o��D�:K+��G�)w��2�8K��l��3A%��+j�9����I��#���ip���q:SߕN�R����^�+�<�p�O���� D�"�J�Do��mȗP����i�L	��<�E������d�2�4Rv[���hj�S�����A�`�Z��v<({#	�V��K��ߣ�2��r���^�ᑥ��KL[��y7�ixi�ט_��R�>0�Ѱ�gd��eeOf6&�YA^�̸J�����s��>�F�+�]�M�K�2󺄒���R��Ƴ3W�����uA���i�R�֜	�߲_I3ưL�[��J���p��G�?3����_������
+?4�٢���!�C��Zᣋ{q�~�^�j�>�I�g��U�;��,�
+�3c���i-9�~�+�;q;��Mb?�%�B����&�aҜ�f���E(߫��4�O��V�Ԩ��m�*�����!���*t��	�ך�;]�gA2$�өi�|��g������2��FX�m�x90��+�h9�$<P���#&����Ӫ�p�H������@$5���d��nz ٹ�\��o�&�Q��������H71��=�B�5лĊt���$����T�&��f����n33�����Xo��~�
A:,6�+>�HA[2���
+�Ύ׆C
+�j����chT��O�j��ڢC~��`V/����Bz�6��H�m��so!L�0��1v�T��}"?���Z�C����M�pF������E[WD|_f���cI��'w���3��H:�)VG)%�bX��N#G�h�0	CuW��d{]x<P��A"0�f�"��K��ڵ5����p��x����:���CJ�S����x��:i���7���^����j�<�_$_���_s�t�oj�>�z�g�ө�)�8=ux�or��[��5獖�<C�;L��������y�4�3|=܁��hE��6�hwJ�"���|�)��l�ԕEA:b���j��ђ�ʂkf�(��+A'���c���^:�|����/[,�Fu�lm�S=#��~$���s�Z�36A�U�9�x���y��(vg�s[k��X���^)��8��(��Tl4N��d�q�ݍ��� k����Vw2V�݅`a�9�O�~�������G.@��SoN�,|	����Ʒ��D�|��%��g�`��{~�O�c|
0�3��M디g���\�E��8���)#;����N����ڠ[��]U�C��.7v?��)iZ�NX�Po���'��&�?�mf���"e)[|����Qs��eHg���;�sx�58�=4�N�@��9���6�$|CGb�7����nC�FK�������<0��0�v������;#t�ۖy���}K��"U`��{�����k�/�:��%�?_��23���{QEߋ=R� =66
+GVJ& ��m@z˜9P<mz�j�O8�t��Rd��:0P�^�EI´!U'�f��*���v���ε�꫎W�\Q�ೝ���$+��L~����@��΀ɢ��~�3�DT+��j�m1���o�%��"�l?�?xP��މ9�Yx�]^��
+1�8��p�B���h����y���xݸ���a�����}9��q�6��*�fܗ
��E-��)�ƟJ3��D��yJZ�*��]��e7�q`$��jdL.�����?� �Y��5�/i�4Z
+��T!�%�|�B20��f��0K��pY�:L��wi���
+1�����ozP�G��-�B��M8B�*]�1�Q�G�uQ��9_QLA}�hO*#�s�fx�^�E�y3��7=ɩ�٫{�R	/䲾�v�y���а�Z�N�f.�7�nI?V�.yA@�~��#����mcơ@;����wb�`�\��n�6�F���/H^�A5�V��H�I5���()4j�� �R��n�,�����
+�]=Yh73> ������?K��kv���
8C��%+J5��=���݃ٙ��PʙY���ֈ�!(-�F_�rXc���U�p�M3*շ���������?Wlz������
i�pWI��r���$��.�#>���9(ʟ����(R��aT�*_ocn�1��׻R�,��1/凋840�O�~�d�-�"�Κ�l��	���q��f't�Q���<��n�ϴ:/���:�����R:���V%B�T?3PE���R'��t6���7����@�XV
+����s�B�n�D��-��N��D��x���"h��/�	dW
+z\v�R^��<�Ա���B��)�@v\�m�+�i״sH��rA�,����{0�˜*|"TK�_�b�(��,�nnl�y]����jF�$w���_��Y
�����j�K����f���J��593˜?����}�U�<4V�Q*"#n:�����Ӥ�[7��0��!��_>BH����E�:[4��o��
�����Kh�X�q>G|Y�����~>mڹ{y;x�!��>P�AM���.��q>g0������x/����X�B���x:5�600F�rx�B
�G�6�� ������E�uya�TS0.i��EE�8�.J��<�&��6�`��4b��M1�[�T�*U�yg�$�i����w
�&@x�Q��X݆�\.�vs���<�@Z*O��������rV-�B�`��e�x]53�I"�w(��3o���'y\�$uw�o�?�S���gDwӦ�͍�l
+�]�!P��T�!���ĝMҵ���T�T�hܢ\m3�cI�ɉ���E-qS�j�y�K>�SSb��.�y-��dE���lx%���#v:#�矃����ٲ�ϵ��e�8����8�l�O_�b�Ik����P\�YE��g�'l|�%At,���t�	�$�L?^�~B���M��R�ȫX��f��8h����ʨ �c��]!��N�tqɀ��]��L����(�偵�����P+#_����'w(�	��H�S�Y����{�2��-�M"NI�_b�.�%JV�[�~�y �L�7�����x$b$�)���k�W��4t_z���ZW�y��q�j�G�@�r���ً�c�V���~��|Q����Vr
%��0ګP1!��~m[��3����Y�s�o�ҩ9�~Ә(3H��c�mlN��z����ɠ_�Y����^%�pQ��
+ojkڇΣ�t�f�e�"=q�kb8����X��<.�U�{��k�S��m��]�$���"7�}+����Q�-�6����.�ȱ��-�[���bO����gt�L^�^S��\ْt*Q�}SD�d^w����\�k3Y��RFSuY�CHh�{ڪ����˸�`5re�i�/A����X|�t7�i����=�/�S9�̰��1b#�,�?�'4'���L��]at�Cw)���j.��ñ5?2[<���k�t
�t�psU�e}���wi+�/d�f���P1>e!z=B1��pu\��Ǽ��J`���7�d�V�d�!��ŝ?�%���<�/����m��q�KB7��PtF=�>�Σ�o1��}�:�,_����;�ep�����������-*|�Z����������
ҤHy�}e��d(�����ovم�?������-�u�� m'��M�4��hD�p�*
+�8p`����n�#���L�d��H�(UD���r;�����i� �Y�V�a^᳅ܵ��l�r���`.��NH�q�υ,�Ͷ }�-���_5;�a
+
W;quPC�0��S7<wӻ꘹t�����w�؜v��3�6����A.`�e��V$6}yd�����%Zΐ�r���ˬ����,�o{���{�o��d�
+g��0Q�����+�q��S��We$��6���Ѫzu(Yŗ���Bx�|��m.�}�wI�տp����LL�=�'���+s����p�\�Z���6#�!#�U5z�����e��6I��RG��꺗�v��cS��Y�I�"���0�?�6�Oho��)�`dO� �哣^v4Cje�q�i�^���ddN����)J��Vg�$�@������ӽ=��Q��<���k�9y��x�bt����H���v�nJ�a�g�'9t{cV<�)��v��%�4���t ����Mq�I�x��%=��c�W��a.�{%t��Xo�8u\��W!~�4y	wO�f2���鬰k0T����qOT�l�4���τ��pQ4�a�.a��p� U1�,��htIjF
+�k���L�u����{	�6�]ߔ��J�;-jK��'�\�{�~�9��8��*Q0�‹
+�����V�}.m�O�l��KހH2`-�tPC�ܙ4nU7k��A�)�
+�MLaZ`A��u�s��5��X$�`�
ZzgO��xi�А��
0L��{�y�H!��{�Ԛ����(�~�f�S�,B��ժS5���
/�~D����"�U>���������'�	n�1�%������������(�B�3��%�*�4��ڲ�țS&b�k����ˏ�"�ƈ�(~o���0R�t�
��t���x®�୿It����#��i�EAXδ�7��t����FE�;Be*�)@?1����|�`a%�q��`�8PQ���$�@�).��ZH�5�L�����	|������a���	js;D��'��J�4�R�"y��x�8,H�q�.��/"E[=��f���:���¸I0Z�g{��~��l�
+A~& �nIy�a!:��������y~������]�fKU��?4�5pHD�#��c2Y�f�����G��Ʀg�'�U��{l[U:�*
(�h��s���T͈p6��V,� �Ȏv%�gPV>�������IX��z��G�k�1&�>��Q�O풭����{�k�+-T�[��K�=O����~�rˠ"׳><,&P²ar'��n��U�M�H����<���k�h��ӻ�ĥ�Pmb\Ć��[�X ��~%c␟��������A:�kLa���r��Kk9q����EG蜩tH4q{D�,��t��vJ}¬f;gA����z�.M���6m۶+m�OڶmVZ��m۶m�6�wzt�E���U��"��s�P6%K\�ޑ$h�ƽ�å�a�QN^��dPJR����tk�9��#5KB�)0��0��E��Y�g���}/hHD��>�g�7L�Fh���2��5�+�n�a��D�[�j[�����}ͳ�����	��ߘ�L䞫���*��`B���hc��������5"�ϔM'��6)����r�/<@�ŭ���P�@�~7p/i�+�g�
'+�w��,nB��2�h7]��5���Wx��2�k��rl*H�uv�=���a�jj�Ԣ!��)�r�A���WR/���a�=ƀ���խ�E\ز��7���UhA�k�e4�k�zs��OkdB�k���S�}�S�զ� ��2��+b[�ؤ?A�s=ó��u
��}�4p'φP�X�q0��"}4����Y���fC�:�.Z�-��[wר�+_�ou����[�u�@7���nD{�������@�s��^d�iv̨\׎u�&�+���(��/�R�Q�@�����gP�����@RI���E�|Ru��x��y�
+��_�c��g�
+ZAJG�a$+��k�:o<�3�~��G�����X�T��B�-?���yx
��J_���Z��0l%c���B�կ���0��<a����H4KRY�9�\�W&.�x�<����F�:dcN+�S��о����a�D�J7z�X�ݙ��y����:(&O�!�D
+�;�	q�_TsNO�׶8��T*5���.{���1Ke��[!T?ORM�=J���wv��Pdm>7�m�@"i�S������`I��ፙ�ښ����ďŢ�V����g�h_I�J�J|7�B.��ޮGR!p�C�
M-��t���O�e�)vj�m��8o2��b�dݚH4�N����!p��2���I���)ZO9�"����n�������l��#�ZM��]����ny���)�턷�U��sܡ��N�C�y-l!9s+��b7��8_�7��2�	��3�6.��b5����|]�������?&���A����v��Y��ђZ�#������`K�R@ef�GM,L�Wv�aD���@�s�eL�P����;�V&z�t���$��8l�����ztZ��x�j��|�0��uI�{KLքX�*���b�}�	�&v�6�A@!0�4ߐ��7˒|i���G�0���O�Q�r�$OTo�]A��7�{	�^�?RȴG�1��_v�i�
&Uw�_s)�ڹ��q&Ϩ��Bۺ�T�+���m����ᒔV{��n�j!�W�T+�q�v�J�zҹ����8O���֠�{�ޖ��yK���M����3��R6�(�+����2�AZF��i���(D@�[L��=;
+dz�#�� l4|D�K����7i�Cm_�o�#x�l��L�g7��9�/��)���{��R��]��Y��H��_�%
+���k#Ds՘v	7� J����oP��`z_�*\/�N�"M6]eq�xq�"�M�x|ݞH�ٝ[&��n���Yx]5�6w� M��KOU��V�]:���;S=0�EMT�P#1�0|O�f�7���ŷJW�܆����&Q��Eҧ%,ک�n� �2-G"�۰7|�a���4XKs�̓b�}���j�k24&Z7�O	�
�j�%l�4�B�3U�嘘�.|^����I�A���M!*��&T�,G�t�D9>��azP�f<��^~�@Cx@Wڄ��_J���{Ǡ���Z��q%θ��G�vXQ����{�w-��ri: �\L��G�~�9�B<�z��o�����(u˜��uQ(��#��E�@ۤLV�Ŝ�|�A��ƳY['\|�bNͽ;G��H��o�p5�an��GI?-Z?][t��(6�u`(�d"����9'�����!������NvT5S,R��5i��j,�l�m�e�HHs��!.��;���,~��41;�=�ljHK>�����&�`�ze%s��4�$���!���q��rP.��4{Rӻ9��W0%w����N��d)�!?*����P���Qf����%������yY�{���<[�)^%�i�U�i=�;��2eS�k�
{�H9cM�"c䜺x��3@}������|AO2?�L�+���u�ɏ�+�K,_���w�T,�,n��:Y0
+�)�7�>�eŃ�k�i�LDQ���$�k"k�0�Q���w$��{`��ҁ����6
n[���S�E�nFɖN�[���A��$���Z����qIm�;r��z.��,����e�|�dfu$���+�B���c�����J�ro��ra��G}/����.ӧ}�F��ff��rW���՟��{R��R�Da��-�kV-��a��k�7H�B�'���)��n4��O��Y$���rJ�H�~)��Y��A\�	]�-��F���Ɔ(���8N�P�|�M�4�,z�}db���A�tL	�un#�pt>{ǩk�
i��P家�Vo*@+ƒ�M�,�,�)@|!+�=X��Րj��{��@��:�;WH���j����;���Bv�V��4u�pO���Oh���\vN7N~8S3W7%�e�������V�3_�WKk�"����+�;�I�.#�$$ӕ�A%[m��鞢�&����O<��\�\�$�V��WU�m>����V�gZX �-��%�^,.%�b'��N^�U�ϒƮ����K])�x��[?m�5)v1�X�b#�eM{#�PW�Yx�+��4��r��3��$D�CvQUR���d�|'����E�����s�q���sKi�����P	�|�M8cT�/s{�B@�vB`�����ur�N6������:9�����D.�	������	��.u�ON�؟�v���°.���k���K9���8�����ɇ�k_�6ڣh��e�th |Vګ��'��;�U�|)qD��@T�΋�����:zq�7H�������9���a���v�N%a��߅at��/��d!��x��n��4,���E�vh�'�B���� �O�U�(�X�vP�#i�'y��a�3��{�00Zi���0qnc�AV;��F�l;BQz���!��er.�z��i�~(�%a��|�|a#d���5�^��}H`]�&*v�8�c&��M���x�6!���Ľ�鄾D7KV��?�σ>�2.��mB�k����^������s�$
=Ɖ_�x%�?�yQ�	����N��vUEx�ϥ�_f��"�>Ē6L>}' �aB5ןŦ.wO�W�Va<��Jyv��"�����@�1*7��f��?�J�'����A6�
+�7R8�=��K��k�?IH�ki��%����i�̌����Ğ��TX^	��{0|���D1��$�o��t3�>���ڲ��۞��B�H�X�2�&6��2? y��1��8M���z໮2?�Rq�9�_Lˢ���+�”���G0�W�B�}0���ջ 
�����Ϛ����)�TQr6�� P#�*2�"�s��;�����?g�t���>�	�Yk��Ԥ�u���}�b�E����O.��Z�+��F��x�A/��x��q���'�	�4���Ԟ\V�eH%�xݙ�㎬Ss�t�����ђ�0%�<��r��������Q}]�^�L��ݎ�L?�F%�Y�*��Ё˴�q�;�t�0�((��%T�hӆ�Y9����8��J�=ο���	�QE
+Q"3�Ůq�`�nzH�/��@�Q��T��k��b.�������TM�ah�`�׳��?Gѵ�Z���I��I��yE��PBk�qg0d8��~�r���t8�C-z����́XR5�22=-T'���Х>�����˃�OL����Q[%^�+���V���.�^&����Kf��3˨��ʷ%�o�nO��p��+��fj2�O�`�B��r{x���t�{��@t�䛴J��Q@e�rhe�'����<�5r)��Rf��5���ܧi�;q&�~�����@Zq����ˍ�^
�/�B�ԴKbZ����b��>>x�ngYqW�4��م)�"¹��~2š�zd��^+i�2�rfS��ꞇ��d-��Z�i�ƽ�#�Ϣ�����@?(�������(Hh�8��/�˖���O�����6�>��Sv���)�*42��)X��]�"�+jm�����g�%��Z8L��@s�S����޺C��,_�8	:�C�Q	����3��h�����Z�+&��w8BҔ9 �5i��@M�@����c��P�s���ݛa�;Q'>~8
�������畔ӚF��W̺-�W��$Z.��/�G�HY��n�|ѐ�s+J�z�����}�sAc�����wm2l'�\�a�Y�^�Z[!kw�*4�g�"�a���F��=�)�Ƥ*��~���:1��ܮ�V�q�:�R��Py.G�d�I�R�PZ�yv�UN%����D1/�����b!qk�`v3N4�w�ܷ���R
+�Ɔ����w�yK{gJ�㯞%J�v�J*���	$0��{-"v��E����rڄ����=A�ҁ's��Jb�c5��}�d�K�r�~e	G^QG�I� �@ÿgH��?X��������s�j���e�
+����B�׍����צ/dŗ�*�=��L}A)����`xԯ1=�D[�2Nj鏸i�)`�����*��{o̺
.E?0~@ݨ F�LG]�P����'dW+�߮)�Y!����v��}�*
�;쯸8lFLz�&qL�0A�G��Եl9������u,��?߅W��c�C�U�&LK)�N����e>��u����o>3ud�L
+���"��:�W���������~�􉎃�W�ߌ��T��aݢ�pQ���iSzj[r�,�e�eAfy@�Fđ����F�g��z�e����΍�*���˂�l�� �!�_�t�	~��1�1���j��s
+5}AĜ��f��{
R�9����8������t��v
��Z����Dr1�k�ї��"�O�������U��YV�����n�}6CP���M1�f܌ �����������
�Zu���kz�KA��%[���kM�?����%E�2T�+0p��5����A�<뇫�7�=A�G�U��L>��:�9�ˋj
ʋt{� ���/`�v�
�Y*��I$��
+���ȹ�\=������pc�����V+&�X݁�>m����U����#���A�.�M'6S���gT�:S��M�vc������sBw���rI1�.3�p���g����FȒ�Իޣ;�{OjѤ;�i^~�8�nR�O�'��%K-h&I'e;�1�S���O�n��mJ��
AYM>���I��v+BM��g?�7�8��M��E"��BQA�z������.�o֠o��Q��Х�(����.��?�1�
�TfUXe��9�.�����kTe}sf��C�qÒϨVʽ��ma�z��L__�`C?�2-I,���`�g��p@��K���:����Dј��X
�vm��X-�J� �螃Q,_�#+^J���F�g�r���j�&�A
꿃f@f�9.n�
+3�!<_E:TB&���r�wP���ˢ�@��������̅�22F�j
+Wi0P��@�HD�C�@Pʚ�,I]���4���Tz�6ԯ��NA�o�j��G7uH]\��̴��6w�IKk�W\<�_�̔Z+���*�u[�Xsw[r��è9���7Ζ��4���āQ %2A��Rߠ�y���^�#��	Ap��m]8�t�'XE��FVt��<�G�J����ԗY���1�����U�#1V&�����􋶰���1����p�[�f!b�=�����ɗG�~�R�	}�!F�j	*__��f��^!���_K�f�h�L�RdQ��Q��֥8��.�Ѡ�VZxh��mѓƭl>�9ۖ~�=�����H���A5��ˉ��/F�i��'=-ˌ���� 7@{�?�x����'��(G�"/{\�/��s������ȩ����SA��ޤʺ�P�`PEF�ƙH=��z��L�h�&��&M��ғU���Kw[Bl�����a�B���EȜ�֓�7����)�:"�[:�	y�ۤ`�����Q<E/��>RB�Xp�(��tε??ӉM�jWMƙs;�^V�\�u�COɾ�e�BE;�m�4������,��蔲d?��B8��T6Q�_"�E�DŽ�Q�X����p��߽�V���-��h�(�̓N��B`�U�x�p��bra���9����md(��BFn��
+���������a�EG��jl��(HYj����z�Hqޕ�y�ss]��%m��ү_{R�$X}�&��\�����py�<'%���T���㗴al�m�\���r'c��*��݇�����
+x	n��Φ�cg��nB1S<�d�?N�K�/U�Ɓ�Q�k6�������[qz��o�.~��I���eV={���#�HS�p�
�e��ՒlA4[<Y^�M�X�{wCȾa���|��י���u�'��;<s�����X!%�1��Ù��ҭ��-��K��dF�	�Ì�h�8��z�}oz�@�S|2.D��B͆nzU���Q�w����R���iCI�T~
+���3PZ�1�.Ƭ3�~8_�\���M�/�]ͽxD��*��눢B{K���b�dKIE�ɤX��"g�-Р��>�ݡ����pLN[���"ɟ�=�2�CNU��P�I����H�g�~�y凊פ|�Ŏ�_�fJ=�>����K��	8#{!�O{(?����m���5��$:�mݶ�v�.��&�\k�i��^�9&��a��a
+w�k~���#dd��h�����[��P���S���>�EX��v�q������ =��a���^�n�
+�v����؟tbx��ɞX�r�8�h�H��Jc����h+����V�i�‘?�]Tr���5��h㫓��c�I�H�s��\������qv��b�y�+�VIM:�����1���u;R@��8�dvݠܻ(�!�s���,�{ �g~ꟻw���R���o����7q{0��{�
+
l�o��E;�JEA �2e|#�V��1�S��N�fs�Z<���-^ǿjPüu��n$�6�y��Trb�k2��M|kX���<�S��F�,����3�W�X��O�����®F�(���HN�'��SZ}������Msa;�,��%���QU�^N���)��w��[O1���=�F��Y��p
դ���NfM�2��H9�~:G8c�ݗ�PV�U��4_%��b��F��f	�����Vm��ɀ�9ҽ�i#�W���z�V[Z��f�QX�	ӯ
+nj����i�U��r����$�v�VANŔ�ܫd��S�Q!(A�K���:��&��S��F��#7?�%qǹ�\�r"ݫB����lt��tI��p*X6���;|.����`���Y����I̽n@Y�Vn�7��t›��'qA�yOW
�Ub�9�}�.F��d��W1�c����1�%`�&5���H~G�T�}���Z��S�h�„��k��<_�k���R�;���	�%I4�9L��ݫc�w��v��S4"�٧��;C�����S��!�Z�WP����;��ˮ|��'���_+��G��@r���gq4&�nP�l�q��Uk���0rح*4$�l�p�
��[�ڱ_�VAA�Bl�M�t	@KL�_�'����IQ�,�ҐX<�r�^m�T�����*kx�ri�r��T����
�ɫۛ�ܠ-�{m�H����*���c�B�&�"-���"A����i�q�:�`�?�+dV���;N+*X�^�dR��A�:s���L^��Q�<l�k'���ѭ�5Η���z�ڝ>�c6�ݽގA\������f9�
�WG�,�U����cN�D
+��o��~ٸ,8)�`�}���m
+��b/`60	A�q(��+��T��U��/���G�|���?���A�+l���U)Wmq{�!z����2�z�V��Q������>�HL]�D���Z�(�,���A�LK��f�~�|b|���6���6�������JU���<���x�y4���`�)_w�%��v �kJ�Cr�Ad$WEꛎm�B9I�$ۜ?�ϩ(WAOʤ"�wc�ӏrL���X���S�l��)�hܜ�]���҅��9k�?���Gj���Z��!BM���ݛ��Z�����a�Z.���Ż�߄�㱄GMs�u�DN�O�-q;��������e5��Z;�C
pBtk�|����u�nc@�t�}c��,��X(��cG�6iÐ�y�����=;6"���am~��sQ�Pz�����3W��)?;�m�YXh�<pz�0{�?��1��E^���U���i�|Ú]4�.R�rQ�*������.W��'3�.�M��W�x-�ҡ�V�Z����#4��������/����]ꝿ��'+JĶ��*�
�J}��9cg>�Kk�����,�>YD̄���,Sy'[j~�[����B��]�i�����;���6g@�:�aO�
�D�Ϻ/�T�"�C��9��>�����zq`��x�i8�����N�3|�A�[�g�_~J܊2�5�H0A�q���|��	���Y�$-୕Df|�`47o5�t�q�\P~�=��cӘ����dU�� \=�ͮ�:n/�q��o��G��FF"|ո�����o����.�
r�$S���,���.,���zYjچ�9�(���٪r6��X71:��M9���t�"��Ѽ�iR�����ꉱX�0����3�b�����i$�x���s�UK_HnN�)""|R{9��Is$erK�hE�ҏ�e�0��y��C���B��Qd]H����RW:c���0��L^��W�`z�z>��XK=�n	i/9��zoXV���h1�����������^�sKF��2n㼟s{�"�^���c5�q�H6�ᇽ�>ݢy6w�y+o����M��SS$w�՚^B�ש����<����T��ac(����p*'�֢u���&-BQcOL3uf~��yr���"�ΚC���Obˠ]C�3|�O�/,�E[���<��e��4��p�>J�:�\f��T��WuK���k^�K�,Z#�og�Z�b��H���TLPvUY����?S�M!ĵ�7������~����)���Ћq������_���Y��������ޒz��kn!��d�'pH.	�1x�0��V%��~Hc!�t��,czK�֐�)"��7����8P̅B:T�t�O3�1�l����'l�v=7Jh߾TYa�`���p
%�"�UI��f�Y��4����*8� W����9l:_R�}�h�I\�����R�/7�2
�gHv��k�)�/6t�O,P
�6�2̃�����V;%��)�q�|T��ºdlp�ș	��	MD��+�p��qw�!�E>3O�)ݱ,E�r��G�������ſ�����!z�Y�����\�iV��;�Mn&�`%�}δ˩T�-��Z��T�z�p����5h4�h3Z'Zt���i�#nA���Ij3��[
&TL����<���!v��&j��j^~ܵѦM��%��d����X/}-����`��U#>�A�{�K�&]j��O���
�.���vC*�W����y����Y���dQ���1
/��E[/y�bع��3\k4R���ٳ*/����jz}j���
g�f�����)���l��Fu3��G��C���k�PU�W�M�
+TP}�>�(f|r�'k�˾�3D�����
+N�P�L;��߿g��
h�G'轢�w�˯���.X��w,�5��3�,[��j�^w#��H��Ϡ�%�(co��B������K�?��><�8�e��}1�0�_�}���}��/�s���16o�2��(8��`�,���5`�rm\��[j��u!���uL`�\n#�����a[і�A�@�~��
+�������i�L����޻�� �YK��D�+�-���,�}!&r���9�o�m�3�y�֣�4�����)�_Y|����/����Z�vU��������7m�X6��፛3�1y���+j�\��2�2�y��
�P��W?�r����Nڞ���8m��84c3~�D��6�G1%�z�Q@�&qyܴo�c�L�}X�v�;~xi�b;ak�!P�C*p�J_��;���{aj����L�ڵ�b�`�)��!=)��Rۺ'���8?R��
+���7"gP7М:��U�XD� ��_+�Қ��3���Ď�]P�U�,&�{O7\�ɼx��2�51EW9�ZT)g���	A�[���Y�j�1�s���
+�}��,?X�CCp����Z1�������2�(����0��Q��w��<>6��kF���	�ױ�3�Te�0�Zn� wNL)�6���7y�t
+�|�|M����K�8⽔o����iU��������1��-x<���w�I~���~0bZ���MIr�͸S�Ik�nb�BF�'|7a�xEM��n<��9�o@
+B�%��?���k�*�������k�1^�e��P�1�������UXv!����QC���D���a�sc�6)�_|�N4��=��7�x˧-l���B���T8˽hšh�r��]y��3<��l�}��aY,�
+�s#8��[�ȩ����m���Zc�?�.B��z�����+0���m���]��zٜ�W��n�O�%L���9��ݳ��6�������A6�d�)\��~�&L]y�jِ�4"d��h��OȵG3�k��J�-�Խ6}*�{�u�=���V�Zv'���jb���|��R�f�,�bۦ�B�ZF5�O�Ȯ�?���o%O�m�}��/bg���3@棋�#��Ɲ�T��V�
Ŝ:�}E��	>p��Q
J���<k�?��p)���3��i�O���^�ju-�ɾ� 4QIQğ�:�ils��$��!z�}�8&�]d'�.��jg�W��V7�-5�7Z������B��5w:>�5�kY�Ü�@��*��>:Ӓ
T��eq��A�2Ul�!6���O1����Tݺ+��{�K�f�6��'�j5�!���m�h��^㮍���M�͊�0�ߝ�39�׃�:s0\+��_�e#L׳.ŋc�>W$.H�O43���Ϸ��@�����- ',�-K��P�2N:%�ϾC�m�����<-�����F3�K�Xی�qBv8}����A����N�5��GO�����qS������{R=�٤�W�-K��?���SkC�R�hG��_���F���j�ӭ��Mz}=l�H��017^9��F����=�vG�M���b�sm�t��5�Ǧ����������_��ef�·�$�W�p�/�u�P	}�!k��^%��Z_4��|���„���±@,�{
+�d�,'Ps�C�*cu9�SE�|�]�F��h3'/�B�z�nh�
b>�]ء[���� �&�˝�N�|ZM�\Ċe�y����ן�gA"�ׅ$���>'���e5X��
+h���`w�Ar��zN�ª��:�|�:ju����SE;ؒ��3M���-��r��w�t&� ������,;|h	��<���$�"�/Ihej��|v�9?����k��,���T�$�^;����i�\��I�Kx��/m�pF��U�P,�cZC�R�׆���迺����V�G�����/q��S	O�oD�~�-~"_�҇�@ٷ�
�D��L�|��QH�����p��Hɔ2�U���)����5�Rw�M��ʽ�V�4�F�k��`�)���i���K��QG�`��y�d�x���9�)b ��?��܀�y$f�
+o`��V�I֟�����EʐU�V��
{�I���pL�*�/�|�����`��.w$9ŐK�Z3��3X�T���̙�i����`��#r0K�fk#�(��‡Q&K�EBp'8�3t��WNeLsɐݏbD�n��kg�cW0
+(�$�X��J����>��c����p ��F_L*>�T�s.ڗ~t��'�y�Һ��?�Y�%�?疀3~�(��D��*�
�����
+�c4jD�f�WB��^��n`���5�~��>U�;��e�CTC�1ځ{T[0�_m�b^��
��R�4L�/��K�=У@-���A�|{�w<����hָ��
+��΍��T�F� �4��3f:�t!��n�{�BTac,;y��zL{L�ݽ^ƆH�l�d�<�%<��=H��}��mɖI�����'%����|=����ɛ�����2�0���?3�-G�K�?1@_NL���#DH�����L)BR�6@��!����95�p[	�_�2�G��<��L�
+<5޾e�@�k�����*�`G��ŕ���b���lj���uB�QD�ڭ�Zz���E2V+a=�埬a]��7���Mz�w`�5�⃮V�Y^�qk�l/�ʓߛ��d���/�)�M���O�_�F�8����_�C��ܥ/�����1�Un����+��3�W����B��\����w�]�r�n\M�VqW��Z�v�f8r��N�751�
�!2I�~����w�V#<]}�]��r�9������u���]θ2����`t���_6�lO��#M2�BiZ��
L��V�ƣm�C��=���1��D�xK�xin�J!�7�y�=�9|��
ݘaEt�d;����@#�DI���x�3"��ŭ�	U�ʱ�f�%'�������s��`�.�o�[�*�i`��Е]�D�xNߗ�
x���!��v��<oI�N}V�R\4@G�p��k�̠����O��$4V��Gcqm��g���o���±
+��A\��5Z���o-�R�7}ꮔF�P�OF������\��Q��>s]Q�P��ӟ�{��M�_�����jW�O�]�[��$,gǯ!��j�dͅr��/ɪ�(6�f.�l����ڹD���
+�W٩� �:Po�	���kE����
+4�š�����&�y���L�*��\����3�yu�QW��J�e���j�jɅ0�Z??�8E�{)��0����q�ѻ��-���M.�~���q�v��G����i�@���~���X���R�E�m'�ѽUg1"��b�(wx�S?�q�5o!�x�狗��l��QD�,�-6��٫��\��Ef���l97�Ј�b/ �,�7�A���Y©��l��_�����)�4!�6�Br�ud�\�7����<���!/�zΗ�H�s&�>�YuA�2էo�7'�N\��Y�$>/��X�F#��BQI�=Ϙ��'�U��ė��9	A�p�����=��q��f�u��.��AO��O�L��T�;�����[�_f���M`<m�u�"8��� H��ۉ$�_�����#��S�8�'#���
+��t�)3�}�����Y���*vp,a�²�%�ؿ�l�v��x|�\X���CqR��O"����;�K�<EBj�~
�&���o��%����OTibe�	2ѮఋK��i�7���qHN����'��*�-�$tOiN!f.�=_�jK%�������29�d"�\~{��b�$qd�K�B���RsJ{m����r�"���J�P�v+�B_m;}�E�p�5}㈲b�JohY��\�
+�� �'`�M���T3�I���} AL�HF'�����n�')�7���ε�V�fY�tf|0���"!j�`�ЃLBpB�3\�#��^�n
+����m؄mQ0�*{�+mv�?%x�r g�e��f!���FH/�2�e���P�S��p��
+�������S̖Jp5r!K��8�r�߁-�����
�����	(�P�k�VO�ea�@��v�_,��HK��u�X�l��]��Z'_ƭ�����KI~�G|ͦ���U��)���iE��OJ�J�'t����[0��S`���z�/��sc�cb�gX9��L�	�xZm�~t�t���r�\����(!T�")�D�p͗��=�d�!ޥcC�5�w�ר�o&
i����o{�B�b�`��x)n�>JJ{��G3�@#��@+1Q!i�c��"T!�S�p:E����uOE9�10�`�V���.n�@��{�o@d�&U�Ɠg�V*j4�{�HOK���˕���k0J�>����!Xj��ئ���{�`mY��lE�Б��>E�$-��;��M�M`�j��sw( ��x��l�
�/8�gVxVх;K�#�#D��J���H��,������O�u����:�����oi��ҁ}��l.��,�=ڞ��0@�=2���}rs���wK��z1�r��N�dы�؎�:.�"�h:�>�3W�5�A����ߧ�}���
2�u+hB���--�5'�!ﳤgq�9��mI$�R�nt�s��gx�p�*�W(C���r�s�D��B5��z�+��?�V�G���_�C!"��Ͻ��n����D��v6k�zi��{�����3q�uVi�֠M�^`�r��x��6E��р� �&��v���[��?����xt
+���s����u#x(=�EKyV�=�#��Hc���%b�MThh�EU]fd�>0`9�8��8����[
x�eγ'�lI.<Nz�O����QE�Tdފ�%4Q��r84��>?���:s�@-�-�����۵�9��A�]7�o�>m�g]��z��t�9D<[%n�;5�/`S����}v��U�a
+�s5�r���e)��$�^pK���>���=��k���hV�츣��$v�r�V��T�F�j�$~>e�1p��\lj��{���gWE�E�VA:���os!.� ����������1�1��&��F��iQ�>�OD�L����D�
+��S�C�Bz��a�V�+8�T`�E�	�v	�j&�v�:�@�.�����6�A���W�g���r9s�:���߹��:��e^t�y����74��t���M��?I7���PQgf�}Q��v��R���ax�(F)@�Q!�4�v�������	Ͻq܉��a�#�m5̟�i�M�s���pY.�C��qZɐn���&w����*�bV��`.�=jv�0;�6����?U�"C2��Gbd�����r;�DV�K���L�;���֕���!X(�%s<�ޛ�t�1��]�������C_���}b+.�ť��}�[��:��|M@b#��붬�Y�ҕ�1�/�J}TB�<��X�ۛ��v�NL3��rD�/�_���
�ֺ���i�M��4�ф��K�|j���'ؒ�U��+����IG�	ۇ�2����N��$�l*�\'�8t4r_�p��[:��
�1��`[K���-�]p��w�c]2��JvYf�B/��7�z�Ƅ�0�%��d�:�)6jr���3"܇B��b�W�!��е�8:��P����7��9a�NO�K�򜦝�"��E9$ΗB���-�����U�|�=�D]*
��!b<� �:ާ>�;3;t�|�q�f��/"y>_�)��њ`;��Nz'�/�.!;�v�|b�ÀL�xx�̪����岽��%o@�W
��iG[�r��^���}�������� 'ԟEK�@�p�c��i.d��FA�`�s�6��Z�o"�m%S\���1�`�qUFw�,;OWv8j�b��Yz�pI�D�y��eHsڥU����tv �d9L���@�=�\�Be�j]%���v�}�No��=�������>-��I�����*�*!4e�~�
u�:�F��P6
�[�Y�K"D��\n%���&��(£=���
+�h�M#M������)K�ʑ_�!�����I��ݘ捪	���[�����q*[j�2q��:�ZB�e?��v���=M�ᚴ~'�K
eH�����5��U@��J���5�+����A%�j;����� L���
Y0�RB��r�͑�������5'��A��J>9c��|�T��~��W��T�zۧ�۳^C�.L��o��@�Z���9��v"�a�r�t��F����Md=�i1.�_}�j;�_Q',�cxKx|&ݍAn���>�kq�+���˺%�S���z�a��C��u8y �A�2n-�-�[�0X���=M�*$v"
+0�uWti�H��V�`<��>�K2�/SglF��Bꗒ��3��n[�6���nQEݕA�ތm�8�^K�~�l�rx��=�/V4��ZW���V3,��������k�=��.
+w9Ow�â�q�q�
��x�N7�Z���6ß�Zͨ��2�IK�lkQ�~�2eG��.c��	P�f�0l	܉�,7`0�i��k�%�����������뼾��*7����sl΅a�t����m۶m۶m۶m�<�m;9�w�����zj��f��9��\1��\��9��4���5vA�,��7F�ۉ^+�5c��/�6zp�<1��U�9�/�Ky�NH?�"���f���в-���Cbd��[��s%wuN�����
o���*�S]�U��+wm��5%h��0¸ �	@
�.���B!�}܄?TL��r$n8Ҷ����SîΔ}��Ȭ�6f@�x��=6���d�O26$'���ZiyJ��cV�õ޻�t�x�H�vɣڛ������\mW!�|l����ʘ������̝��1J�q'�ɋ��в$1�8N��1HTW1�L�1�#p�&3�(%��"�C^�����Y�c���#��z�0:��$S�* ֵPM��t�
+�dt�bc��&æ5��L\�+�Υ�1z@�G�Se����vT�uʖtwˮ�׭��$�E�Pw{(�W��`B��u�j-�,G	�w'%�SY��Z� ����{�WJ�q�O�����jȚ�M���:����lA��y3��%|�,J�"��c7������VW�B��A��Z������W����Vj�rW�׮��;U�za��r�gJ��䐺#M���#Cɾ�����O��O�9W4�\P����3�f����b�|��+�bׅD����B��];YqV����Ofԉ�|�8�2#�b��	%�:8{��U0V���a���-���7[~���7���4�����sV�1��O�$6�=�ll1�B�_����/���H4��_'�S-�?��1��Qf%�0A��b�
&�@Fs-=�-ފ�	_�������b�0�O�AV3�6Z��ɦF�dB��(�Ydl������߻@�����zcXU�"��S��qe'h��F��5��i��Q̋U|�^֎I=�9�}j֮;S196Y�c�n/��S5+���ݦJ/`�����B���g��,�e	@^BI���B���&����GlL�c5��?����{�V}MV�/��$�����!��8l�����
H�y��ע�ij�n��I��P�����VL=�/��l���Mu5���O�/lŮCN�E!'��bB���el|�1�PW���Bl�9j5�{W�����1���������z;��Qs,�8�|����d�W.D`��Z�`p8��F���$Y���i�ڄjxW��V��બ�I�f��|~��}�[9t�SL0O�!����Xr~>l�ǐ#:��<���)|�;��{�_^k�Ü�'`��+���s��^��M<�^�h���$鱕��Ij�MB1"<��›t�]3~	�0x;U��
]u%�ҨL�c-j'���
+w�L��O�-�"~+N/�r��	
+���G��VkOS�HN�3�AU�O�b770w�d�i698��I�~��eފ}�H����d���Go8ܒ����x�jz�q��*P�X?[��[Σ7)�������ﴲlTr���Mi-k�lͅ��meW��
������)��sUF�_�jqz���8?���4-�b�9��y�h�L2����X
+j{�R�d�� ����(��	*<�ѲJ��r��#������͙��{ h&W?��Ă�Lr���'�A������d���S�m}�Xjd�P��w\z��i�l
+�b9��U$O��3�Ȼ�~������5��g�OP����
+l�ӐخX+�\)�yz>=����0��S͓C	Nd���3���Ģ	"�������۾�T���=���m�E��M0�/s���A����.����Ss k���*��}���'x?�N�8y�6.��5�.*ɒ��٦Q}�X7��u��n"~gv?�"BEc?��
����B��]¨6�b#r������I����=�͛:������Y���ӓ:�Fw��jĿ���6/�
+�ϣ)֤��4����
��9������=��}���N�pUG������Ǟ4xg�C�Wi�e��n�Q�:��C�<�Yʺ+�,u_�6~R�U]2&WRV"��r�����kn�{�ɕ����b�rq~&��"�KU�j�Cځ�5?wbm��#���*JY�[���7��,
�)�C΋+�wL�����m؏U��R��OW����Ԋ ��_b�+�|��zU�{�}'fw�\6*V~�%��>��E��FMWm0�H���_Zu��[��2��X\��+�����b	y�F��m���Õ}g�P��N���MđvW��_��6>F'�{���À@!
�l�4�c�!�ݎ\T\�9��Z^c��B}��6�b�Pr����< t����R�!jZCF��%x�*����RHLbј����}]���D$�Ҙvkr�s������?�`(��&a	��2�
��#��O{�U��Q�ْ��:��2���e����yi��"�{�7��i7�}��D&�I�'�oڇ|J����}�y�t��S�Y4�<�5�8�qA����M��A�TT�`y�T��1�n\�?e����ƫ)VE!�W����Z�7���VK->��\igy�
+ɩ@ND��������{jԳv:�&ķ��.�����'n�`i]�/I�{J6�E�o�-��;��$c�pͺ-��6���s�-���i���n�j'z��Д���mS�l��R��{��Gr��r�%<��=/MHn���vպY����3�ߛ���U�b��ք��.~��X1խ�J��J�!��
+��x�t\ۗRh#�/J����=\F��o�ѳ�����Mx����b��N�}�Eԙ:��r�,Ēu��Zt��oW��[������V����?��-Fv/w��Ʒ8;t�i:�O�}RT�$NIֹ�Εeb%v�S���Wlj�Ќ��&cu@�1s���=�/gknD����\ʼ	hDkC�\��+Z�=B�4�Pga����ct�|rt4�PS�B��L���ĥY��-@�4���qi�4�n�LJ��⾁^ࡀ-L�̜܅?ɬ��W(ڼ'�h�����%�������U8��'�Y��'y
+g��%�����r��3�!Q_L�IB$p�8�lL�wo����=[q�l���SC�|�#����uP�^ �,9ו��!���s�c�������T[��i_ƞ+������µ�΍�1ޒ�hI�j����)�8p�,(��~�*��7a��"�3��I��;Kf�@�X4�((Td�
+Eg��aBZ��5̀��א���8���M�l�S䅖%��E���zѭ�I�CB�
+�c�o��)�7޿��4����9�+�J)V�.9�̊@�d��JĶ�f�63����T]�uoUgi
�k=3a(�G�ݰrg��>��=�_�mV2�<�\��
�c��\-����V���������̍I99�A#��)P�I��,�O��߸��:!�����O
+	�b}��!9�����<)'đҏ�D��&��猏u]��u�_��+��Sh}�����9J5���	�0����|9.�эQ��/�T!r�[��ZB��洉_n�����Ny�Za�]��p����E�,#�	��D:	P����A�1���eTƋ��ڽ��N�,+|8„�V���V��+�.�En"4&������t(L�S�/:K�$�ʪ.���
+�%x���s��x������+��BuxF���<���Y	��rm8����RW�v��+[`��\�L#�����FcY@J��Zc^�R��&Y��N��3)�0^��h�CS���4��#�o8`�Js�"8�1(i����u�j��Ƅ��3�]+�f˫8e���M{)3�-Z��WX8
��8�N��6ι�[@���ihU\��zg=qR�N����ߤ��d�A�(�k�.ӱd��7���)s��Qj�g%ر�)�Ow�x��-o#	�D(����J�q����U[��
+��湷�q$����>#.߿@����B.[���p:�Z��;�o��q7?�^�X�,ɀ��a��WlU�/�L`��mh|�[q�p6|�zP�\}~��̂�$" t	�r۶��e�ޔ/���f֩U�9D����(���IX8�H2ɫ�T�F��&S<��dɝ�H,������O�RY�I��%\K�j�V��)��
+�C��Q!��W�2�c��'@'�2)�EE��,7�c3�To4�]�&��� b���a>	�tN���g;zW29���72@��Cm��MA"��d������
�nU#~�M��|}��7�r�&8{
+-ۺ��	1r���"�Q�c&.z�f���D3b���l�'�ϖ�t��[�AfFu�X���
+�`1�xɑ0�
au�3t�~i���o�D�,x��͘�Y���?<s��$����ؖ� @���K��"H9��4Lj��x
�:{ұ�-�(Uq�E���P
+��ݪ�RC�^=5a
*��1��f��nu�����,�N�ckZ�I��b8�_K��.�����4W����K5q�3��}뵺#��C����?2u�84��;ͅ������z�v�l�ᆗGg���PJ��uՀ�M�\3m��O[�'<��eo\�/ro�G�$=�xC�{>'zl���]��zq�(����|<s"#!��Z2�G�Q��Ý̎���l6Q5zb;6�V�E"�t��˟����������M�$��"HD��P���v^�$�;�}|�55ql���p96�m^��/"b���ջ�}�k8o�jd@k������
+�3��O�Y�뀄PaVl��r�3�p��uk5�v��;� ��X�R�n~��
+m����i����ș͔q���qP4ܱ�<x1Nm
}=��+����zAV���~��@<sk�؋��4H��6�~`�i�r
+��J��jp!��z�W_�u���=Hf ��XU���)�Վ���[&����m�._�Q��6�s�%"��?}Л<���B�O,��BoZ���q=�S?~=�H������A�=�=<QJA�r���m��a���dE�7�/Ě2�Y�\i9'�L��GNu�eg�;N4����w���)�2Q��^p�˽�u�����L1�HR^��3O%eҩ��>��T��
��#�Ģ�蹋�I��\�3&�ix��
+��ȍ7U�شe�e&7v���;:|�C��~�w�{ϟ
נg�#-���R�1�BA���NZ�zG_e��
+`	칹3NZ�	,V+S�>jng�d9��v`���U��OPw8JBM,�����٥χ$�1�ݛ<�W�6c�(vF���:zR��:�n{���򆢹/d�E�]��Y���3�����z��<791w�\�~9���i���)c��8M�+�Dޚe
+��oO���[Dso��7ʳ��Y��2�*C����h��������FThZ4��ԥ@q�J�GtɻR�S�yƾϤʽX�����~��]6ߑ�L�n�_Nv�BsؼA�5'ҽ����!���ڼT���c��ct���9�C��A2���⌡q	����h�fk�Ul�e�7v��<!܌�h�V]��FU&��:!���h��H>�J&iz_Z�61n�&S4B�����bÙ5�BG�=�*�*�A=��&(������Z��EP�y�v�h���Z�zgH��8�'��
p����q<��
+�'
�FL�,�4K�T�'o�	U���a��)[���u��|'�W2H
��Ļ��ׅ݈��{�J���c+�>��P����0G*�i�9�(t��5�Ij� ~N��b�j���J�(�e�$�F�)̈������B��n��{�iX
bX,�h�3l2��#8�b-_���9�(k���Qw�tZ��a�w�9e	s������Z傀�{�!ī�9lf��23�߁�,�Z��V�(��%+��ŶBhYs�`�k�}�B	�C�d�6p}t)%���^
+r�S�}0"!�S�}K�R2���G0�sF����n�z�����G0�En7�xW���*�;.�����]]�rz�����j����x�+7;/�E���.�+b��r�H�1(�
��ʞ�ֹJ;n]u�H9�^���+�R)�ϼ���5����<>|i��^~����
+�b�����ʔ�.U`Gm21����O�Le�FB�̬�;��+6����qs��fvH&>Wa����p�Y���V4�3t�5�2�ef������o�앫h����+&���^�(��ǚM\Qej�����_%E�R;gfJ���vw�{#+���Yv���	gJ䕂ַ�*�J5Ev���;ˆ<9���D{��x4j�X��3C�Yf�!�z���7����EjkּE{y��hG~.��{�y���y��}���y���p��o�`s��[���N�I����
+o��A@��[�9Ι`�/�EE�+mٛ�����[�}�?�*@���$�2�:�#���0Յ�m�Z*X(�g~i�5b&���(�9v����ߎ����N��
+Z�y��'��L�4�=`p�>ˆJ�3eb�#��������R����;<�(��놵^��� ��&+��K�/S���l�a�qiy����B��)�ҴM��>�=�^��6`[��jVqbA��/\]�陃��t*j;�����0хq%/N�A�s��M
8?��[cP���g��j<	��G���4��9c@J�`�ppl
+�څ}��?;��ԔkrM|'�Rb_�..�� �B�<�=�H�����(fZqO�+K]�W:$���߳����,�4��.t-SS!���pXǕ�?jPF�7E\Țޗ���Kh��`��G9;�a���8x�lXu�2���-���բ-~:y��i��(��gE#�tMX�4`���<�BZ�
+�_�AY����Գk~�7�st���=0r��1���!�E�a�٠7r��i�@'_ wM ��g��y�/�l��Ȱ�ֳ��#u�/-����x��gq�K��v���Og���6x��!b	��eN�7�w�Jy���|1�EX����B�a(���\}��y���g�E�F�A��e��ڭ�9�}I?IP&��}�%}[WxmD��M.?x]�B,���8U(�D����y�������l�*���i�N"��4}��S
�]�m�}�2lh7���kn͵����%���vF=_���-�s��yQ조(��_Q8�h���s��W���}�9�A�}�i���M���P�H���,b�i�+R������m�@�����@����N�^I���r��?C~J&����iwvy�X@W��<�%�ď:����<M�����rK*�!��l�搡T�j��hӣ�S����Lt8F��5��i�רV��{���.
i�+��I����v�~%s,��P�T�
+��g1��A�q���Gx���ʓ�ȝmCe�fs�%U��J�����b)%��9|���>[���������Tc�P��O�(�����z����>X�J��� J�L��Q��D�f�~3��)G����!(�ڈ����T����c�U�Tu��RۀI~3=����#b�D��uc܁!�(��mU?�RФЖP}8e���y��ZL0wƸ4��G�*����s�$�!>�T��WU���2��K���L,���C��n#w_dC�2�SH��������<0�
+�P�,Ғ��TjK�pP�W������T��r�q�N��<�����e'Y����6�Q�~df|9��@4vW�y;��V����")DqWF�1�j�P:�g�.�o��~�ҏ�Y��Lf}g��M�JE��|CA:n}�eh�a�Mo2x�:v�
R�Y���-��F�my�����^qk;�PEmǡ$�0욽X��ڐIC�����{�t7ې7\�1�f򴈻挂
�!��iޔ��
+�
��k��v��U��4��+�T��
� }e �	$)�&��t*��o�8���"�c�j�>^����Oo.3>A� ����|��]\�Vjl�B3���/*ʩAa�tg*�Pt�m�t��,ڝ���U�����Fk{�R��q�ߑ	��z�Z?=�qu)��1���/_(:����8��;�#BWpXc�"�Œ఍�M��?�Q�X+��#�s�e�~L{qr/���Lu��2��r��I����/z�+���N��x��!ϼ����>m�:3�^v��ȿٜ���ҕ���/z2����A���)��L���+D��~�<�?a���4���Az�݆c�?�t�[-�Wʇ�i����ܥ�v�	����(�k%E��{79,��<mR(�D���~��ر�a��`獫N��$������f�u��eP��!�Gf�G�J�.@	3ɶ<�f���,�{��X��zȶ���C=lbV��E��	��Ѵ,ӫq��z��e�
�)O��=&�>x��1_���I���1��|�����ϟ��P�9^�A�,�b!?�!�=�*���$nF�c���<��LFi`��>�������*���T��C�2��KJ;��дs�!*Ł���G-���V
^���+a�l�C{][.l�h2�����k[�x}7t�ax��
+�7,����e�,|�Y��"�I��jn*\8��be�NxxQ�͢Dy�~97��R��fU0\l��J�x*��Fce�z܋�LPJj���"5
+��BY@(�{j�R���J����G�L��ّ0��+�ʬoja�mV��|��`/��m�<q-m;�����ޛ+�OG�o�"��𱓢"mU:��1%�3.��K<}Z����#�Pb���\�ƚ=q%�����f��`*�l#�F*��u�<W��2�G�$�l��T����E�b�Ԏ���$��?�y}_ZxyO�İ�U��F���i����9�����dfju�����(�I��G�\z�%b��k��^�=�0����"��+3�u~t+�m�X�-�*rN�{+3�1���	3F-�`E�1ڿ������������r̼��Fw�Ņ2�����W�*�ȈA��i�\ٚ���r��
+
2��w9�D��Ș�{�v߳~�{��}�<�����[�+S��b|���>$���ƒ"�d@�^��j*|��4��ë+�̈���
�S�`�h����.�9�JB�Ӥ<l2�k��������!Lƅ��9��T0�:�?���� (o�S'm���jgA�L�ȃ����-9O����,��j�ƛ�
�"�g��&F�5n� �*�USRs�z	7a�]N�P�%�K������>U9�����_�C)heRc*�d7�a��Y���BoF��c�:)�4CM8�}�u��NI�G�����xu���&kso��+�+��mPu��O��XAZ�M��ElQ�v^�)���n�����'��
�N.1�jv�TTU����
�m�BOy����'[��� :Z�7���@j�5Iݎ�'Al+���න�EX�c��l�־3k
+\
+�Bu���+,�‰�<ݞ�'�&{�y,����^mK������Fh���>ă���5O�ӆ�F�|�;lO���I�";ug�
�o��bm`~��e�:&	$
+
+��a!��Zb�����|��_��ZDu�.��^ߞ ��I֋J��F�Ǣ�1��ٮ�'�5���m�3�%:�%���%3��
+E��7�U�z*��j:7LI��k	Eڻ�1�H�f;�>|f���
+	��?`o����=��X�4.������~��y������o�C��Y�K��u�Eo���c��ȯrKX��&���c���	Ț��س��������?,t�6��N��2N$�	�cc�EZ��̥���*Oo���#�����{ɱZ�SK�2/��M��w�A�>:���}O|�(�2�s{/�a&jJ6~�削�?��f��z�濥�}c����rM���P߹�E��AFG� ��Ҕ���� ��
+X��;�O�I�mN�KG��-*�6Yj�!���K��j�$;t�Z������q��ꗰN�
+k�{��)g�y��������U{
+Y�F3R�B�fC��"���ɔ�>HRv���?�����{��,}O�x8j|�$�#Zra���,�gV���U�vsO,=�(�BDI������k�1>���T���!�a�8���?��@�E܉n�oJ�Q6�S�l��^9R3��B�%�^�2����|�"�|��lZ"<^��95�~���aI�Ӯ��5Q%�f���w�v�q�J���h�p3�5�k-D"1:R����χL�+I7\�;h�r60�.�����Ƌ~I��e��ΔƇ,o��f��`f�I�P�e�԰M"k����8J]Qx���^9#:bSϾ�ǂm�������F��h1�چTL����W8D��U�$QƂ���]-�ЇʆP>�Tl���&j���zh=���7DԾ.�i�&���s��t�lܶ�}U��������$�p��Ν@*���pEy��95w�
·�r&�M�&��_�W�"��ǖ25�O��V^�z�U����ֶ����ךJ,<�ˍ�����.#��O"-���%���`��%"^��r(Yf���%��+�N<�����8����H������	|���d��Bp	��t8���8�\���C��o*����ۋ��F��l7LS{r��J_9!�F���YSS�D��+����@�cZ
+eC���1�PB�T�
�'o.,~����T]���M�+�x#�rt�!=t�P]��|y�B
+�vcQ�շ���e5��S���Kr;���1Y�^��2]��xy�
��ަ�x9�{2QT�5A>�N��*�����}7��K�%�ZK�ý�t���{�Y�Z���?�fBs�"fNw[U,tI�vx+�8<i�A���x;�J�ݧLf��2���ۨ
+�gFSN�Ec6-˗�����m�i:�j;����*Ep�}eXe�m����K�Ėl
+�W���D�����鰛Y2x-��j'��s��Iac�#5�Z��/=>�.�q+)�vPfth׹�x��5�s�"?ʘ�іa�Pֽb���s%,�;����V\��P�c��!��C��`��;����庴7ul彥:Z�Z�Ix�,��<	��M�'r���+�����w�ݭ��M2�3��fkiz�%���>�&r��hf$YU�|�
+�&���jp�-��D{!��d3Qȑ���F�X��ݿ]*�%P��ڛ���*�������|�����`N�>h�������ZYO̰V"W0����Zc�����ML\���w�;G�o�?�.WDuF��9�/a{��Z��~��E�F�3�]�[L�ai���xH�p��.��dZQ9��a5�Nʾo�9N���O��T%[�F�j�ݽ�N}����@�ԍ����~�M�&��*��I�Y���:�C�����A�>��`��� Ka2&��/�f��D'�,���pY-4=���p��;kʄ �8��s.w��*U'/���1��u6�<J�uY�Y 
pAQ}�}��"KXa,��������O��S��������eT�{���o���or)%�ye�tB������t�����"4����n�1\�ʛ��֧T6ѯ�8���ȹ���#@��ב�0��En��ZK�'�?��=���<�_�!����e���P��*�Z:�j�i{t&�J�	Y_9���c��3ƫ�`��c6��e�934�"0�W��r�N�Ï��a���hG|�V���^�jI�+3��M�=P8�ų�E4���:�i�[y��;��s1�����cУۋ+���6�i�)o�s�>F��""d��C��ʨ�ڃ	��p|XB#@4�ǧJpِ�?�'��:e���O	W�T��| ���E0��7�x=����D����[�۸���T��	m_�2��n�ل��Q�I�*)FCw����:D�-]H�t�t k��)6�٘���Dg���SԾ#3���{ 3����}JY���A���c����v�f�������9s%Mt�?:K4�^@�
=�
+�C�ۢ[th�z{�>�h�jB�OA<�W��ޚ�:#��*c��A��G�	sBÿ�9�|�|/�HV	rCa����$���eŨ':&�֜9�c�+��H����Ae-*�\���3A���I�!�����r'�]Ik��
+~���
+2�ɷ����a�W��9�jt�߶J�!��a5'Io�������f.��_,HX��~U|Fr�?SM�����H���$�8�6O@����\��Z"k��@z���v#=�rd��#�2�M~4��S-�.+�=�����4�&���?[�w7�[��;��H1�%@�ۦ
OI
+a!
+wp��2-�n�i��8Ѓ
�կ�����)d�;Y��X`��&>�o5�b�وi&���Sˍ�`������ҮL`^e��e�x���˄ob2sS��ib�(��w�Ȭ�D���C�:Ey���z���j��Df�ڿ�JS�H\���+�\T��$!�km�����]d�
+B�.x�h�R̟���v��/̬IJM�IͩZ���)��3�E�oFH�a��K��9��ԣ���{�݌�cQ�b�,.�Kl2cɴ��l4��������ez
+�d�[���ԉ_���$���?��.�>�}���\(�![m!y�nՋKO]�cu{�fA�Nx��hm����ޟ�}�fs�p^u��� ��,��jA�
+垻�n�g+m��O�XI��̈3-߬b���rUZ�Ed+�w��Xټ���S��vg�ϧ7@(�A�'[^K��|�sYf�ݞl�+I�!�p�Kq��[?h��f|&���Cs��&�_��t��L&��}d���3�2�Z��7�����}	�Hl��Y�8
6~��»?��զ*2�cЬ�)�s�(�������j�2�D(.Y����{������Գ����i|ROr�C�ސlT�Q��o�s����	N���eL��'��V�OWX,+�B�ɖ��X�]}��Y�:6�Y+�OSDօF4hQ���Z&���c�(;�̛���N���͉}� �&zEܱg����UV��@�������}���h4���|�������:�X;�
+Sۘ�Kt��h`������^s���8���`g$9���.S,��t����%�.�k��(��ƖMo�`����`/��+\�M���b�����}Ղլ����L<�5��~_7|́�
r��F�DiXZ��y�����g'�lq���m䄤N����?�.��n�����j���ԣ��:6Sɻpɒ3D:���W��B�
�R�g��E�@-�Rˣ��s��y"k�щH	�)��6��YdGN�A����:c#�x���#eL���ƾ
+.@L-���k{�o�5����!Gm��N#��[7�|4��� P������!O�� ��2�oU��n{�Sk�Ċg�ׄ���
+p�\��a�U��?��=�Qr��j(�}dAyk�j����Wu*�U�`.�#�0�\���ݟ��^��,�7�"/�J\U�L��3����:���T�@T�O��mS@�<������#����ܕ�FQ�����#�f�	k?}5����{��</{��ݩ�#��gMF5��@u�f����4��Q7��S}�����3���;���2r�V���j8ƍ|r�2����?�'�kl���᝺^�G�v5�`���_��C�]�y9‰�j�9����_�yr����l�e$����Ԧ����k�Ӓ?�?dj���J�����i�@���e^8���sb\S��$5�Z�Qd-
��aQ����L)\�j�����:�O���1�2��_�@��メHX=��{��cv�S7�t��#i�	"$6tC((.��zyc�{g�⦁e���2���x�N�;���B��̗�R�������l�Ǹ�}�ZĿK��>��2
�N�6� �P�L�0�(d�p�+t�������
Mpk�:OK?����A4�9� Il�V��`-M�WEE�zY�r��G�=�Hŗ�=q$��d�6��G���:3����)�٘z���b�}�]f�)���z7�jnp�'�S��Fyʲ~P��4r!�I��7(���W���pf�i�j��A47Ki�2���KÊ�u������oʺJ��bI�z�"o����
�8�d�RM=HQ�������(�(�8d��]�4�Ss��GJ8p�/�.a�5�b�U�xhz�]���V��Y��]�Ӳ��R�ЌF 7����-���@E���[��P~��q�.R��e���FDCp��J���2�>0��-6G[i�{S�#��]fV�Ja�7��}
��h|��^l��^Is �lt9T���F�����mh�Z"}���Sh쒛�+�OE,��'�e/`�*�QϘW�gIʽE%w��������r�W�5���ޥ�8K��%'Ql~�u��>2�Bu����[�(6O"���۹��J�E��̸ם*c�9�z��"�c�'�4��}kSrl|�7��-���{�p�!�O�*8Eu:�x�g b$�J��2渟�J�r�o��g'� b���_�Ql������Q���f��sB ,�|Kl���D��{�DP��lʽ
+��&H]+]�p7�Z4rﶢ+�0Z�����u@���-#!�7�Ȁ$�
+A<�1�l��������^�f��q��`p@��5��T�7V�*�q}�rY���G�r�ؓ�����˻�?�mj-��(M!:g��C�m5�l��H���n�)ކ�̖T�(�����ɨ��>�'�S�\�,�e���7��C�)�[��`5"���qBfU�&��Q��w��!'l�������"��X*y�r�ѳꎂ�%^�px����8��� ����E>���g������������$^�8�����1����=R ��3+ ���sW��^�ֆ���K�w2��ъ��ƴ�����dT��uK4t�[�ׇW�p?8xp�<xV1r%�����x�`�R�:�+�6��+��8E��6�?�E�
�cܾ��M�exf�>Pc�u�挷d�b����y�7Q (�����/�p��'bzɌ�up"qS��m�k��X�����q��W�wbڻ+�;e�.��b��)/�n%�k�Od�MB���Z�&�37�r`�X-�pJ�H����b#x�-(��SޕC��mT\Ln���t��v2�8u0�>3�YM�\u��j�Z}�z�'����B��zg�Sy^�1'k3��Z��l���S�k&a�D���������O����ҜM��׉�ƎJ4��d���QH�c�K�TJ"�O�_��br��5�����ѱ}ʚ���_�������#��cDy�g�[�����z�V�f�|oղHw1:K���dh����#�v���JZ|��[���*2Q�a`��•�r��*o��V�c�b��0�9�\�Q��b(
+A(���$$!8��v�D
5EC�V™��4�؛����f�/Ӝf�g_������Bxd�����
+��ߚS�:�+�G1���)���\Q��Ԏ9K�H��$&ř��~iแA��Q�?a�T]���A���D�la��u$��:�*ǿ��A�6IcK5���r���A	��?��N"�G�n��r�>��:%����\E<z���k��T��?����Ro��ni���K 22��uO�v�G��I��Y��'�f�do�!E-���o.������v��ݹ����y�k�z��L�
~��ða����:�]�>0�*'��} 1� ����jx�0�(rk���)Ui�
��O!��R:K����Y��������.�2$m����{gI�3���R0[��hC�(V:w3���ճ��v�u�r%�h�
+�ͣ�[��z%#Zk~u��v_����oCڐ��]�W�7���.i&p��x���1vn_�� 3����36D��@t/��
+É?�������v�U3���9��߉ �ᆐe�IfUR,�hΝ��$N��.Y?��qt36nm�e@}`�&�ך�[�e�3VO��Ӱ=�p�-�A!ƨ�+h6Bp\W��e(���(+��[��W+������n����{���3�yŘ��A0\���l!��?$����-IH��|Q�#Td��]�2Kz������
+�E]��g����n��3�9���{�`+d��G O^SD���}�PG<n�w藒+�2Ǥ�ʛhY�����th�[c�鰋�Z�(FE>{�z x�J�Ӭ��k(��'!�p�#��������]Y�=���.F��������p�j��E��b�h٨Ye��:
N�n��l2&����-�ʡ�fr�0�j'NAF�� ���O������95���
+��m۶�]۶m۶wm��S�ڶm�����r�L�I֒�A�T[L�M�[���;/���n��{z�|�����A �;`�'��3�b�md����������p��:yK�:{H)=��>
�JH�t��e�ڗz��̨�Ӂ��}^��@ZF��}�xv�<��q��r`���^�`9��Cf:�����g��p�C�ߘB.!�:� K.�%:��Xۙ$���C ��c�Ȅ(l/!�J7�9�����Ox�����lQX���9aO�Rd42�w�Z��Weg�_���û���9y��ai)�ʯӭ��S���?R����y�H��9��kU�Y�Z%��˜@)�qO~�}kY�`m�{e�q,"�
'+�F�qX����5�㺄nݨ9�=�Ĉ*v�P�?�x�YzH�E�E��䛄U�=n�'&�>�X�	>o�t�1ݢ[�"<ݝ�1�
��0Q�C�r���cQ�����2b	 ���nr�w��(���
���4�0�Y�����5Q��U����m��E�En��)J��Ԩ�ǧr�[�<t
+�V��"�R�o����>��T��S�ő�S��i���d$93���
+��I���g*�m��I���2n�Z!���R@w'���3ǔ�am�
+�bJX
D�
��N��no�
+\��_�
+W���H���֓��`��^��l�Gw��|7P�C������,�ÿ�7�1�ѻ�K<������xa.?8�6z~�7߯#���i�@���:�_�Wx͒Umw	�"��y!i��}@8n����v�RR�ã��E�;���ھ�V(�^"���xfZ�*��4�_&A~�g�`���ֳ�į�_R͑&�B=�9��-��jW��ü���AԮ���=Q��{=���r��I��
��(;h<`��Б�����,�'?�����'tQ�Y�����?�8��d��r[�l�
+��f��S���/J�4Ǿ�;2�"0�����W2u
�=�=�"�KOz\ㄎN���`�R��~�>��Ɛb!ȩ�l!{3��C�<.���_�cedW�5�]��zV���#�ނDr0����C��Ȉ�{'فe�?��k��-�#�
+�S��l�q�#l2�B�DE8�l#��lBE�Ȯnf.�2���6U���G�z4f^����#]q��#9��o�}P�dY3�lu��E,62C�:Hn!���z�?;pd7�����<r��U,����ݳ����_2M-�c��Hg�����n�)��}j����E4��6<�D�^��'L�ڍ-<m���N i�A8_�/D��3�6�	��:uI<��i���}�%�N�G<\�*���U@7��f��"&'�ְX���Ȏi�l��Q����V�l�{�G�%3���[��&B�V�v��ѕ��e�!�j��o�!�h��E��f��w%yx�����砵>�́�.B�il��[��=7�ԕo�)lr�T.oQ���&�{����9|�C��4Ke�~l��1�-h�@�߹�^�J�b�|����]���6Ѻ�H�<o�W��.��
+�ָݶ��E�v/����s�#y��GO2keV!�⯔p=;amͿ��-�b��-��>n�6���^^�	�NO�+�VrTrR$d8����SP��l�q��/�ʤl�l�%�	h��|�XY��$]8o^?A��
+,k5j7�)͐�	�%��%B����BM�^*�����xKǎ
���.�붷t��|H��[L��0�I�-���Z�[��xo'#g��6�=�4zF@�]�T�[�Z%��{����E�n}�
[��֖Us!��m�d9|A>�!���,
+�uq3��с��1��E����i.�r�Q���/���̊��U>׶2]�n�&���^��t�Ŵ�IsSGT>>���~�h�fb?x�A�蘠^�����;xl%����XӍ$���"X�8k��@��;����,����K�=~E�d�24mL�DsRds�����'mX��{�O�ˢ�O�9W`�'5B�
c�Z5$�ڢz�R�?p��$`���^r	K.
+�5���X����X�fmgw�Xpۀ�������HF���R�Irk#�Q�ިHCN��C�H�Ǧ�pma-�W&|���;8��*��~i9�ƌm:ˎ/P��J3�R8��������V,^�%�׮wV��$ВpE��W�w��"�y�l�.s���'����]�FS��L����kV�	X�@��=����W��ci�@y��|�M�eo$>��Y�VߤjI�}V�Շ��
[�H��-�M
���L�	��Z�
|Xbq����He� ��
���BSkE�� e-���Z���2��=`">a���r�R�o�e����UոiRJ(���mi
+���9��m�E,�����T*P��dp$����s�z٦RQ!s+F2��D	�K^��uX�o�j�{��S�s���q�f� %����[��-��1���uΖ�j�;�F{
+�`��c������u�j��Sn���j�{�U���R���K��ҝ)�[@���O�=�a�����i���g������@t�葸���>S�t6dG�

Z
+`U_��ٰX��y赾:y�vF�JV�l�۴��K�3���P���/��>�C-��֠D����`6�#�|k�:]�n�;�=W�����BE01D�f7)lV�jp\�3!jq��AD�B�<�;�$.��>SD��Q�Hd8��xO7&�m����1T��e�=ljG�
�������辿lu\�L���t�3΋c���\=l����/xo��ĥ��~׬�u���ѽEL�̦�?:�&��
+�ޟ���Ɔ/^ף;��-2^�/C��]I�v�$�[�Ph�L��1�V���A&�~���/���:7�S������g��}ǰ�h���K�
;6��A�]A��\JY��W�?0���1�a@H�5�U�d�?KJ���
+�y�K��I��b{/�o��v���
+�����d7�3���h�?]�8�q0܏!�t)��S-nқ��_�ݣ<���)���0d::uA�����f	�[�gپ�&�Tׯ8��D�G1��?��uX
�.�ӟO�@(�)mg�_a��l�",'Ǣ���n2���B[���|g
+�'5&�]�p���������%����cS�u�:��[��gO��'�JJ	n���kB�C�
+5&|;h��Q�i�?�AW��>_�������}��t��]7;�6�%U��w�Fٝ�-� *&XN�0���xm�HP�☆k�f{鞋��&_?n%�š��jn��P,��|~�8U�ݸ]�����fs�xhG��3��Ajlq�t����uR�G��uϘt��t��S����Y��+�ޒF���y��7��ӑ��@�K�ktNÉM�gv��(�`hX/��<z1��VH$
+XRC���0�����{8�'��#��$j��&�|����̡E�c������Y�B�}h;7���z�K���f>�g_��/d{hay�<DAf�s_����d�B��R<��Ӂ{\�x�8>���J���|GVh�=�QYȊ�&kIEa��ȥS�! �?��[|簗���K:ZJ/�:�0�Qw�D�Xm�Av+��s�D�O��z"�?���v�n�%7WDzZ����
+'u��#yb��֞;\%MŒj#j&	_����GsZ܁�ŋNЖ����)�1����Qt@w��`�O��{�8_~��&���'�`�\l��D������"��SK\�1Vp��#�a�C�A&��ށ���ͳ�Ŷ�!��<xGe�b�O0iH/����J��.�EPf{��Eɂt� nޙ#�!4dP����=���$�R70ti�#�J	�66P"�]r��	�v��A�����ۓ����/�vZ�0i�~bw�>�d�\���6��5�����l�9����Z�:&r�\��ba�6��38C���-�N�����pT��
+�{��r�J�j��?�	�.�X����8�_�'L`����X���ȋ�H��jogl�010Dz3~���	-�rA�F�慁�]�%�v��ZI���p�G�@4��˩vfaa&��LKkʫ]*m"�=Y�K��G��f0L������-O�%�}�����y�mq�.�5t�I�N�4����
+��s�Fߏ�;���{O~m�l��mO��0��̘xZ(Շ�~��s�/�J[�1j�S�d.jG�TH���_
+L��=$� ���n�=�iy�4�- ԝ�i�,��d�de��� �y�~�k�iQ�ؔUyCū�R��s}���uM���#�Qþ��[��U��a��hs�����|T/:.sɰ�Ķ�#@�[�_���ˋ�3��VQ@1���W[e$hR���	��>��_���w��S�����u=/��v��������\���o�f��+}*�<5�h�����GB/h[CHaI[�w�ϛv��2VB�0\H�b{{��x\<O����"?���Y��_&��$<|\H�д�s[�S���}�W_��*�M�/��ƲR�����	��)%}gF�ˡh�C	a۩��Y���h��K��n�3�J�+}cR	�ځ5ᇯ�m�9�bUe;�G��xV�7p�� �,���o'x_��b�o:¡��ִl`��ֶ���Y��N�T>)�F�-��e$
+0�y�B���"N�U�Q�=5�D��:m=��e{I@�r�F��xP(U����<d����H�M_P�T
��]�Gëѝ��G�+A9T\�q�e��AD���J�dpa^�/�����V�R"�E��d`�G���)���tmv��Ѝ�n
+
+�b��ؐ6�x�q�����c%TPBLĜНm8p���ϐ�^y_"o4X�!{��6M��x-T���ۨ�4x�XR4	�r0����5f�����������پS�h�Ѽ�ЖR�Ӄ����a#�Ř)&�m��xu݂ʫ����6�d�-�g�2�����H�]>ܖ賀� �I�7�35j�T�$EV'�1��\��Z]����*^+��c#�F47�C4w�&q����hA�8氝���[�?0�;]����~�'��I��`/��oD���g��)&FV�H&d�?�����$\a��1T]%kEO��pfh��A o��*
+t��;����8�
+�@�_�ܕ����
+��`$��s��SV��[��P���G�?�*�ꁉ�q����	�8��<ԝ1�=X�m*�A�C���,Ud��D���j�{ݚ>l0��f���ga.�'[f�N�w��f�,��M|�Z9t1�������,�
-���	�J4ES%�a遉�9ڑ�oT����k8���/@�I7��!��N��-�A.�Ջ�o�I�l*cDa�:XBGm���Пw���{w��l�!n@3����x�a�?��EF�F-��Ɗ=
��hYZo��1*a�Q��|̎��V��������GkS��������_6�O��A���Hc��n,��!#z	��W4�񾘃���J�m���׌T�ML����8��������`jhI�����8p�̸آ�ڀI�(�,'�H>4a���Iџ�h���
1�[~BW��V\�tsʓ!��^��.%._�A��īU1��{q��ϢLϺ�Iǀ�j�{���O3���N˷�Z>�Ź�e,��I���e���)�'�o2��DP�ٌU�j�{�|�e<���U��KKҷ��d�c; ;�"#*F�hb[A��v�ſ�
+qq�g&1BA����U�D�����B��P Զ9Ŭ�u�--q:2w�����Jo-����1���Ԕ+�Fd�(����N�
��9�.�"`��*�^N���z��Hg��t�h��d�i:+W��8$&<���M88��DZ��c��*��S�(j.��!�ѧ�����M��Gr}�]��L��/��0��s�DP�����[+jX�i�?g�M��c�Yt�D�!��O�]��\7ŕڲ��@n�d���+{��\��I��4�\�1�#/D+��e����`��E������1��o�q\�~�Z�F��u�GN̙�������K��1�q7�pJ�^�L�=������(���K��ta�lZ#pV����^�
+�0ڵ�nj,��K�K9rl��ZU���7��U
+��ޯ���
+Kۖ�at]��"Q��
+�R�u�[��7?VD����ɀ�<ٚRf-ZH�x#d�*����ȯk��.1�f�
+��8�εWEUa=Fj�!��Mv��nU"
+f�huĬ�ќ�o�D{�#ȴ:s������C�����������-ˏ��@Qˡۼ�.c��b�*OQ&G!�,�Z�x��~�H��w:bK�P�T\*\�yخ���{���%�c����ʚ�F�]��E�F}�0�~�)��!}Q��1�uJ�;��D�N|���pz=Em>�m���P���u�"t���:�id�ޢ�KҶd��#XϨ<3�Ɣ��镀?��فګٷR�v
�X��1i^�zs�5�*��g��Mr���w�qI������|R�o��Л�RE�����3X�쎼�B�lI��rǚ�ŇV�o97��"wY������^��������&��2��Q�<���>Ah&� �!�W�&����Hk��Q��0}����WXޢ��ޗ9��Cx��e5ݵ6�����I*�9;g$���U'�W���!jplh��Px�K��3��ge�>ä�^��1��.�'��u̬����9$�+б�죎��Z'����D$�_����<>mb�Is�Y��C^�w�Ї���
J��w�H�SY)�G�Un��N�#}�\�'��Ƹ���m���ヮE��ŗ�S��D��^�ɘn������M�Z*�Ϻ7f$�-�$�3o.��>W�����9�A�^7 Vb?�}q��]���;-�6m����	���2z��7t>
_���FL�PO�~��\�	�,�x����ӂ��*�s\-�d���":!4�6��Vw�~�j�^��@j�7���~�����1�В$
+8�K��u��^&��Ѳ�|���DC���~�2���-E��_>a�?���L��
u%k9Q�6&-n����1��mĠy٠�S�a��5��-
��?,��Ĕ���_��NE��yi�̬���9q�Ve�k���TCpʠ^��h_y	[�G.o3�r�<�)h���,�|�/5�ֹ=Q��W�^���MABA,+�̮[�'M9�Y�ʱZaĘ���-'�JK?"�����+�BN���c��^���aWO��%喷2��o<9a��:�Q�!m���v�@��o��qu(Fb�O�t�]�y�&6�C�k���A!�07�3Uv���c�z �+`ߒ��Ym2PsE=y��\T"���x�8�����+���	lI�������Rs�#G����q��<�wDΪ���`�ݸ8F
+|�s:�Mu2r�͞��Q��M�m�m�7�"�wK-��j'=P:K�@6y>X��z���t!�zO�fD��.ڏ3��D���Xë�z�e��2�o�Kk�KaN=�,���aO���ce ��SNg�6!��x�J�q5���t��f \��*�w��5��@;;2E�%���ָ�����xG�"�7YȆ���8��7��Mɍ���3Vt(��J*
��lj�t+�_�2��"�>�[���F��:!T������K���zZ�Z6"�s����!�li�
+��s��ua���_?g������eg
�ֽ� �*��i���^k?���>��vq_��l(���@�q�5�����j�o>[����1�I�Զ�E�.]8�H0��E�p������[�h�2x�Pʛ.��N	�}]Ņ�\��E�躰߷��E��4�ZQ���`���_r��Xz���N�1������uF�:w_�����t�R�,��u�����L���r�M`d=��#D��k��!�O#v�h���q�u^���x��b�#&p����C�7Vg�z~�۝ d[t
��-2q�W}%��R���3}1�8�|j�������F/��6��Z�n^m��-J�"���=���`��t��J�[�=��>~*�/#�F�����6J$G�4[�m�>W��ImJY�j���\‘��U����K�^��5&��v|y]�#�e�P�����N��Ԝ�P=*��D9��f(+�/d5?{�wkQF4$�x����p���7�㞀�����nk�
+r@�Q-�c,�IGZŖ�)~IOӟX�B�)iXY��
+@���I���l��]�bN���0��C��̥���醣F��כ^Z%�����Ō��"��E��?�fQ���4
�x Hp4l�wk-.�X�Ĩ0�θ^��Ϋ4^RPT���	�3ռzL��!?c��+&�i�S�N�GB��,”p�4�L��dm�HYjD��)R�6&�����׈�7����w��0E�������
����֦����Y^'5����r!�֧[o(ޞ�lhv�cT����Cǧ{i��)5&��f4�u�=L%Ӓ!���Ԡt|ѥ��]<����)z��M��n6�{:�P�(ʗx{O���`HM2iʶ~I������W�ҴZх���h�����:�c��Lb%]�iI��C�C���y�îL��\5�u>A��f���*#o�����r?*�Z���[�бS�T�g��狤�UZD
+��A:*&�s+�� V��8��?'/�t=AN@��SA�B�uuŽ�c%.P����!9E�3CZ��O�TD�A:�)E�l��Y�>�������<*,���Ep����. .68�@�(�p��X>�0Y5��C�M6`qi�,�;�q�Hɗеxl	�I��آ��¨M�ɽ��*כ��㏪���Ҹ�̑���Z���b�S�d4"5*W8?N��e�t����������,�E�'u̓%,]P0�Hn�௖�87-�ͻ�(}-��e���jh�G���<NqE@3��|����TtiV���*��x�ؓ���0Fـ(�;�T���l^|��N����FOFKS�j�*j�}���l_C�pu�2'�@$��~�Ef�K8R�j�D��}����8�<BvVx���@j7.l��LF����3M�OB��E���#\�x甩���T#��@���2YS�����i��UW2�2x�tbj��J/V��$�����S%�U�y��l���9qt�����֚Y�l�D/+"N��qwnS��}�����]�����/y�*G�k��M�-�VF�(�~��N���v��^<�O��}R��q
d%'�S�#�����B'_��@�][�(�
+�=ñP�`���k�\_<�M�Ze��hi�Zm�:{�b,��_���j�vӧv_t�� ?�J��%�|3�<f���4D���0�������6�(�Q����L�ע���� ��R\�C~��~�1�A7M>�)�b��{d��V�Z`'�w$���.���
sV(f!�=T/�E�q�A��&S�]�I�S�7�IףP��й0T���Rv�_9(��zik��C�#S������4-������(P��vSJ��q�1����/�I�v�}��Ι�;Ʃ�K��[��M!X������E����]�uȜ�Q��9��B�/ZZ���a��9��>�h�o�ئ��#Y��s��j�OQ�����Y(ݥr�nx1
�Dq/A�R��E���<eۍ�FfΪ��g'�-go7_�.F�n���hZ?1���y�O���-�2�<B���)_�v׾m鿟a�8T��c(�/���N�/��y�L�G�m�����H�z�tm��$�k��
8[�9�"2p_4M��]b�v��� �hJڵdt�H�rף1��iu�0y��_���;�#�����j�?kD\�{��SѬ��E?��XItWb�8k��ۋ+n#�^�7�ww ���@M�==F+�ꈇrh�� �ƭ������b�D�c}��*� ��U�p��I�=i�[�-���̭��p�;nB�W�. )��X�,Ǭ~b��t�T��|&'d���,5��}%�+A�ƿؠ~�]T<??M7u�-0��6P0)���6ljo��F��U۸u"~���3Qw|��h��TH�eb2�
��[�g�M��BbޝVV�*V
+Tq<Y�6�+��G�kq큉V�<j�e��^C$�fU��X�ho�W�����Y0�b(����Һΐ�Ksq�\�:����B���{覀ۆL4 ���WR��׹�L`�9Kσ�����,�3�}n%,�ٗ����}{�>��QAC�Gq7-\X�ţS��;�\8�z�M�j1�������RSOh��H�޸(^ڗ��܍����JE|��$��Tc��<@Q��-8)�PZb2��@��)��t��a�WkFl���7�
:�0����Wd/h]Oc�5�$��u����˙vy���c�;�F�e���9���j�8���+;:��~�|e�SX�8V���r��Ej���\��p�׻וo�SG����`�g��eK��Kռ&�������:�pdXo��L�?�k���~]=N�2�[bw]��k��Z�U�%_��s�w�.�X{?�j�92=:�]�(�&��|V��4����
.�V�vE�$�*Ȏ
+�BMY��g���i���&�t9	�i܋��fl�߯�N��=W��x����ߍ08tĄ�3oאw�fZ)�n;�<�??��	�e�m����<�~�|�š���fy'左Q�[�Cf!�uy���Y���`�pe�~-�VQ�[���%���=@)]��Zh�����_/r9qg�|�C�5�I~װȽ�v9pi�5���E�L�P��l���O;h���ᓻU��6C�[�l�[���޿Wk_i��:��<Cw�L���I9���h�AT�Y��u�������l�ÏBt[,P,Q\-��3ZٛH�vr���
+<B���~�U��?�5�*�:ڗ�R_���p��B��X�G"1������ݘ���m�U�3�Zy�a���R(lL�����=2�;����_��0��"WjD��AA��Ӟ�w06T�Xl��h�
+]���`���3Xb��H�"Wa@a�������9�Y�	�e��O�FĬY��
�0S��{`3{P������do��o�����Lӽ��	w�jdG"����>N^��4��1(����kTj�nҔ�Yȇ��i/ՕCHAڪ<�x�Cw]�ف�g����eؤI[�*�d�Oؕ�'j�U����!mq�M�,:���h`Ν ߏ:���XMr)k��m��ϰ�dcS��)�_^��1<����.GH�e*ܣR+��}���g��Pd�a�v�A,0Z�#�~R��5�\�x��=P��6��"y���GO�4����^���!��Z�֩�M��`�yWצ���4��Z��m�7(/�c�g��������}�;�D�����-v$�t�,����qD/�O�%	�rV�G��\���i�x����d�eMY�z��������:G�p�J�:l!�F�3�:$��0t1���\�@�-e]��7��E|�X���\e�ng��-M�BDh�ur6 ������
+m:%t�L��_�ҩ}�[D^�C5���SՆ0pa1�c�Þ_��%��5���P6�C����t��։I�;}r!��X�P��f���@t���"��!��݊T0�<�\` ��F�	�Ui�FB~��Êxܕ]�1ד7vZʞ�_v�U��o8 �����ᓽ�_�ٕ��z�Ah���B0������2[^dE1[X�z{'��
l�?F'�* �v^�N��0��ڥ��`=�q��/=�����P������g
+�&oq�Ө�F�!�?S � p�h��ª��U%R���_|}���T{���3r��O���_�Lk	�V�wjtltB�/J��#>qI'
+�vY����+|=UA5�~…�겳��hX�Yl��W��$��k�9Ya�ɛc����"���#��P���*i�d
��u���Jȿ�"�?��f5�J�����o��3�o���5\�e�%J�ֱ�)J)a����o|����c��1�������@���?�1�Ai��Kp��k�/z9%� �C��R�P�Y�87��M{s�iq�&ǡA{A�,����7�3e��P��0f)n��j�X��M�]�U��L���^�7N�#"0�����kǦ9�e��:Iv�*l\޹3��. ��8����N���0���"�M���F�Kc��4�$"�?Я�D����0+Ua]���@-T�׃/a�CQn��{X@���(��4DS��	�eB
����t���O��T�5l&#PC��6`Mj����;��E�! �N� |�o&�lJ�:Mf��(��a(q5���:?�~��CG�p�]��iD##��]D0W��!ݶ�)��+�M�����W��O*Q�tT#,����B<��C�Y�����=t�r�*�s���k$�5#n�B���e�%�D|ዋT^��RW�:��e ��K���-Ӊ��'�+ܸ|||�#��Ã�tgv�lZ1�u�mAe㒪T���گ�:�!�l���c]��仈��)GEɡ�t�Ba[bd�g��!��@‹Jb��B�k���8ZӺ�K�U�|�)b�
��5��e�?rq��l�E<|ufT�_��YA"�(:��A��+��6�C���j/)?���Ј����Sq1�E��
+2g���6M%�g&ڂ޽��~��H(v>O�/��J6qB0
 `�F�Yl���t�yw��o���Y�F�bѦ��9N<�J���LRZ�IX�D��bT+J���qw�pk{ِ�Z�v��dI�����^��X��0�Z�,�X��)�>=¤߮?���o���UQ�U������l�JO���'����.M�qi�U��,��+��ԉ�-�x�A*o�oA3�O\Nį�<�����#�9�����}�|�V�g��
+�d>0�3���.��i�f[�nC�o��U�]�D(��{Հ(!���ɋ��-��y/���3z�Z���V�?|M��i�b��?�vȕ�5R�j��1N"�G����ј�8��u���b�gH�d
��S�������* `P�Yw�!��߹�7u��#��ڎ�T�`�G��
23��S���ꁘ�L��F3��Җg_����@_��=��#
+%��y2��aƓ�p ��odz*P�����
+�=�;��qw`O���X�*��LR�N{�~���޲����&�>ZIYt
+�ɴ:�W��g�	���H+SF����L�`��+���$�,��ڨ���/�ɬV��\�PK���+h��*5z$O���[d����3l�Bx����_x]V�hN�`�����CQ��F}�*��h��JF�1���r6���mT�!��7�&�
�*�4s�m#�+ �b��ef�T艶��eJh�S�=�,�!i�q$ݴ�|�&�K��k�)���(#[�N9c�������0��S �=X~C���(7���x��@�\	����k����oc�>�_��sGm���S�:�W��R�qh�[E���ac����TNv�~���~�L�$N3ix��s-(b���3�A��r�_/��,]>#Uu,�ؽ����p؉p���T�JƤ�6�F�&�c�C���s��jB�R�"I���?`i#&�����Dȧ?~��������+�{;I��p�{��Q-Q���X�{`q�ц�@��"��Ƒ��s��s_.x�x���
+8r�
��Ku;FG<�K�$a�w���Ѓ.x��e7���˦�[EG�^kz�M��x5bHEg�'���;*|��9�U�K��ij�L�P�Գ�xJ��Š�����r�˒�N-se�2�n��^�`#���6$�;D#�ү;V^����nH���i��Q������Z��5��j	�������ՁKʱkU���/q2�o��`�&:�3ښ���=i�Iy�Hg�Ls\���[�2��j���y/��NMj\@^Z)�d�5fFՙ�t3��<�d@[�wo�8��Z�,y.�
j��j1��z��W��Dx����0���%}�.���j�d��w���@��ַpwR�D9 d�VU�X7���;�Tƍ�V�z��Gk����k�n6��go����J����(P�����?��e�.��T�кon�D��).��HY[L���h�"���u�u��}.�T����r&�,�o�Dw
s"�u����N�\�^��zВj~
+��L;��E��1����:Q@��8c����霩˼�3,�.쏄3��M.�啔�!�5��m'�А�ѫ:��de��U�R�����vz�����8
+C��s΀���wbT�|���S�^�*]�?���#�f��l�)
*d�u��ԉc��5,#����Y�M��qR%SP����FUyD�2_��[����mY�c�'$�h�����ؒ}M=�7�����{r}Y��F)����D�<2�7�kڞP}�-����M��M���M�Erzt2������@�������^��e���oOEI?beZ�O��L�a�oɺ	_9����
+����RU?|�N�F�]����"�3db�ZY��eA����eo��
����E���ѵ��'�gw��Mr=b_�L\Lԙ���m�G�E�i��{w:�Gbe�����,{�Ǔ8����4`�c����G��)}�c/I��5�eD�	�����e
?Ԧ9�	1�a�]`D:���*�u���`e���|�7t8��˿����|�=��;+��c���B<>�Ũ�^ۍS��p(D��Q,��^fD�+M#�⨠����[E�LD	}�dW�0�hz?��|Y�˓6��s�ћ?W����q����,'(;,�jG@�K�L�شy�v\�5<��ǤW�\Q?'ބy3y��~������uc|�F��Q��6�-�'Σ�$
+m�c�r��f���1Y���{�|�#�
+=M'�l��}qֺZ��>�W|��1M�Ve}vp����q��Ժ��If���-)�Ge�e�WL�k�:�����=$�I�O���X.��L���Ȱxg%��:
����ְgl����~�$�̎�
�S��H˚]@�'�EBv�GgW���:l+��iM�m�G��Ȃ?�O){��؅,i�@�f�[�S���(-	���n9K
E�TLp+�c9u���iPl�Y ��~^�C{�e��i��:�E��]��zu�]����P���aі%��iR��ۈrO6����;!��?��8�vA0��%VpA��١������DV���s�G�}H� �JU�g�L��	��,�S������>h��TV9�a�Y���:*
+��u��+Xݶ���kB�ā���˥���Q-���!_�jR�N4��K7���Tr	io�#Y�U1������ʞi��[�#̫�%�^�E-R:��=�F��*�Z�{w
��`��ʒ�$�K��:���Y�,���_�| ��.R�t���+�BT"�C�op�(�,O�l����i㠖:>�oҩs��&����Um 瑹����q�n:��آ8X�~0˧�yɫH���'͉(��vF�ح`S�W�o(�۰Dn��٪ɷji�OHO>�b�@)�#�\�d�=�сڤ�˯r��:�"D�bO��"����I�.��
43
�<q�r�l��B��Mœc�^����g�F�יg.�Hic}�����1������vqrn�J�9h@G:nM~��}�.�mˊ�LY�u���ݺ��`�����l����S'2�L��7.M���0L�gDkYW
+M)�
����(����qm'A1^(/�(lC��7n4}�$����z?G�*S�~�d��7�=H�M����k����}�
�J�-)���K�.OG�^�L�QL�n�#SMu'R*����(��d��,p�Y��M�+�.N�(��ݛ,}���^���H�ug*��_d�������1�ws�T4��{������.�B9���fV���dw༲M�Bb� {H\�����ؚ��`ʕ[�n����cn�s���La�\E0�j��C��X��n(U����ԇ���l��O�e�gq�om@�G�)�4y�@���ܹ�v�Ty�v���dC��S��`�o�:��$�ׯ�z
�(�͊6K2BH�!�H�&��u�葿K&���h��ɃD�~���Ū��rj�J�9��&q���������D�޺�љ"S|㳅S�jV�<�[ ��;�),r3�IL��8g�9y:��۱���=�YU�鈔�u~M�[��[�$��m��U�J���OO$�f��*A�FR�@��g@�
&
+��}��̀��r�������uѢ(:�=�m۶m۶m۶m۶m�����^��fR+Ieם����KW����E9f���ه"��e%8֏7k�ҷ|�"��?��C�@���=N2.	m0��區����&�€&����xH�A��K}��Sp�9�F
�i��T��[����zZ?+�./U�.�M�WRB�t��䫑��|<�PZ�$5I��ȓ�v��~v2���d
+�{�����;*����'Z�ݯMZrJ�p~n��=+*
��Hl���?�_�!��
+�B���x)J*���/���L�o%�k�h�#�d�=[.���a����9֜s�m�`~��y��?~�~���4��$�L�.��h�E��/.�m9�m\a��$�UJ�B�؞��N��D�H �&�f�PW�,�–�`�%(������P@�	-��<3t����(.s��l�P��ZdS���/�袤d%�Y1@��n��s����gȣ�UV��h�!=�CE@�z�p�%d���p?`MuB��8J�6�+�0CU���CGG�.�v�1���{��v�o֦n<�E�C<ahf3j����MW�!��sM%b�ؤ��#���l|���t�q`�A-A��֟f�#���>�OGk@��W�?�9��]�j�Q��Z`l��G�z�#
�vJ�T;�R��3�J�֬n�������{����B�D�s���p��Ieq�o�c�>�=������M�H�8�uIv+"�o�~����9��˻����-�s‰�H>y}/�b�01���=�mT�u��$� U�lq*��jA�.O���J�^	���Y��z�����U�[Au���p�+RJ5�$f87Pt�"���/k�Ch�	�H0<��W��YD���O�Ā)��B�C�"�"���!3Z����5�c��:f�ʵ����Y��E��*�X�?���B(s�A4a��uj���j�A����a�N
����0�80�1�)M�o��$����Q
+�k3g�/�
	x��_���P�ǚ���VW�������Dr�pc-��qi��ˏ�h�
+��y~����\=չP`UN틩9W#��E',����3|�4'\����:?� .�&Hv���d�'ŏ�CTy|�iK�|)��(@E���@��`�1�&w���W_��X�Y�?�����Zn�����wLF�-������-^S���Hr]N��4׎�֚o�
+(��+�/�Y�*�5Rޚ�dNe�H��no��5� ~a��.'��"�s�����xͧ�A2���㥚���zA]D���$�';�\�3��t䪾�J�{w��0rѮ$��C/<�!"�	;.�D�l^��#@_%4/�W��9ߥ71سQ�@�؅�Ȧzne̫�/ԕ��5ɯLL��~����o"(��e�CG�ҕi�&)�~������T�@޷�W	&�>��#�W6�ۋ�0*#YE��o�L$5R���JI���q�I�0��zm=]�M��m��H�쇫��-k�1� ��4�ֹZ��8�o��� �6���W�/���o�	#(-K
���Y�/��Q���A�{+>�[o��F�#�+@�@A�24?J���f�O�/��8&�w5�E�Q���2��'S�.O���Ѝy�;qnf����T�7�l�<�>�?����1v��tHnLN|iĔ�S	;2�b@��ۏJ<�kl��RBY�Z2�,�^@�z����»xz�싺��>�Vk�iM�}?J�,
+��<= �w�}�'V�ꯋQ��*S�GyΞɣ�8��p�gRl!�O�ג-��i-�|��/Io3G!ES_���P�7l>q��v
+35e��c%��bn;���eM<�jA�a�OJ��q��7���k��D�%lj_�������s�u��ޥ���-���c���w���n���Q��v`�^\�eZ��LG���W�W٣���PosA�����fu^��O��}�
+oOؐ]�-��';���CL|��LJ��ڳ���Ȭe��wMS���_���D{���.vx��W��~��o���Ƌt�h��x��w�(��̌�`a�7�OZ�߃��7��t7�],�6��9O%����k�+�^
+���<ÞL��s��~���.��3Dw� ��2ȫ[ϭ#<�T'}��f(.�Е�ͫ�'k�g�sk��$T_Z��`K�����K^�hpo�Yv�&\@��e`w����v���W��IR:���0��f#��/������i�Sb��FRG7�E���,409]�c��:"��OL�(ϵ>��k$DJ3��-A��إ�#�\��ng$@DDrۭ���\�E�j��[���Ў���Z�O�1Jq�r]��h�qm6�TftN���N�^@%4�"�
�Q8BG�����B����s�{N�Dc��
h��)x�K(���@�ל��|G�(��G�v�u�	2ԃ�+&�ȥ���z���nK0���^�S���$��Œ�%�S�<�J-+.���4��������k�v�%I�`�A~�W]��w�m�d�Ե��vcC��Ÿ�WA#�E݆��|-��s���v��ZQ�p��[��܍n�+���F�Q~����h6�
�W���h
+�]H����$�S�m��s�_yĭ�Ν�Pj�r�
S���bYB�{f��fH\#��g�[�k�㾤��
+#��A��c�����-C�]��D�I�T?,��K�OR%v����`m.�j����7.�=��X#��?��^1��.
+K\h��h�ᒂ$�r��=e��
+�����Ӹ>�DA�Z9�����	[}R������$/��8�d�`�E�/L��.
9�$v� ��)�P4��	���n)܇���r������m�(6P޲�E`)߼fG��H�L����N���0,�x4^&CV�a#ۦ�@B?���5�B��!0�l���{]�������[sYIjd�Y)�1���cHWv� �#|D$�j#�+��c"x	�k�.�I൐�w�s��Aoz� �
޲�@*�����a�4g&�T-~0�!�4Veٔq�!Yx��*�x;݃�@�h���&��	n��̒�|t�nԕ��e�7>��Jyn��
+�GC���C��%��ӁNA�DIsZ?ؚ���Q��*��t��j�T^J��=oX%��\эH%R��.�PP=��}ޗ��h
H(�2�9E	`����ޱ��=���\�DX������F���Qf��X�B�!�ǡx^PI����@�C�
+J�L��"�)��'���a!6��ыo#���a�����nGb�zt3�
~{�ލ��DZYbu؏:'�s׳��j��ŕ�-�%fh��mU6%ӛ�qח	�����Ʉ��n�(��Յ��o�E
+;u�/v�$	��;�4;e��<������i{/����Ѹ�����.�$0����/��|1�>i�4E��Ƙ�U���,}m��Y*��.��oل�1�1^Dwtjѻ_��*y�(����72~�﫤�����@:�ʀ0�7�$<0As��;�g�����N��0���L�n�Nt-t�s�²-A�9�/����z(��)���SE�YgϠ<jmP.]w���I%-V���m����	�ĜW"�T�%D��4'&����q��E��c�u�OM �H�iJ�X��tT�࿏��D��h���@0�>�p�Z�ZʖM�qS$r#�OUV?"��h|}�gC�G�/�(���R�%��B0�Z��g�������	L`���nb�)��~a�k�\W��s�r(�*Z:,&T^#��I-:����j���*����H��QҚ�jSI�g,r#v�6���w���E�r�t��*���(wX?�iU�Wr=:vE��nb���E`��?c+^�[����ܟ����D�N�'��d�kg��I�g=a�����$A�j���f�d�i����g���A���].��������JNe�s�����_r�O#��Ss{�k��7	�8�2	.���V��,+�m�S�]��]PHX�՘�1�:�2�K�m�&��S�莱�ؘgܱe�p
+�Za������`:�d���'���&��� ]�ǧ������z	i,�i�=G��{J$'�I_���!�L���z����-�q�C�vNl�r�e�
+U�ʐ��W��?�3�w��ۋU(���jhJ���������@>I��gi9XtPAd��ʾ
+,"a�܌G���X��������֮`�����6mA�'��l�	`��,�3����i�f?G.H�S�q1Y͎�]�x��p��L�r�]
+􇫸�I�E���3����>Ѵ^.�鷮vw�fU�]����0j�w&���M�%�ڡ�J�5u�.q���ҝ�uߞ1��:�F�������ٽ#�$�%�k�e�!0��g��	����������C�����Z�ц���du;�6�c�i�fC�o�t�vlq�Ȧ4w����Ta_h���+���j�u�k	�j�UiAYm�<
+UP��U����X=|*�@y�掞�n�8��?HQ<V�g��
ңV�K S���
+����pN������,
+�6����4W���:��I���B_↉7�4��>2�=q@���h2�P��>��6m���t�z�ݏ4b�Ls�����	����|���yN�%�`iu�����f��&se��GfUv�ԧ�����z�^f�Eఢ�fp���#�ـ9�]A
��U�_5�z(�.��<��_y��H}�s�>ջ�J�{���0�5'�IL/�X��jiT,;ԯ0�������
+�K��
+D��/����S�������:۴���j4��V�g��<J��'�`���t��$<��5.����M�b6���4�����U���bV�M�~{m����'���~e�����
���@ԩ�Z������}�7�\�����S��h��"A�3���9����E�����,�,Z
+�P$��`�ݜe�[��,o��,U���P�E��u������n�Vz����݆��Nyh�9��C�"QҀ�5����!q�^����>�{ߊl�4�h��HU�+�9|�<-Lt�~��,2��f�8����9��Xt�$�g?}
+���S��3��qFVd.��1�亏�"ʹKr��ă[�>�J=k��1�����²9������#�
��Op#���ac��In������3�9�-�.d��tZ�s�}2�;�'�-���
\�h�Dezl�8P���	z_a�βw6G?6n��|�p^~�������[����2)[����w�Ύf�����$�8F�������jMo�'�w�������A���n'�ㅢ�6oS��Y`u�Xd���K߮��������J�v_/Ț�1)&�b3���ON�3�I�I ��NE|2�@lƅ��w}��3�N��wK��c��Pv������>�.RLI����?h�ꛖ�_E7
+���hq���.셶����~��d�vBa�l�yŷ��r�*��j	xz�UL‚\le�(>�a�g�$��m���17���:�џ���L��Q�~�آ9c*ٳ)���L�l˩{ǰ8"���l�a�^k����8���V˴�8 �H}�OũO����-fXd%r���$b��6�gRF[�V�qB1bc9�p96�?QH��LA�	�Y�|�騄҈
+'+���	W!*(�'f�������k�nj��M�/ߌV�܆',C�=\ص>:,Y�#��\�3��XPI���)֌ڂ��E��z�nrT~%��z�w<���т���e��U�t���4�$���Ȕ]ن�;����G��M k�x�D1`"�]�C3;���Av{��Z1r��.�15ܗ��P��u�^�����̧]��F@�����D%Sz���Ǟt=�P&�8�XQN���j� Gi���*���^�[�*0��֋2�)jz��^�8'���Tƈ�Ɏho-�4:���([�]jN����N��1E�`�l=E9��R��#�ޱ}R�
��1.mؤ��*˺et}T�擒Fw+;���XA�A�u/B��<ړ)�����B{I����v�L��<�k"��\��q�N�i�g-�x���MUKq���Հ��hM@"l�a0��M:�j?A���r�bQ�B,����"��ih��CƎG"��������]���[l�׶Y�
+�词@"&��r�I���8B��Ȩ;���[E��3_�(�ķ�|�.�<�I0~�V�'�����2�s3�+�f�3����R��x��7Bsv��X��
+8
+�w��Ζ�� �����Y&߭�_�ie9�ׄ�W�|��-pr����>R��Y�<�ިW.�Sˊh����_�ǎo~�r������ܾ�a��{����JӦ!������멟�5��Q����W+��*A��DL���#��L�uu�5	T�R������G���6��DŽ���v�TH��,|\�,]���M�KI_�~(츄$�i?Qo���Y;P���2��J�ӧuF��QC ȭ�Rz��v�y���nܐž�:��ɸ1�(-�i.pIA��U��d���i�N��>Zk/�
+W�m�1`��Ĉ��7/h�F�w�[���*�Lyo2���1�BW���pV�	�F��
�]�fS��ی�I�b����ER*�d�q9���Κ�|�Sq�_�:V���n��WX����@6��D"|.}��v�a�Fn�>-�fW�ג�q���Z����L9c���J���G_����<���>&R3�rs�7�$�[1��~�� gr˵�&!{R:^����a���t��3f<��V�����#�ϒI�$M2�H�H"�5s�Y�t�DRՀ;uyP?����J`�c /4�j���>[Q�[O	w�-qRu"�&Lܞ]{�^<g^��(p>"� ���|���
+��ɑ�KHw��h�t��-b�����pc�|�i,,����u+��ϙ����,�-����o��G�tU�Qߓ�S�Cm+�l�r'{���%t(�\%�	s���V��n�M��w�5��<�F�����2rZ+����3jE�Y��zg��;ۦ�Ч��K�{F�6��_�\�P�tT�D]go~��
+�� 4��Y���m�~��\�bL3���X}�UT�c�B�?�6����|��	TQI�$��$4�����(噓5?	f��pK�������x�B̕�Pei�a��ض�٣
+��%S����FDwծ�����a����X�m$��r}������X������]ͪ�d�[a )��=f�!KZ����yXV]l��+	9���v��%��m�bq�Y����M[Fl���a�F�~�3WA+�E $�a�—*d@�HC�%S=��`����R��t�D��deÅ�$��#�l��B�����k<HLj����l�mLjqpeNo�H
�󹁴øX��(�c��ڋ�p��9z;ϳ'z_b�_�uY��⫻5Rq�����$"(z�dF�p�7X�i�2[<W'C�+���L�ٳSԫ��G�3Bv�\hG�7�����Fp{G�IG����13�>��	Q�V�V9:��]����h[���QЬ�P
+�WZ	m|'�o���G�j���Ӛ\*�g�1���옹w�pu�%��-������(�CW���N|G2��� `;
���B���wh��zw8�@��vA�G��倔x�c6D]1E�U	�;}�Е=��Q�߳������܌��i��|�O3�:&���lt;��B���Lj'[�K;�!J�H�y��`(Y�4�S:>��vٰ~����C=!$'w��,���� '�3BMa@������� (.�G������%������_�}���d��G"��պ=a>��v��h %m���t�y��m�0LY�|-�'���Vl>tq(�UhIm��l�n}A��C��ň(�sp^�a�ע�����৹t��|�D��A1��j�I�=�\��p�Νԝs��]	48(ɸ�dո��^����1�ƄS1-��$ϻ���1�N!���l,�D5U/����A�!<�%Z���/��
7�D1`T�j>�w�G_'ȅ�4��%$"+c�v�
+���XĶ���Ѩ���%��:r��'���ڻľt�"�8]�Ir��"��ɶ�9L�?��wކoNczX�U�����(�'~+N�x+J{�1�j=��;Bc�?FĞ�T4E���e�>�m�V�؀��E�{���IB�3��.�s6���Δh��/��f�W�f�����27E��/Yb�'�O��n��\M�7z�?��Ίꐣ�>����4B���F1�1���)����6t^m��<�ŸWUS�����P;vP@��BiXD��LoT�P� �8�.g��C���\j���׭V(/O۞\`7�3�s��B#���?�d�lj��߰��>Gp����5�΁_�4Oc��J$���U��a�=*@#/��
�E�|�GcpA�	Ϟ��\N�.�k@�^L8�"Y�n߽8��ҵ/@F�x�y�'Ь��hF��:�h�3�׿�/�S� 
+��@=����PQ�C9Ǥ*i�c��=!�l:����E�	�2����w|�?��q���
+����_H�4.:\Ǡ��+y�(��9�����s��\���PQ{'&,��>k�+Q�&!W|�檷>Ak�._��˃�em�y�Kt��f�M8z�D�'~�Խ$k�9e��,�M�PYm ۋ�{vAHZj�գـ��
+��+o�)2S"�k�d�����3M\��������joߔւD��T�����v�̩ZI��~W�0�E�KEfI��*Bͧ�	U�FE��%j��2�-u��s�x{��!R�_ݯ^��1�dX"9������‹֝���]�c�w1�wܪ�}�N3�G›?��O�œ�~ŀ�h��v
}FљM�nKN���.��k���U��av<"��w��_�W��f4<���#�"h���(��z���8�bAҏ`5`|�q[�7\{J��Fn�x�%�P�e2#[T�/�6��4�� �u2z0TQ�,�H��tvE���t����0z
+��c���ʫa}�H-6�N(��6c��נ���H�ƿ��f�3
�;+4d�"��7=3���(ٵd��7�U,�~��f���Z�+���'S^zf\{���Ŭ��/d��b���6��D[F<�_�����}_SM���yX����][Yg�خ���:�Z�'�'��I�!����Ebw�M�j@;���H@'hm���.�6�y�k)�-�f��\��E2R� L�I�;���S����5'Z���!�K���~L���㞙��c�j/ؿ��g���L�(ؕ•E&�� %������+�ݢՋyf
+�
�����i���d!Yj%��\tO�'H�I��2P�;�V��������r}1$��^z�{�����@�Y��ΆSp|�
+�6ϗ�P
�0�֠K��H�&ma���>M���'���h��J1����-T��@hQ�kJP���{(��$�JY�t/��>��anyF$�>ޙR{C��R���o���#?�.b��ѥC<�
��TT9��4��*iK��1���Q?j�;�Y��i4K�	�nxxG���"�=��)ze���+5-ӓ�����h�;����c��\*憰k�F˵ë�lT��َf��x�;���-��<A�H�r�����ˣʒg�Ǫ���N�jB�U0��y�}ܰx�=&n$춱;��P�G�n��<B�<bX�SR��ta&Hob�Yq[��N��������R�HY6��"u���/&�
+��4u��̎c�ŏ��nR�u� \�,��~/����k�d�Jd��1���@@9S�����|b�7�_6���(u�3"�[�]�I���E������Vj	������e5q�Ycn����Z��Z��3�.'��ĺ��)-}&���l�\FR2JiW�:��d`�O��INC�Wh���F�}��;�?90�(���彑��@L�B�
+zc�y�k�;?�U8��Mg�vm�'�2�9$�L؃
+I�#��`DL=�+Y�hW�;�Y��&@Nz���ӳQ�sA��&ͷA-��˯����r6}�N��֊�I�X0-\�~�IE���3����k6A�V�o�t�^��ح'�*o5x{,� �Wʉ����s�=k,��7�i���"P��/�^:�L�8�;��%�l���x���ڏ@���;��S�Y��Yg2�D�"�N�H� �ݲ���l���bEdĿ-c�F= %���E�u`�G�}<��6�Y�.oA���?��D�nk�J��/�B:*&$�pp��0�q���Ֆ8e6�q
+�Ǘի�n?�`+�%�H
ݥĘ����N�G,���3tO^.�4_�j&�i�F�L���_��`��mQt�XH�0jW�L��3�P�H����U����B����LC[��c�:׺f��R�P���S��(��ڎ�?��Tu��*|(3wO=�@D����6�'�V��'ٰT��ad��B��x��$��I�A���tW�o�{�M��j��OҬ��
+��>��l�?u�����z�Ǎ�m2�9��m�iY\�x/�)�s~G��lE��k6Ⱥ��x�<�MT��`��#hJ0�6|�%���I�� EJ����z�dQV�)K�s�%��zR�P�ԓ�.�
+UhM5�^|_��b�	�xp�{d3izn�.�v�-�c�<���5�K�.�B�����p0N$�o�J�9"�������B�O�T�_�P4W������ˎ"h�f�m���uIݬݾ^�C���Co��5u!�eDG?q�F��!`?Q�H%>[���j叧K��Ƀ	���"q���gM
+�t����b�<����&�m01	*�qN�!���5���P���N��Q���!L+���7�������ɣRX��7��E<l0)j�N�L���ӌ�ڇ����U��gO�2����,��#狪‹@��ќ�r�t-��}��
���g�����gGb�w�w��l	z6��J����a����g��Y�@F�T���0�!�#!?��o�r�-<�=�YΗ���ᬸ��qe-s<�M*!R��4Gq|+��Wf�2YG�?�XBg:|8�d����%��浢3��!��w�C�#�;��[�:�m��G�:¬�n7�EzߡW��d�r:�#
+n>��^�^�_���
6drR~}��P��N	�F�ls�YP�~��DZh#�n�:�"RU'��*����`aL��\U��3�wJغ��K8���q
�
+>��x@����-�2~G���7J��M"0����O�W��|���0�m��J�7_d�l<d*��=gp;wE��I�5�:����Ÿu;x�0J�ZB#���y�I141_��A���I1X�BI�C�̈XQ��+͡�|&��8��Zs3���m���E�D�A[Ma9KC
�	h���е:CT�(q�5��ιu��`Xי��y~ v�t���
+�-d�sE'2Jz)
+St���!
U���hb�v��/a�o�E��Av�5:�Z>����*zk�X�iz����PM��aF鎡j�G	���R����0���mi`��`4v�Zz�7�fK�_3Y��޿��(爒��ۑ�O
����G	1j��j�4��'�����J�O�"��y�E$?�#��%���௷�r�[�_?����
��
+��&���$	F��[��8|<�j�L!��i���A5�M�	�e�c����qNl�q�x}[����Gl{]L�l���/�]M����q⭌�D�I�er��iF��BQ; ��ap=K���z�F�%�rc��q�
+;���T�k#��l��i۶�H�����rq�q�fd3�·���/��V�g/�&��<H���w���d]����$�U���8,e\��S������^=D�x쥶d.���$�R��K"-!�M���i��b���)�ԥ���~�s_�f7��hI�1c� �7J>U�ؘ�ۥT���}����tN�r�d�H�!v����P�$�9̦��84�ZV�iu#��4&�t�^�<DSC�HV8�y�b�Pi,j�D]f��1$,����kɟ��R@n�,�xAU��	��9�����O��	å^Nn:������3�Ħݼ��
+E���� Q	A<�=����}���$'�jZl���a�|�t��5!5*-:K���J�CM�k�rmY�hf4�.��߫�C���M��os��|4����.o��*�񙫸�޸hw�DN�)b���PE.�#P�m�Y�
+�S�.���9W���6M֝��o�l��Z$�^�H�2i�	�$�f���-��jC��;u�"uj߁Y�u�E���
��I��x�����Zp8�u�M���f�`�_����D���am����G�g�1��b?��F�c$M�G��M=�h�CyfV�S�gb�Lh���2V�bf����FR��M$����yN��N����L؄�Ke�n�})j��{�;���_�Am����7���@U��W�	^p&k+{9|
+g�E����?�{9Z�yi5�
+9�_�e��G~ѓ��%�[i�Ԙ�ʂk��;������G���'g�e�H����$�l�$t^�D�����돭��KiS�u�����C���Y2��n��R:�AF=n?i�%�p�:���V�;bD�Y���-��q`8�Ͼ*5+�S�$AvOv�~ex؅���W �?�i͂Tg���Y9�p����+<'DaJI�O�_�����'�֫~�x)`�#���~��?�.f��,Ŏ�*�5[M+L�u�T�:�� @�\��z�A4������̤g� | #�YnUo��Xd ��~{�ۅ���Ve�ڃB��,����lt����3&��w`o)�0��p��ʿ� ���R|������K��A�]���uwg����xP	L�ľ�l�T�΀O`\�,���k����Z�f�U�K�35�})��$��~��ę
�6�ʁp�ʾW�v,�o.�f��#�e`� շѬA�jnM�WE7
+]9kZR%H#j0���u㑴,����r�&�D>���-��i���r[���ȱ����<)�t������I�@��
+�V�pf�;ѳ;|���lbl`F&���U�E
+Z��EɗB�4�oo�6�Z­����VY��������\ϐ��t%ف��o��@����<��ؠ@�Q���_��ߖHB�Vys�P��I�1���
+���uG�oB_j.�!RۧS�s,�%$k��x��l��$Ud���"�?'��l��z61��E�<�{�)���?�ޥ a�a2��d\|M��b�
+|(/D�[�4Qn�>�O���h8Q��9���J�&����K���i8N<Y1�|��X+���ί�5�->.}�dr3�J�d�1э��<u%�%����h{�#U��Ht!u�W8�:�$����{��lZꢀ4�E���<�DJ��
+�h�|y�g\t,�ߋR	y�,�k��cm��2�N�Y�E�#�Ӌ:��P��(�jg�Fh�J����W���c�(��U�?ޠ�q�h���LC�(@Vb�Xun����kJ��8f-��14����}�`!�İ��P{6�zw���l�Fh�% U��:�T� ���4���������1�)yա����+�,��1A�=��S�h��P�ҼN%4���U��9�;����
�v�ޡ����7R�t�P���,�Nr�{9@�ƭ��RM��Y�E�I[7��8Lgi��1"��_+�_��S�jq}�&��������l��Y����J�s�i�����6�e���*��6��[D[�T�dFӛS���t��:+Z��j�=r�9���H�q
+}��0�*�}�gx5־��L�`i�F����亢��Ajg�iD}E<�C#�D���[�{5�Q"^�~�&�C'��IJ��5&��6�!��x�S�D�OZ�4s�ط�]�b�|�?�in�ԟ�$�Q�u]P|��]���֫�r�G��Psu����,�z����/���u~�TV�Y�L�a�'{}�l3}�o��r
+{�0[���k��㲰.6]�q0�~t��Y�aD޳�F���S-G�i9F�u�<7%�k�!o�\_墨�؍O
���5���.���ǯJ`�����Pb<���vrYϚ�G-��a�E��7JE�{�9p�w�y��d e����ˤ�Ђ��ք�G���B��[��p�KTiA�W�.4�&�G���tf[�`��3�
+�$V���*��_��̎��E��/����	�1����$��wxjġ���ywD衸�ؙ��տ�\~����Ѵ��.'������DA�!��6cZ�W�Zʗ�b�}�ɜc�:�NA�^Aɶ���=jDu��l
+��AY{����fd �ڛj��"�I�>M�(g��o8{'k7����l��\��O����\�?�-�.!�$��GhڸjI��|��H��
��[�N��" ��'�����(�u�i�i��B:⧯ �;��x���z���WZ~(�nW?�P��|�Rj5�T.����g��� ���A�|���T�g�^���`zcpA�LZ���` �t�|���!��
+n�x�?�y����Z=���$|U�!l�����_s���#���Qu��?��=%��qm�����_.jnD!J�=�-����C�a�:�9�P|���g`����:�8�h�@��oF�2�H��nlo�_5d���l*8U[����{Kj�7��q^l�	$B���X�`�^��z!�%�Y��2Ti�(����Z�[���D2&����(��7�&5�2�]ax2xy�;�k�Y(��m '{DC���H��Q�ur6�ٽ"g�AZ��V��%�"�
����&�B+�+��j�����ҡ���b���cAa���+�L�@�.a5���ʔ�w{^�=�J{�$�-�e�v��b�����ѯ@�����d��U�{#s{0�5����u����&P���Ɖ����2�=������)b�%�ZA����qC!=����\W����9�١��*+1���8�7ɛ
Q������ȱ���hEՂ�b���XO�����D��D���S���+:�!�dm���-��b8�8��2�z2@u.�+��"&��'j�{e�C��^~���m4@��,���iـ̽0���Y�/y��}ָ�� 
+Ո[��H_�y�.Ui	�AQ����В�i��'gZo��^А�㬝J;ߨ��W�ꢤĢh�ߜ��!|`pnj�˩�,<�^4�0�}�x�/�B�ߖ�Ÿ��G�6*�R��i#�y>W��;mKt�џ����6�@)Q	H�2*iy��Eɩ�]��gE��0K��x�s��0Ƙh��W�|wC-��w��<v�م���xTnJRuV���X/3��v֘�N_'WI��B�7��DJ�`�,��,88jl$�F�UNM�d֫HJ����M�d�6
��KC�K���u��ѻM*1��TL��@��d�	�~64�i��ukY"M�=j�"��ڣ⾀�(�^݌+u���ȯ����tp2ˀ�q
+���d���.�"#�����K�c�t������1j�`K��.��I��A���c@��J��+��¢����l���[1�P����f�j}�[���i��*����4��IR2�F.wލ��騔T�#@��e'p�c5�s�׫?��3V�/Th4s�㑄�?�������� �b��^�ľOÂ=��@����S�q��/?����"�%��ͼ�6���w�v	Z���F"�:g�ukd��!��N�HQ���D*�y͙3�Q������mAAS�^��ˆ�(
����P�e�0��r��o���
��7le`7D�� U�"�Ȕ�d�>-��T��>�a�S��T@�%V�K�,��2Ў�9/�t����u�
���KWR��Z�����O#�#��8���^8P\���+x
}<��6����������p8o�ؤ��S,�p��]V�r�V-K'Z�`��oя��Z�r��gЈ�}��B����~�Lԭ�!1\�P�������7�vU�>	z	� #A)������B�ᢛ|tg��V����dk�6v�g�
+Yqv�sgt,le��ɧC��U��D-�%o� B��qLK��L�+�����ڷ��O�?<qp�	Z�+\.F����F�$�8�oM|U���`|(z��y��)k��4]~��Em��-���م V�>a�N����u��ʹ�t`0"��xNx�"G�	T�NE��I������9�(H�m۶m۶m۶m۶m��m�=�y�ɼ���R9��'+���BK��n ��FjO���73b��ˌY:�R�K sQ�.�{�ȩ^$�Zls3�}����`s�P5|-Jj��@DA'�J��h6�=��W���{�+{د�o�%gH5t`vKܸ�-	�Z>7���4�:Q�htX��o��������J�NjyR�ʌ�Y�~&���Z#+�D�A�N| ��yr	�4T�����(���
�e
zB�v�꙰��;uL��S�B�H8�K���%]�^a�lg�e�����
�h��4��K�М�SPΘ���%Jf�no��Z&���>v��eR�ߛ?|��9��5���$ȧ�
+�w.NP>��f.�V|���q��'���
+�rq4�.>���e��9������g`$GPs�����j^�|Z�-��)�t"2&n9j���_u@�u��I�	)�'I�l�J[�4�ɐ�I���:65غ\��&*_��(���l�75%恁�U��'@�.����C�d�ׁL�N�)�0QRn�H/�M$Z��cTDWw@LC��.��^U� �+���و��WNL��>��<�[�,$s������R�x�3Ɲx�"��E����?�E~�B�i
�>m{z\h`s��i��J�����X��J;�LT�o2>�#�'&�U'Y��	1�x�S�~X�G{��e�7�Mm�u��՜>�#v�V�fs��~C��7���me��&O���ȇ,Ȼ��*P�>�Zl�T��1-&�����jvsb���ƾ�d �]��m�ܧX1(�'�Kڕ�K���.�dh���b�r����.X����T�B�b���8��?�]�j��ۊ�3�#м�Z�f�X[NM�J�'�&�F�P���i�Hړ����S��k�K�5��*��
+���4��Ϣ���������z��<
�4m\a��K���5(�{�݂�P�1�ͥ��Y���&Mo:x�7~C��x�QJ8��I���Z
+�}��P6s���L�E�R���Dg�*g����]�J?��δ��WO��B�8t�H?f��V�'�qA��z��̙�@!�Ӱ�๙u�a!�S��	J��>T��=��h�Z6��=25�|���iX_t�E�{n�<��\F�@8����l��*�v�	���k~��e)F�v>�!����+;m�Bv�;{^����+�[7 �y���Q�@�1���\�R
+ߪWs�R(�#�Bt��u
�'��H��~��X�˻�(1�/������}��RC�DY �I����"#^~�ÇΪw~Τv��!�B2d=�'��	�W��S���:ݬ3#��M�@~tn����Z�Д
+������~�a������R=�!L�|d6~n���3�EmY��{"B�t2<HnU�-j�mSm�(jJD��g��^��a��ء̡��^+��G6
�>�vԞUltJ�|���  �ځ�H>0g��z�������Yؔ��ja���	��v��RxvFAb�xt���B����0\V��c�1
+9,���Ǥ���x�~�ZR^�iv+�-�VF�E��c6r4��'ͤ�������L����`������67����WNj�=��"�������~
!��eR�|�Dd0M��2Q����:���}�LpI���׌6��[x��e�n�ѼQ�u~"ͥ��Ā@�$R��w��TIx[yМ��z{�FK�+����1#3�[��q�
�����A���<���%<A�ZM#��˜���C7�y>C'0>�n\���c�l����:a�m�9�4��̏zp(��m7�����7
+4���c�x��pIm��:p�X
,)���K��H,��tDҺ|�(��c�m��g����{:�Q$y�����B,�T�H�@q���-�Z��Dul���C_C�z����t1
qd�k���֐S\0Mb�c���pR��3���gu_�����������v3��	��q0��Z�^گ�At��_��>�_QO�g��k>1΅�=:Ti;|6��DՕC��]M�|��MV��%ʶ���G���'T]��Pe��ɘ�.��=���w����B�ň؝'z�.U2�w��r���!���}O���@�<�'P�ziT'��/b�|��L��Ϛ�k6�
B����羕|Q Y���z��XH'Gme��ي�렾�����ȁz��<O�wr&�N�a�!;J���$�3���4�`�kb�I�:�)�I���f��,眢OZ�e�5"�ڡL�<���8�d�Xۍ�[����C�-�cYJ��伨��45)#C�[���	�Glg��N�����%I��4�9����h��qݚe��^3O��p�@ D��"`��&"ʌ��W�iJ����=[��W��`j邑�+o�gk:�](�u�K��s���e@ۊ�bT�&�i5BQ�~�(��zF9,�s���A���8D�y7$��fC��0�ќ/fZ�V�����8ïʋF��y|K�]��v1GC�2[�hF�&M����
+�fn�� Z�q�c�Z1��9 ����\e<����l>���<\s��f�D�]1���t�gO�0&܅��|>(����5ig
����B�E�?>����lv9�L���s!Uv~)�x��_z��1�����j<�L��r�E�!Z)[�{%b��l��"���RpU�?�h�=
�]2���Խ�Y�ob���n^V٫5���W����wѢIu��F޲c�oX��,�bT6�{��KJ����‰�`�ZM���m0�z$=M�$��v�S ��eè���,��|��,+�@�2
+PeMHv��	]+�s�P���j��؎��!�t>�ڤ��<>
�:��xՙ�B����6䬜v�W_?��ż�`�蛵P����ǜ�%~z���t���oc�ĝn�N�L��!����?�u�d�'Kp���
+2��B�`���_���2�~T	_�kB-�0�?t|�ң��9FV�m�~;�w]�I7z��#t)�z
���˦�Vc�6Sb�����6i�zIF������q¢x������m$Q��+P��<oXʓ����̪�j_���O�����z�+���m�&ّ⤉d�O,��s�D]]\�
+�9_���`f���5�|�T��e~ح�y�^����S�h�M�u��O���8�J��8��U#v[�!"��
+�.���������\���B��P�ج�>Y�jj�3#���-C�дS�v��D��:�%���C��(���;c�u����6�KAYLw%�٪��2+<�S�m@|i�؛,?2��� �'��\T�~��2��'�0cXe���C��V��'O)��3w�}\��&�A܇ZDD�v,���U
��?E�FM<R���࿌���ٚ���~Ͱ��5&�Nj& �C�x_Ż�,dt�����{4��sR�-S�\>��ݓ�I.b���{�d�iг1���&�SwkW८�
+ɤ�\E���v��F�x��O�|:R�W�۵�z_���(v�L>U
�G�CRR�7Bi����x�0��|�犜��L��h��t&2	L ln�n&�b��R�p��d��F������D9�,�
+�3.w�Oy�/#�����ά����|LM�/^��B3�Ŕ-bH.z�Vܘx{V�A(�+���S2FzHMƭ���&����Аs�	o�!"G�Qmc;'���0ĉ���s�@zd���c�F&.5_���'g|�\��FE��C�Ū�Vg8�`ˣ�ȧ��8�x��W��m�`V�@��3�4"�|���絈�V��Z�Bͨp��h�ۘ'�����x�i����֥2����EnB`PƩ
+A��Y�)�5������`�+]�֯A�Ų���Ͳ݋��4Ɉ$�F���>�D8\�x��Ty��O4�����b�c(V_cRC�K�\�+Ey�x��g�J�`�j#I+�+<nsޡ~Kf��h�V�܌4�ہ3��E:�Ò��E�K9'�i�^�q"��nqb������٣�og"u�옌��!���լu,��S��y�/l����=.n��wc�T�a�	�N�8pis��dc�Y=J�Ѧ�s�e�������ɾ���Z����|�C��D��k{u����ā�%�v�{7v]�.�C�L�
'�EԆxq7<Q�C��gU�ޒ�zaG99��
+��J��u�G��c��v������d�V��k��48��[J�'7���yќ3�E�WC�N�6��O+��ap�5w��KY�ҵ=��C`L�~s���v����*+Ke�WCn�f���b��Ñ�օ��U>h�����9�����^G���l���U�k���1�

8nNN�Ҁ�`���ڱ�����@Gf�<��lRM��XW�>`�ؓ�&�vRLV�-�O�*`��qd�5Vw�20I@h�s	���O��c�JV2W��
�����G)����рNۏ�B�N*T��*b@��Qz*��
�VL��;�U�A���a�g��y��������K�Hqn��+z��\�mY�Ǩ�~���ϧ<�q�B�X��*������S�^���<_�0�
��oZ��3�͡�֩�)���^��_A8D�Z{�UH
��h�+t1�>��v;J��� $I2�����2`��wR�]���2��D�0ҳ��ܝ���G��T�P������#	AK��ߣh�����L��9����E�L��=P�;lX�h�9{)�\�U�R�=�]3�_��2)����}�γ{�9�	�x_t�X�h���-q�;�=,�l;���9w��zY�܋_��b�հ�}�(0D�2�E��vy{C�EФI�"�CP�=� �q�(��@�^�Locj�zkS��D���R��x�Zg���*�M�hi ���h���O�tJ*$��,��Fm4>j
+�?�I�Pޤ����?��ƪ}"�Pp9�'�'Sq��VT�����~r���n�t2��~L�6���ڢ}0���|Tx���������=RtiK̙�o�
�.7�5��4�!�����U�2�m�!�����E)rg���z���M��O�1hD�6�������D���َ46���a�������T�UB�Y�Kz���	�X���+�8<�@����{i
+�e���(�&G�_����,L�`!fnU�c7I-���_�򟞋��(���.�}憎��2	Tj�SLڝ%'��kowM����_T�_0�e���$��Z����F躿(	YY���[��P�����S�2�ɴ���^�/?�W���%L�3`�H�=3��)�&�q��j�w��x���jQ��^	-wo)�oxBk�����q%�Ү{�[�8b'�J�j�	��%���n
�:^��*	�A}�uF���&��/��˖	�%�&�|�h���WZ��%Q�Z�g\P���d���7���*�	�'{@ܛ����t*3e����
+���L�WJA�r���m��n�����ݖ�N�at������J�T<@��bVn'���88̸^�M!JK���f����x��*��
+�cE%<��w��~ȅ�q��a|�&�X(�{������2Y�X]��g��G���m
��	�z�ԃ|�0�S�b\�K�e$��4�K{]V��RQ2�0����8{����Ӈu�WZB�?T��.�Q�n��%�LI��������
+�#�aˀ@�ڃ�5)T�W����5��b�a���D�'��+�>��|(I�dD�s�w0��:��/!��T�ch��.��3�X���.�O�|��+rs���(�2
+��P,Ӣ9~6��^5'K�OZ�Qb�#8���~&�^c�9a�<$M�J�<�����J�ut�b$���U�GK��3);G��;IA
+)�]ѹP=:�9:W����0�>\�����r��>��;�Jϧ��@��7%'��uE㩆���P������[d���]����}��[���W8!��@+BM�NCG��Er2�"ո�en�0	�\Y�dI�s�b�&�uY�k�5�zq�'��a%�jn2���E2V�gZLJ2װ�ky���V���:&�y��.�\#kCHX��$�!0=$����8�غj��Z\��
����?]�5s��i���o/���(�^F���ߓS[ٵ�L�/~�M�+�z�Kϱ���H����l@L�<G�z]�<q�]���ŜE�8h������&���u��B*��R�Z*���Kf�G�
+OFR?x���F��M�ϴ�������!Y�]�Ђ��u�
+�L��z�$Q��3�_�1ӈͥ�x�tD:�"�1��:+�@��&*�|j�Q?-DV��gIKlC!��]L�I���$��ߟ�E7߼�ިX�,ހPw;d!�|�#3h��ϯ��@RQ�vÞ[q�lz{��u��Ʀk(�s��Jq�?�7��o���C)@�uJje�%	��b��ʬ7�8��'ȗ����mҭ��B��u�\��tu~�vzh������2���L�!#![񜴌�i��g�itUם3������#��������?m/��H�J�Uӄ���@#}Qh�c3cY��>q�2���o�C��wpA��*�4�o�LԐ&���)�-�)]>���Q�t
�YT��~��P���Hqè:�w���p���]�E��g�������-N�Ԓ����� ��u@:��b&�H��Ϋ�e�N���6W�Y"]L]kuu؝FY�V�A$���i������1T�9~p���v�Az�X�>�fIQ"o��
��c�=?����>{S�?l�]�gb��,
�l��.zG�3�N�FR��UR��A��C�A���j
Z��;3&�ޖ���4�h$//�6��RZ��b3�j�/��������cn4�}?�W
+�c0t��C�XZ&�Ah>���3��{h���l2���Ք�	��)���F�lC�#g�Y��&sJ����w�m	�<�]����L�,�r\~Ri��RZ�[h�ZȜ��A��F�"��f��&��|���k\ڑ���)��:��L|��ni+�<A�ֈ��]�#ޝE��vQ��C�I dc�2�~�����nkY������9��
���׆A̐��QV���ڋ~)��.{M��.��@�φ���^(S��aƵy.J��Γ@bS��j~��h��7�`���5?xH@�|pB���'��m�e�d��&n���ЯbYyx�g�:4��o�� �����~��:qy��tNip�e=DϘC�:�� rz*����	B=\ �Q\�9W��B%M#m0�՛^��L���oE0'�r������>������z�U��3�-��'{�����0�k��6����v��/6��Λ���Z*a�Qf���H��3�6�����w����(���<hK ����Q-bI�A���00ou����2���5�#���˱Co�`iSd:8�%��@�
+����F ��q��`�?����o��$j���V�"׿�P	{l@��P���RC�z.1�m�K��z�Y[�y��� J�,�`�x���~�:ie���c�G���z��7k�lv_l�>�%�L)�l�@�����~�b�x\p2#UXV����N�s��R��HU��ʴ0�I��<^�}_�g�Fy�+�������W���`8�|�=��T98�;l��k�z	I�j��D��C��m��AnK������qht�����C@�}��CӔ+���ђ߆8f�`�y~�b����w�nBjlL-�Ȣ��;����(x>���ۈ��
+��)�yh���I�l��b!�a��������Y�p!v?b�7n�a�z�bk2-c��t`����D��2L7�H�*V��|���v�}t����~�3���37�M�#-EY�BV6O��RZv8<)�E\��7~�:�O��͊��5��"����D�Yy!�IԲKl
+/�Z�榼��ߍ��nf�D�KEk���&���
���2�Kx�
+��G��~0-�ڠ���[��t2��� 
+��>��+�O�����+����km��9<W�٭("��BcR�X?iH��	j��ƚ����b,��9�h�=����E��=1�d����A�	��A[W�N�ƌw���8ܝ
��f�]qͼ2��^,H�n}�����t�8���1�fɬ��}��5�E�mA�Oł�'6
մ��C��sl�b�w�bZh���5NVN�nd���e�jB���'���y��~�G�[PC'��=�R�D�Q9f�U�H�4�q�o8��Mb�ܗGxvx'�}B`x��v^őc+�>y�	{)���
+yY�~%���Ē���5oU���P@\�o��[�Am=|`{ٓ���T���Q�Ɵ�@���r*
+9����޺�+2.2q��1qR�/�����\�w0�I(�mY�!���R��#��~�̆�L��Lt������57]^�aW���%�]��xSdu�)PP�Z�%u�{�H`�X~��:Í&���R�V�;�*�g��Y����|���l�0�J
+��T(*Y��3c�G�,Nʥhġ�[B=�Ώ�iC�FUb�?�����`�G>��چ�)i��}�
+��9(*_����phЖe�*h�o��ow$$�N6�ao'�{��%[�Xܿx��
��8��Y�~ZE���<ٚ�=5#�n8��)��>�����т��
�9+u{��&|�1�X���P��,7��b�
+�ƖC���%yƸ����C�3���ĚZ�,!:���spGY\���KD�*'�����U�C���}F7����mv}�?�����K�����J���"�r	^<V�W�߰�C��Y��	��Og��u���Y�C-�S��,�!"'�m�u�uc��jB��.��v2��\��-�>�R3��Vńɒ�\4n�æ��l���gi�˚_��3G�9[��ڝ��I���;ѿJhb�1q6jQ~����GB6����{�O��R4��˩�Yc�N:�Z�ڳt�C��������z=G���8�j����B�L������Ր�(D�(Ps�)��S"���f�v?���@[���BB�s8��C�ǔhy>���N�F���C�w�Ɋ��S�&���gn�_@Дz�H*v�"?��r.��h1;2
+B9�������5IB�+���Z`9�s#�f���;�`ll��d�p%�2҂�<$�)�	�]�!��[B��Y��v��E�20��k��9|��������85ce�K��nL�+�T�@�u���tk	:��4��C�}1I���lj@��"���j�&4��	�q3PDTqS��},.�L��n�q�L���n�i�|�����?�6!�W~/��M�HW|Y��I1v��*�Ҝ�|��y�����r������2��M�_�^��l#��]ߣ����f�Kw�q��ԅL���뽵��,��}��a#���6c̈��ަ=Z4��^!�q�
+}4]A�eS�po��I�D�_��U������eSO�m�Kù��x/��z9�:A/���$�e"!
��7�1�ŭ_;)�
s&)$�WLʓ&%oKhq�.$�r2��Z��ʸ�.�>�[Bڭ�ae�b׶�c�́��l�m����f�.�2fp����V�m�(7���ۣQ�Mh�!�=�G�Ф�!��sg�$@��C��A����lv�^�T��Cv�M�B3��
��b�	R�$`g��Z�Rw`���|@0�8Z���@@�m@*8�:�ynE�?UBB��^R��2������%����(x�G�����w�[��*W�;���a5x�PKK�f�̧�0�k~�1��8��>��<�lJm̴=�G��.��W/�xo�v��4.v�P&j[=�n�zC��T�.�����x��4CH걖N/vxw�?@��U��`�!ݹyؘ��Y<�y���<S��w��Cuh�
+���������%�
;�+Ш)��$����vS"����CrYcu�c���9�pF��M�sD�^0pD@�Ē����R;Ǎ��?Ց��%M�w
+�sm��
Ή,�����?�+:8�;��۸��e��u�C�,/�����h��)#��jG��8�y-��?).��awJ�å��K�m�Jyݵ@�?��D���	��>�M�`p���>��G��'*k��N��`r(��y�3"XO��TД�w�I)(���= 2k�Oyu�C|~��͑~s^�����_�}��"fH��T�+����Yg�� cK��d{OٓN冬;��Ҏ�o�x��Wj�'nz�Vz���+{F�$�݆u� �O�xd�����%E�B�Y�j$�M��e~�ӭ�S�OP�@���f.��H`��e����q�[���X���>��-{�1�3�묌X���me#��w�������jQM`љ�lʇU�rQ�X#Q*�j{�	p���W@[@�C)Op��q�>��*�#:(Z�����RC�� Fg`�;��~�2��o�P�J��PX�S��(rv��H��������ky7T���ړݮ9����ݴ�����	���M��b_d�遇����o���r��]8����h籄ҽ�h��ş�1�n����! ���\�K}X�c��N���嗷
+z��"�����!�̥�O�g:�+� �~r,=x���$[��sy��(܈*��О��}�(���!]��m��H����+����4�V6#--�3)���B���F.�1.�|�	�N�>��FA���`ͥ�S|KT�-���-���g�D;�F�v��>�eg���*M����=�$�$}0_����W��t!�b�w�WH'��7D�Y�4<A��~,��G*fo�������X{*d�wS��l�;葃3�ܢr�@��2<ś"��L\�2zd/ɰ(=�(�^N|�ڦqA�8vU`�vR������L�%�Z��u*؂��6C�����O���Q���6�6�<΃����\Y1��N~����UU���W(�T���G�jP����'��}�T[�
��W��[Jo�yd�óvZ�^�L^S���h�oOq�=9�C	��-�PR�
c���@6��c�/bv���/�
+v��L�¶�@��N���r�★�.-}����X��?S����ԡjl�x����/?����ga�<����2�_~@�4�Ty�R�!G�>s�k�L�D�To8
�T}0}�Tsq�ˋ�~/������4c�0S����SM2'#���H����1�WV�q��N�!G�ށ��?e�� ¦�'
+��Èi)�堤���	ǥ�:���#�w�$�z:�ْ��>0T�HZSB�z�ѻ���,�3�����1��@�K[
+�R���������}��{���I@����|�z�f��~k$��v��;|�Z����
+u��f#���(��;���2�Dۚ`̏�D�g���g��Do6N�m�⟝����T�<Ƌ-]vg׊�������`ES^R����X���˹k�о�G��c������e7��M�<@���J(E�9K����L����z��:���
�_QA���5��SR�z)�6��S�y&.*+�R�<“��_�Hb�2�@�x�o��XɘC��T�l��ʨ�O���K��b��~/�ț�LA��EFû,�*�@q��@�X-�Q��g�ݓ!���?o�W�g�/4�h������y(�!e焯�Y�j�E�.�t1�"p�"�P�����*�~�$o2s��"�f�ލ{�nGO��Ϳ�^�G}H�����a���?��Hc{ʅ[�`�xa�����1�l�OXZ��,7���n0�D�v��-��^2�[So*�{Jw{n�5�dz���7�bi�Z�M5L|�xyy����`s�
���	UҘ�2��ޠsn�Lٟi��z�:��N�����X�,��F��Y�d{dFx�nڜ�TO��csB�+U��N�.���.4_j�<�T��A��A�P��fS��eP�۳���j��f�����@�q4
+ѿ�5],,}���vJ�ƹ��a�,x���?�>�2rV����r��RG�Ж�f�"��Bﵖ��Y��_PԳ�MEj�;E��,ۖa"�w)�R�Ӵ�&��ۘ��Y�u_8@�ݦ�A��̝G����3*�6�c�-�3:��y��G�}��Ss&7�2Yc��7̺rУz{�8dH��fG*F�u�����-1U�z��
+8�O��(�j֫xIn���5�H:�`�;�5-2�>OcϹ����6(�z)�<��[R�-~�B]!g��E�t�İ1���ql�����V�4<%��5�(�&�2�6*.�a#Jl�~�#�>fl�ɕը����xuDVQ�`|aΤ��i����X.��Է�ή@��w�O;N�(3 ����no$7��e��պ
+ RB#/�}go�~�dq���wX�T��i(e���.�-���h�1;ؾ`�'=[� ���o��r��"�ſ*� 5���o�D;Q;K�>%r��;��c��*
��ψ���*������_�n�����@"VN���i��%^=b!QP[�FH3��5w<����~��%�)�l_s�4b�zQ`��u��;�r�N�J@�[P-�����
=]!;��λ�<�)�#H~)�w�i��0A3[�,��g�8�,K�1�3��ڝ�-&'��f�c�r+h�/--ĩi6��<ĸ[�܄��WERyi���4]�R"�Y��0D--<4���n��VT�ܶ'����Y��"f��F��K>[���@�+g����K_]Օf�:��+�k%6�$��+�����^>��8�RJ���	C����{`x{`@�n6>���������p�Z)5�;,�˙٭
+�3�<��H�a8�q�J�Ѩ!|��c��J�cmg\;�w&�KZeX����=��I$�^V��G�d(hM��1��8�.��@�/В+�݄kU��@(�j<�ԅ{-�uyH�9�>W�J�5c}�.3�<�^��7�k���ȏ_��o����tK/1*0o�$t�@�	P��)��+u	�L����d�s��E(��^6+I�y1�/�����tr��D��K]����{ٟ��������nS��f�lǣ����(����$���-XjÑ��z1R��s#����|qy��޹��'r]hL�����Zj0�ֳG+���koc1�yE��B�
w����U&���xA����/W2��3]C�VN��p��\��rK�^���p�Ʉ(�ɵ�Ss2C�[^Ƿz~�"�9r�7�&_��8���3���{K�A3����\�87����֤���v9��̚��_-�R3��~�t���J����e�s�C�������\�Y���<���q>2*f�_H�5X�C~
�55��+���=�>˓K���
�kp��4��M��;���z����Q4��l��٩ł��n'w]�;���oHge�x����)wZ���j�Q �x�<䉚�ղ�2|�Xf鍤ڦc8
+�D�39�'�0Y.�F���W���QE�.u8��X������$zi�D�"��M����.��D2LI���I6p1z�FтzDTr�Ů�ѿ}X�Z�b���3M>��T��ay�m�L1"��G?��<��!-�]�ɚ���gp�'*q��4o���N���ÚP,���C���Sd%U,H�;�'2l�3��KgM^a�6�/ԏ6JIh������6�dw�[����4�^:`�ub�� ����Q7j��P�b��wUwح�?%�M��=:��-*���8UJ"
�ݓ��!?dy[+\?���֏�6�=�v;���*
�J7���=O�lq��DU��B�6Q$��Ą�_��Y�704��b�3�S�����nq^�Ɛ�'�p<�.)E\9\�P"�-�тg%F��ۘ#���C5��Ͱ�kwʥ�ۃ����dϏ,JbL���]�n�T0�m����&2'[=�.���h�ݢ�
+����\�ڷ�ŞO ��,#���l�Fǔ�'�S�{va�����
+��h��� �n`*�JQ�
4�i,��$���9xBXά��k�+M�-��w)^�^��o�����Q&ֿ;K���m>�/�٩�h��X��$/���3��
w˒[���3Q78�@ K�}K���?���Í���{��3�E�����PB���ƃ�"na�Zh0��S�p7�Y��N�x�����k�,����sGM3ρ���{j���4}jV����A���V�'��0���H	q�����o`��en?.�F����w<C�f�H����Oh�3W�R�1�1� �3[T�feJ���N��.���O[L��qu����:E=�w�ٜG��ۃ���|L"	�:7N���]n��/�,�R<M�\}�_M1Z���`��ܟy$zf��60�fM�gC4Y&�1c?n��bc�m�����P�]N�!ɗv�ň$yf�ڜ�q(���J��ez�n5_�\�閱��= 杹�.2kD�o6pPǝ�QP��D���W�xaa�S��D�AFC�p�����z�e�Wt������A=��GG'�Q������D�
+endstream
+endobj
+1560 0 obj
+<<
+/Type /FontDescriptor
+/FontName /WRFWLY+BoschOfficeSans-Bold
+/Flags 4
+/FontBBox [-174 -300 1295 1157]
+/Ascent 770
+/CapHeight 698
+/Descent -183
+/ItalicAngle 0
+/StemV 150
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quotedbl/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/zero)
+/FontFile 1559 0 R
+>>
+endobj
+1561 0 obj
+<<
+/Length1 2170
+/Length2 105555
+/Length3 0
+/Length 106088    
+/Filter /FlateDecode
+>>
+stream
+xڌ�eT]۲����3qwwww'�Ă��Kp���]�C��-��;\���쬽�{[���TU��VU}�AA��� bfo���sa`ad���;�Z*��[�Ռ�T��6�N�Vfv��'@�#���_a�)[i8
+
+1'��������� �dP2u���XXxY�y٘�Z�	G��s�X
4�+���9���������>D�,�y�������1��
+	;31{[[���3+���c����_�e���<�2��:���c3�]�j�������B��kfog�	0��1)ڻ|��V��$]ml�m?��+�_��ծ�O��������`-������Z��nc+S; �����߿<VΒV@3e+��
̍m����kؙ�l�����V
�����_>uK+��v@gg�'��.���W���k`�ё����������\�=>T�ˠ��d��ee�b����2����]��<�z������?�?Q����o.v��GXXy8>������3�7�����rp����=�>�?�����(����h���������/���	����Q�_�'�I�q���7�I����$�M\��&�?�`��C��&�?�`��C��&�?��E�}h��CZ�Ї�?��E�����E�}hQ�CZT�Ї�?��E�}h��CZ4�Ї�?��E�}h��7�|h��C����:�?�����������忭,������}�c��t�������������oLJ��Ǟ��6O��Z����������qژ���[�d���?v�����jl�oۇ��#gcl��,�����an������]����#�����O_�?�c��`	��Gć���!���������F��?���,����c���
��G���|,���G1�����v�10v������>�r�:�~����r�m���3���8ظ:�c��㟙�E�@�/��f��h��Z2�Ǭx���l����'�G�?�����?�q|�r�Z��Y��+����p|$q���������:�,�����-.�N���������c�G�?��cO׿�xgS{�����?�C��?������]=�������#���_
+���5uu����o㏷�����G�@�)�Ҽ�)_�uzV�K-v��/q�^V��+�5��iHS3���$��u�*���p8*�.��)F��-�w@WH��ewh��͈.=_@��NC	�q��n�
r�&����B1���%ނ~��&������IAKKf@�pq��!�s_��C��4M��E��>E� C9�2x������g�ۭ��=��Ӷ��D4!?)��I=�4*�lĊb��}��k���<.��=zGp�+�O��>��a�{�~���6Fo���to��c~�s�R=[O����H�kD���d���iɯ �֝�
+Dy��9��S;"j��9@hƳmI;�����mL�L�N�Q��r��u�߃�>��EV�fu[P��A�_��xG�@�S3�
���.)���M���E%��7�h%5�J�d�^�?:�
iRb��V�?�.�.��v6a�w7h3%���‚JK6ー�E:�5"�~�B��A��TT~%��|���A\e�#z�-�Ϟ�<�ë_��MV�2��D����s����~��6n���iA�y��ȸo��4�
����B�sؓ��޽�� Jۄ�4�z��۴��]#E�̥58}f����R(Dwk�U	���
+*���P!QׯIT�܂(޸"%'�h���,�xK�Q�'�u��U8��%�*��J�5�P�r1�Q9Rl�zߛ�,J�i���$0���ͮ��
+R�n)����*�O�
ƧK8�?�
+`?[�h4꟠3)�[�OJ��|aܮ���g�D9��1���]�>�0b����2?��+�n5���$o�ēÍ\Xẋ��2����-�Ehĥ���)!���j��
g�ͽL��΋��
��z�|bu�1���,+�����-I�u�ӒS}9��}���?�`L)?oH�Z���6`	N	��
+�b�>����ܓ�
+Q'Hq�kҒM�8<��먐�e;��?��'l��9��hC7��٫=�T9�Z&c�8��S�}1�m��vf)��j���~��'���O�]�1�)�F.Ni �RR��#ݏ$R��;
bU�h0\��}ƒWZ�U���K{Z�d���Q����I����d�3�`�O���Bȇe]����ߌ�
�YD����Z��,���>*�?���*s��ܴ�6',	����K�!�Q��o��u�4TݝR�GN��N�v&� �eV�βڱ|圔�Q�eG�fE�6*+�̮@��ΆG'�B�j���m�v�����)��tX8B6�^�����2����rq8 �t�;o��«X��h]��u#� M.Kh�ɫ㗰�Ć���5�P2`�O꿾||:n.s_��Ya����ya*=*J6��7=��=c7�ɸ7��ش ��(5oP�w��SC�!H/RsO��:��6[Tvޙ��of2a*z8�����&
>��I'��]��lI#g�&t���y>S�$3�L;v=�b��H#��eX�Xf
+����dΘ�9w����h���$��i��f���ن���l��� �|��z�Pғ���B��㤗ď��N	�?!�����Sd���?�_��cc4��Eu�`3�g�F�^�zoj�upq�%�~�e$�(�P��ދ����kqP0�������Dlr���1�OLRk	$t���-Ûwreg���wA^�G��MA�o/�<޸���ʷ佼��]�F�5�rˬ�o��Q�:N!�����L����'�CD����/k��f��~��k1T]<*�2���L��@-��>��gA�~��g�8t�Qk�[=#X�BtV������wO�����x��cr���T���>�F��� 
+��5���IY��d68��/�Ř"+��
�,I���x5P_��'��{v-c��*�e�3�3�W=-̸���~�x��=�`�"Ǣf���Q�H;�i�20����	��0Z�>f�9)v�+%�l�8�DZN��b�EJX5��7��#��L�C�W�ꆍ���~G%]xx�S|�
+1JR��O��u1��={ܿuV��O��;<Еl�=.�ҿF޳"�g4��p��l�\�<���a���2Q�
+�
1qhq�X�g�Z��zW��>�����l���}���Ӂ�]�I!����G�DpPX�gx��"�At���2�V��
��T���Q���$#4���eU�񕲅��Сߥ�1g���^����������U��@�x�4N��L@Mᔎt��ub1]|�K	l���n��D���|�~�[��aׂN<���.�49l���k*.����
+���/$�m�I�׆�]ǯ�_����7=��h^������ �}�>�
!�Z�#o�%D�`7�9Qdd���%�Mn�[�9�M�c�g���KA'�jC�_�)%x�ru�#�o��T��O4V�����ZT@����BW9�&��4I���̏�#��w�F�
�!Jdgy�g�R�ܜ��CcV��oO'��U�b%`��P��yE�s��x]j�<�Z��ǹ��cH���(�J�֫��j�����'�uT��7��'(b�'����L�z��Z�
+L���v���VT�$h�q�L�5�#�CI �)�&��������a�*D=tl��H�u��H���w܂�]
+���F��s��J�9C.�{%�����s���������ݫ�ҝt��{
+�,�����vn�>�Z���vڪ�����C�iR�:�=eP��䌚��5��10
+Ϋ+���|l��}�xܢ
��6<MDƪK�����3pY�x�׵4�8'}Sr���}�1�G������U�n��;�O��b_
+��'A�4��X���*�p"lY���q���!	p�S�tD���S�B�Q����M.�"�߇
+���}Xw�'�Kxb��n�Z���c��2&�M���\ϳ�M�x����jJ��ya)
+��FJ���RRj�p����ڦ�S�F1����=��AM�����f��bTLKR|��eL���ۻd�i����ؗ��ZS�0�yڙC�_r�B��*�M=����
+Q$~F���"���3�@w��8�6nt2�^J\}����uODۙ�Ơic�X�6�
"�vx�/�6I���U)��bs�S�0�Ȇ
6�a����0��@���\�8W�����ף�=%$�D�����騶ˢ$@i&G���m����Y��_<Iw���������́v������j������İ��	X��J��䉋܈f�{R��cB���wb����0���~׃[?���6�a��g����C\�nCG�]�c?��H �r������#ʧ�XO��6�:�^3a��lh�\��>n>ҁ�PYu�
_��6�@b��]s5�hpk�����O���q�o���k�R� |���o_D�f��&��蹙N' ,�8�����z���4�@�%���Ƹ�.e��/Ӈ<m����}�Q{�;/֬s/zt�\��oB�,�0�H���
����`\��?7�#HY�@n��kUXgv/3�i�PMҨ�����8b"�f���4S��R_
+����*�[�w/��H��@�����M�����A���K�*|�Bo*h�$P~���9az1B�Z��.ڥ�EsKi����@g3���2a�ţD<��tAp膤՛ɡ͕���]��(�N�����^dn����-C�L�Ј�!&+�m�����୲4�R[��d���e���d:Vr^�y��W4zӓ�n��B����$���M�)J��Ug"�A�)k��~�9m��8ؓ�s�����|I۱��/)����c�ww^qv���:���sc��ؠ�⼙�pԂ�H�4��W����%R(]��,']0�y��e�x�o.��S�N�{��5i)�m
+�8��թ�}~������
+�u�VCb��'��p�k%��pVݑ� 1��:p�강�A�$��䓳cq��A��IW�h�ֽ�Wlso{�]_+yPO���;"H�D:��?v�.��@��)f$�O�)��X-�����ݟ��;X�I��3���i�����d�������
+t=*g��@����⒅����E"�~w�C�-��ʼnې�yo�b��B�H��C�8�A�_�-��ET��c,�f0	�!��{�w1
�l#���!�G�B%�F_)�[k�y�����S������m������@;vЅ�ɃR���\D��r4��m�"l����A[�bB�|K�Ն��"���1�i�1��p'�u"�n;e�W˫ښk�����l�ġt�����ӹI��yaj�?;��
+���j)I�QdQ1��_���@�u�c�~��]�.ر`��w���|_�
+�W�6���eB�>�r�8\��q����*��,Z?#�I�ҡ��3)�^�?��O�Lϴ�&v��D��r�U�V|�Br[I�������F�ķ}�5<���{u��*�zƝ׋|�Y��q�����A���͇\�����E)�A���}�8:�$��������S[�Ğ/r���X��L�SwN�Z5,�]�fԘt�p�՟���EΈ"�Zԟ�{O5��A�YB+���zQ�bg�Ե����G� bL�I�o~H/
+RI/<Z8O?�� �S�/���AYIM��LS�J��������bʀx~�P���c��h�+��rE�7?�ޭ�16%Ǻ�/�V6�jx*$E[e�v~kuv��v�lw�׎�1[>u���Yg���߭�jL���w	��L���e�1O�0�������~�յU�?���L'���ԇٍ��G�k�0�u�
+ܿ�V!��˝E�Ԛ�h�J@B�
+K�^-��͕qw�����=���v`��]l5����j�����y�J>����r�Z��*�2�I���PoNZ�Ĕ�V�|����ɚQo %E��)`�y�s֟fz�q�ρ��
+�S|��Ys�!o��Q��e����"O���˹���b�*'��.�B�����+�D���h���֖936�k��ԝK��H�Q���w�.u�:
0$�h6:X)�BU�R�&�R���=g#�o��e9]+�Q���+G>���Ń�dO��a�6Yu2�ޤ�1u�`8��ɐ���v��fi#[P��3�f��_���h����)|���ϻu;^��PW[
+�M_�B�L�V
+��������u������ٌB$���
+er����M�7�A���W��A7��O}e�T)c����Z.
+�7Q�e��+"�PP�0�7�wL�a&$?8���!�e�}6ا����2���J͗�k:h�iU�6����g��A��iD��d��K4�7˽���\�ȯ��I!��S`傴-�5�gTk�����L�=疮��Ö�!M��yh��s/��;�����SG�QW�d7�����Pvv�#�׺#�.ɨ���5&�K2r��}<�(9��vI֛�}��9�"�;�c$�!d���kv�>�)����C���?��_JC�����8.���C�P�SH6��&��r[3��Lж�۫�!j��ϋm(�D�z�5���C����������\X�E�9�4���CE��a�u�H�h*���k�FG~t!��x���N����n~�\G�����i�����a����i��@����9�&�ê�p�������/6F��H8�_O��X��$n�Kŝ6�w��B�M�".�VO_�g|Y:Nӭ�01n�ҹk���D.6�Su�jތ�Ƒ�q�]�IC����w���20�,�����ő�J��\�y��8�UUO��5��>�#-x�s���]����	PҌ�r{C�/n�����Z���Yf^ؑ~2�A��
2�]nF�o���"�(H�k�����V��uG�d�D���	.v��8�Sm�,VK��*����t(�.f��N�!�*^���{��.ZN��f�5cp09�]����#f-g�:wؙ�.HU��Ԙ1���Atx5ˊ�t��I�j8 �]"C,%0�Z���8�Y�̅�iD��iN%aB�P=vz�p�7�b=���>�MFﱆ�83r�b��㜿�F_gb�u��D|��\iu|�)X�'BF��I���U�L`y�%�/�/�ff
�*h�
+��CiJ�H���j	�L�~��T��k�̬�{�
+o]=�LF�@�M��tf&{h���3�U��f`�_��9&B ����I-��rx�>��{,?{�ї*=kO%�Pܨ�D&Q7d���.�D-��ZnXt8�('uo�����`��@bԺg�����<����|���^�[�}�����$;J	�t}A1�P.����R�G������m�=9׍������s����m����rH�-������,�=����Jm{?8l�}S�k��bv�x/ի�������=���Y?�F#���9��S[���Q�$c���\�VM���D�[������m�L)�q�O�>�D$cEW�}¨Վ�ݜ�����>�'��\�R���qzBIXPEs��f��0�;�,ò�u��Β{�L�َ�c��L�8>�ń�u�˄<�$�,�yC5�s=�<���C�4����<��0�8Gz
+�&�A:�Y�P%Պ�}b�ӝ^�x�{��"���ԫ�6�X��˚	|N�TB�P�������hbSư���;+&�H��ƕ
+4C4^�JqQ
+4״�ۓ~�����t�G���T	c/$t�a�4���A��K���)��ݪ���W�p�Y8pԊ	ʢp�.%]�ֽu��6{Ma�1��<:�g�T��<+R���Pɿ��0s2aDZ�}�ّ�8-�Δ�D�9eO�g��yŰ7B.p��3?Ge�O6X��=���D�u8+�E�ݤ]Pߣ��)�6Cղ�eQ�Y�;���9�8���%i�Zמ
+�D�*��]5
��I�'5ȻH��Ъ��e}tp�5&����i0�6�� ���LD����f���KD�p�O&�����,=���Z����^Xw�]�oF����\��w]���C70]�O����\fDK�#`茔p�-L/�-;�*�N�k_'?gza���X�Qs����d��֤Ğ�6J�(g5u�����
+6�󯊱j��_�U��6V�T؝E6�)��"5c�^i�֝.�V)��3t�?Oؽ ���a:����[1έ��_�&��lKg�Ê�Kj+��-�%gD��gӎdc��И<&�O���a+���(��3qo�hP�kyo�R���hL���w�m/����Ѣ�E/�f�J�CȨ�E������.D���0c�I���FFF�l&�"�6Xf�pe�_�.�;<4�̉k���j��9��v���ܑ�h{��ahT�%��K��S�4~.�̖��-f�4��Y�on�
�@�B��[�n����q�8�����#����h�AJw�٢[J���U��NX�<�g�D|TÝ��B�]G#������b�0��C{
+�������`�ˀ…��_��\[	���kr��bqQ�ca#�Bqe�ӹ���T�4��-UV<ٸT:�����sP�Ӆ�f�[2�@v�\cY%��~��G��1K�.ǵ���S���$,R�*�.�iE�&2p���5CWHu)�杏��@�#�4Ǐ�$�����`���p<9���"4�IX)��'�30�71�|Sx��]l��p&R�p��%ш�Qcm1m�5�5����t�h�YH�>�H�ia�\�p��B�����!��&���V�W��&���r�,�>E(A���Bl�j�L����m7��W�5�8�/��ե%T޶sFu9�K7\��^[���jHȟ1/��G�BHl��@�y�!�E���sܘr���u�\��y��e���;���G{`8BN5��B؟��s�<�9c�B�c�g,�����m1��_zUw`�Z1#�������I�Ӟ}TB��a��z��"���~'.�.��G�e%L��ì{��,���ł'�e�~�%�&��V�گL�򝰗�;qy���n�x����؈G>�����"����$�!�?�������"#�w��5Rc���A���vG� o���z��>OL����{��_%˘|J�}7$L�[em����&6X����@*>X:�/QNX?�|�؎�ؗ�t�-
+�P����AH0��N$���e ��k�xp�+�(����[x�a�(nUn=p2YCw����i�X�����kN��Cl�A�\R?��@�k�ܶDj\y�:�nU���Y����%��5�wO�g�Ϻ+'�� ���8{=l�S����0�$"�|��G��W��S�W��g򵕘�/��m����gQ1�-�\�#���t�9�-Խ��˚yd9sy��zW'�G��=D[�+8��q�T;��F�Ut�`��(9���N�(gn��i�(������~�״v��˒jG���j����<r13JQ�5M�:+]�jT�u`���x�?�;˦�+̙�u�܍�|�?T%��S�>����=kq�-�u1@˰������
+��MTyM�&��.��
+��-_R��*Ճ�by���B º=»�h�[�V��I�XK�k�e-̘�]���x����ZW���!���.�=�/�7�Hn�Y��l��L����⽗y�*<�
+U��0��9Y)�����J�Q9_��a�#���B�m5��!4����8��L\�sc�w����78�����cS��nu�Am�7��M�������,�[s��jH.5��>AU�o,���s�ҁ�]����&���;=��t����X���d)qEOj��8��Ņ%WK=>?z�I,q�x�xx����_d�D)���qi9�=^m�0�1x�e��JdËt�Ӑ/���뛥3qʟ����q+������aO��,�K��2�����pR�翼={WԂ��8!���~&-6��h���Kt	?������t�'�*��16�Q���;�Z
+�Wȗ�9'��Ú�n������RF���Ls��O�$�
bo�!���(�QOpQ�H��N�HS&�K����e*�)�).���,��:�r�L��\�x4�p�&��dF-D�{/�����k'D�a�E�����C�‹J�͕c�b��&�N��	�op�X��N�pq�N��f�0��sD�~|�͑h�ʸ0{�6uN�2?��v�7|뙏�F��߷W	���^;Y�Xq��`��#�@�2c���Ы[��oZ�+F�
+�{��=h��UM��C ���287x�Df�K��̪�E+
�V��z�bϧNi��9Z��z�eh)�1�={L����"V��9nOF����dZ&�x���K���٨�ugp�1�(ּ(�r)�xC�H��}{n����1a嚍	�B2,_���hX??qrk3[��{;N
�#�a�{]| Sx
�xB�(\}Jĥ���•�\�W� �*�f�����۱���ȅaCm�+����E��#�B�����"-�t�:��֥a	���ښ�	~؊>��3�W��\y1d�}�j�~X�_��6��o\^]�y�#�%���@�t\'�-��0ȟI�H�`T��|�Y:"3N��7!D�=h¨���!V�NL!����zeB���A��d����O�5h;�0����yòw�$�˲���b2$_��L!�=������HW�#Wl����=
+#̈�O J���0(*�+�?B8�#c7�	�7-B%U�$�䞍fbh����;ͩd^ߣ��WW6*ҒR��������U���V-��zU�Z>�#Hl7����|(���G�\`���{x��EN�S�O���m�#j���m|e{E`��,*����׳p�FN���"F]�o'��h[���Z��'e�
4��շ�wO�I[�OEf3�u{�q��
�0-E-"K����uZ�HkzH�� HLxLX#qB�4�i���V���D�r����W��������&���C
��9�uQ�S���mAV1n�V+5ݩs�P��Q1��d�A��X�Yp�t׶]_����D;o������TD�"�
+[�o���ե
|[=C���A��(�$
+6�ѵ��J���>����V���s��5tDsm���p}w��NF5�=��J�z5����q���7���s�Y%��X2����n�L�����Y6.�)zj3v�������r�:�M:=�&KL�{�R�PH��B�}���z�R��B�$��hk*"�;�%Tw�c�S�]�e1���%M�6}��0�ɼȠ���fU�PIV~X�Z-˿)�O8�2�r\�PԨ1iֈ j� D���w��F
+�k�ӄ���-|;���-�s��d
+x����Vv�u���_��H�N
��학�N���>��Z��^�"C��(�y��D:�֥��
+)�|2ŒJ�5�>+DS�8A���1�v71�p�P�ۖ;�5���V��
zQ��
+DSHĚs:�4�Q�������"kx2�
�u�
*����z��!6{�V,q{¿mb>Mu������t�� ���,��h�ΉwN);X��1�-�<Sd�����ޖ�7��NǶ,T$R�S���6$c�ǔE����oԁ��������+0q�t�[V��7Cs�f"��Oj��i��#��K��������5��rg�'<L��2��SK�it�)Gs��$�kIJˎ�~IWG�4r����e��t����w�ګ����GB���L���F����O��;���K���[J�
+�xļXF���D6&(:�����E��~D.k���c\e7�>��1ˆ���Ur�1����P��ѲRi�
tِ9|��2����\骬���/>k��A��?!>�����Ug��M��1�4��3��Z8
ޤ�30���E߅���[�|:�%���o6�?\�Ҭ=##{0r�e#_�� ֈ�z�گ�g~Q�=���'�%A�:�p�'Y�EPW��+�j
�igWa��0�r���^���:6��"u�k��ܩLe��b�0�ߙ��ys�L��
����ŝu�> ����f��K�t�볳�T��s�˩��"H��m>�ё�j�/)0��1�^
+?�S��$����D��QR?�g913=go����M
�4�1%�&�+,3����[�f������R�bƘ�=��F�~��8e�q�|P��<�p
+��$�
bN�77)W'x����l�#�
+{u�Qu�ܰ���U���;�Wż£��8���f{BЃd�������;����'S?��(W�Է�����!a�d+*S�>�U�E>��j_��{P�7ڬ7��WeQ�m{�H�>�)��=��=<)s��c�(��{?\�<���鏬�lW�n���G���/8���,6H�VbrO�!"%�+ᵙxa��S�i����i������(y����
1��k��b5?�Yf;���������q^�V���X4d�/^�C��󣮾�^��=�
+�UI�X\c��Aq���%��&�������VXX��%�
БMk�S��8g����k��o��kt��
+���c�����x�﨟Sβ�!�i��
+����roܚ|{�4��b���*�O�M�׫�:�����'�bbKoL�Ʈ�6��u�q���Yx�\���ҝ�&�S����\!�7�蟦�<�r�uB1�����[l�`}D=�an�2z������4�v��J�G�����O;)�m�m�NS_���T��cB|��l�bX�j@���D_j����D?�O�V�I��)�H#.Q�8�^l�,{�	p��G;J���ғ��ɼc�vp��*c�2�W�`RNl_QV^�R���rl�I�����qA���ՠF�P�t�����O?��9��W	'!�n�C}l(e�ՈP�0n�e0B�o�c�ZS��[9ۖ?�^���}��k?�T�Fq.��\�|��=�Mٙ�V�8Hp��7mg�Bu�Xy�ZK�r̩��vJ�$%�ϡ����w'�l�TXc*�&
����K�)��!Rإw2�]S�F�Ƀ���W��-FC��gɢ��*@��2���5�԰�֒����2��9��b�g�AHo(ѩ�ӕ�捐�����q�N�F5{��Dž�Z@����b���)tt���)�¨k�P��0�h�	x��A���V~�P"8�v�BV�R>c���*ڷQl��<��tz^��M�[�e��&P`~Xr��l+�4��}�d�~���Z�]��@ž-4	��^�Xt��+�\
j����Ӝ�i�+�{7�,�}���Q{-����ط��N��&r8�v���/C�
+Q2��b�Z0��N����>���&V���bt#�b�E�A�	�UG?�:�m�kk�S�a���8�2O��0w.M������~L����7x�o'I��2v@"}���%�����`l%��<};�\�~2o�GC��	w���
~ǽ���F[�}�X�Tq�S�G�L�M9��5܏�6|�\�k�[�We�*P�
+����P^�؃��LV������6M�ٙS��0���ԓ2C`S��ѕ7cr�p)P^)!^̊Bl��a㷷��]��A��:ǾRP �g>�RFJ����䘔۲�97�ހ0Al�HqE�ݒG�I�.Q#rΧ;��
(F�����
+Z�+��o��	.+O�F=
O�0&Bb*��䷔A3�#�����
`J�v����v�v�e�
+�y�U�T7��?��	
����z������b~G�� �G��g�[�!x��v��#���-�DP�,���$���2���a|f/I#67Vѝ�%{H�bC_�4�r?lN��8��0߰w
u�vG����.��ߖ.ό�-,q���u׀~�BnS��g4�����r�/�럹�Ć���Ð�)��_�ͼ�+>�m�'�5���N���|�hЙF�n+�a�YeL�UFS�3����$l8�"�M��rϑQ�`�5�"
+GC)���O4����3�e�D�#;��U��{z��T�zF�8�0�F�"I/�YE�#�Z�s;��� O NY��:��X��e�~���7�s��;D�Ƃ�������q$*�j�J>t��f�
��z�h�S�&����c�a��d�+�J���be�%�׭�<�Q!xc�m�؛س�l�m���M�A��C!�D�w�u1���`���ny-�f7`���-������VSH���d��D!���	U�u�\�t�fc�1q!�*� �)�eI6��}ƪ���Rk
+R���td{W���m�n�k�jk�MdF]�E�~q�9�@}�V�
+��S�o���cM�ov�/��ʹh�\z��[<��!�մ�|���Ttޜl�a��'�i10q�K̈�2�~2A�*نMZ��[���.L�e飯�l��_@�?��Y�d�TN�D��V�ZQ�J�z8��>{%��-�"\֏�F���,��>-���s���S`���$�'V9[F4/�)v��mKa��Z�v��9����M�v.r��߉�`�����ȫ1�n��/c���ᖩ�@oX�׸I�Ĕ"&��)
+I�)pl��|>����3�@�BԬ�v<�g��+�(�Mt�Rˁ�C����:L�����b�A���l�x>��+�!/���(�}�Z��5�c�'�v��o�5M�U+���ٛ*ϯs�Ñ�vP�p
+���?�;�A:y;j'�r!Gqڡ6�EE���/���s{Y*>O��hc���ۍ�-&#]:��s��&,T�J?ߢ ��ƫ���~���@#
+ s���;�*j�4NJ^���?V@��/K�1���@�����˄���m6�(����*��a�Nc
+��`mR���W ����B�,�!�Eٜ]A��'�_y�j��7,�\/>2Jj{4l��R�9һ���j�/��[��\�%�c�a)nk���M��`%�p�-?&M�$lT�!'-`<:RW���X���٭snZj/@�t��J_�["�nb�t]H!�b�r�6�*��;�w$tv>�X�6�q�mȯ�2f�^�%
+%*���o	��!@��$��#M��q�������R
t���9&��|�ҹ2�
+�`��o��!l�	Bx�c��
+l�i��	��p�r��H���sno�C��z�"���z�QX�6BO]5�o�O�K:U�T�9�`���6ST�����[b���`y��MI��L���f��HYt���YE�$W\�|(��O��O�6�8Q��	Z��Y�����꘥����,��H@k����hl芎2�1�]4qo��g��{{cH�چ�,�����n��A_��~�v�I#��)��+kũ�E�g��*�8J�}�C���9����wc��m�d�,��J�Jf���d�&�r�z��r�Θ�/�Z-�l�Q�\wg��v �Y4/���U��� ����]B|>��J0֚�C���@~�cs�x7��O���.e��˵b�@����R��ݲ�VN.�=\��z{L��2��O�����g'�gڝ�a*Zӹ���w
+ܻfGeZ��l����b�'j�ģ��ߟ=�nz��ӿ@J�ھ���Oa�Ħ��V��UB�H��˚���ld�rcz��+ǷEo�#��#�0xR��F�Bz�������5�nP��A~�خb���k�>L���h'�m3�…�L���^Z�p,Q�>��2|j�5)M�&_E�L��;]���0�,�
+)�v���}��݋^�ٗ1>3z8j��MA�Q�(?Z���)���ZT�Hğ���I7�Φa����/u�$Ɲr	b��t��es���''��d/�@>VB��D��R�Jz�y!�'T8꾵��C���i
+չUZ�ު	i#��^���量h����~��A�Zu�]G��,R���!dFpk9�|_EhP�H�n��/o*��"-w�����4�̫��^{N�"H�(g
+7n�Y���F���DXJ�zVD�+�t���f@�4��o�i"��~���&9�H���s�l	=�7�"u�	�1�@�3�A�,W���`s��N�2Z��ʕY0>4����ɾJPV(��Κ�H�H�(�t�̼a"�ଫvO-,�v���'�d9X{9ݙB�e"�ҵ�[5惰�c��)��������Z��F���c�I췫���Q���=�b+��T��<���_�n$%{b��x�uF���g.b�	+MC�{��hP\�R\r��jDsZ�U�*���5y?�*7���ؾ�m�h����-hp��1�^tIy8����Ö�H��+��}�����j������w�P��.���t�o�Ŭڗ ��
��^��^�^1�n���M�{�.@��׽<'8�ދ�it]�H����Ճk���y��[(�q�:6�,��o
+�N���ey��F�'��yLa:����фF�u��"��B�e�[�{M=�� ��
�e��L�������K�u��jT��L�����7�\�`=H��#N�u�Uy񄔍̻ܯ�qm�(�AM=���Ý"f��h:�vGHx�c詤,�����`K!�����@��̪�m1À$˵���4G	g�*4�7eI����L�B8W��e�~�Ϙ���75	��@�m۶��m۶m۶m۶m�����}�?!]�I�C�{�ˆ_NRC�aO�y���S��Zȵ�a�3x=��G�"�H�8�r��_z󯎲����j�`Nh�P��qz���9�6����!��Tl,��+�*�����l~����a��Q��x��s|-K1����x�"��~$�u��/k�����4`XQ��@J���7�����b���^=��:��>)��|A̢�xP%3��<s���2��3�R���lGp
+3�g�5�^-�\�̴ߧ�T�Z	���BLj'7,�G�y�~�9ahR�,���?�8mNE�ٳ���7��%~�t��S	���{�a<=�8Ÿ�T���C7�|�v��`��a�����
+�:���n �w��)����1�z��Ð�}�E�A�񆊧��H��/B_��5U"S�Θ�����!sN*�0���:A����o��Ux+�Lb��������a�:T��W7�
�[13a�1�*J����N�Q�'�����Y���;�(H��?%�ڧ�;oO�6��
+E^�EX��O+ұ:]N>N���Y����^1��*]���G!��Ҹm>���?H�i�� �O�����A�6+jճ������v�������#y1J^���uA��q���q�X��ʬz(x����&?2�H��H
��ZdF�\^��HB���Y�_�/20��[�v�����"�c�Lh;���g՟���U���dk�Vp�J �{t�G�E��d���G����גW���l.�Ǭ�9ڧ'r��KK�;_��Q��52z���B��}�V��1p����-FR�?
�:�6ٖ�Đ��<���t���0�b��$�R�e��m��R�2��
��)���'��/bAO�����ib�/I�ϒ�7N�mT�X[k��=�3幏<�E��B!W�����#MN(JYͤ)�����m��c��&(,Pb:.�q.g,;�&���i�3��&/��2 �α��爇F��v6Fku�k�Rkh
6~"��!���z"̅���x.�[;�f���g�.���3Q�m��׋���W��Ih��o)`�k�~���;=,��-!чo?:l����U����`�5w�"EZ�F'�ͫK��i��$�DŽ����K��p��c�n��3ɠ����@] ����t{a�TJ�,�؜HY,$1D8�s�G�/+$���gi6�ˀ��Ѽ�y\{�_����"�V�r����;L�m�i�?�Esp�o�������Ţ�>I`����Y�#�.�u'�\b,'�2�J�(�G�}�; R��2��2��JM�L߶�r!�>�.8a#u|�9=��ȺC�u��x��o����${��j �9<|��C�c&�o�������vF<^�������x���z�YU���b$q�$5e��ED������)z�-;
+;^s��&�C���ĭt���W6���,�s�{�Y�Wj��w.j	�N0��.�ƽ�

+g�\=*UF�����-!Y��WU>��4�^b�9s��I9�*`ϧ{�J�w�P�4����e˛`^qW��5�Ŀ�OT����o4m%�偽�c~��@�9x�
q�v�`�2�VZ�3�6���J�@z8]��Ń�8,�qWk�P���b�C�����h�ʅF��$��RVq���Ajƅv� {yhq8?�%�;�}#z�F��SX�a��%��A�ӿ�8h��2���x��4�q!�ʆ\�p;[+�|�^��I-��s�t��n�̔�m��:@0�$��
+έl�l�lFM.+�V���6�R�.ſ"8�S�bT���W�N9J���(W42�DAi[�S�f&������������Ë�~��S)��oex�(Y�UE�h��ŮL�4�n���I2�;X��N�-~��dT�_�R9��8�(�8	�$w!P<S�)�'����������?��6kC�ofJ�H*p
L��h��ݙ�χDm��Q�͜ȷ4׾8�	����W�Je"G<j����:y"���
+��B������(��;�=N#8@��q#8����͕�R�g�?&�5g�!«�3	�c��pf�y�M ���
+�Sʹi�-��a5b����砶6uɹ����rP^�ם���\�~SW>�r�R�q��C2��g��7J��'E��B(i�rw���ҝ��z�=	���Em:]����+��	Q^�%���	��4���e�.}\��MK�	�/!��̝�'p�����l:�l���}'�
+��j�#�rPMQ �[Y2Y�W�G����Y$�h�o�ӟ����y�QX�+tSk��_V�>�X���#����%Q�5����N�0!,�X�8�2�(�:�	2N��R���,�7���D�Tx6���P80��=�Ĥn�����ģ���%R��*JJW�Mq��E�5&��A��T</�\�0Q���<v�<����Wa��jn��R���&=���_G�����?�;�+��;>�}	p�1J�!�#˧]8�BQ��R�`�&
+�X�FX��� r�m����ɿ0��:��d�H�s]��G��r�.�E��K�c;F��rPv�wh�����j:;�#��{��Ǐu���&,���`���1�K�o��yKlp:�=���g]P�"qyg�
+��
+ނ�_�
+B���ցs�{^�,[�n�|�47(^\V7�O����D%�iy��@ތ�
wT*?�"��J�mG����7v$�k��ޖC�71����h�a��~<�t	������
+��sL���35��=ILl��uR�Xt�<7[~mn��&G1 ���f�&9����K@ǀ�R�.)l�����$>�&qXS�SR�7�jf�%��T��e*�k��_����p\��@���.�Ɣ_���^_`7e������I�y�Lz�N�b╛;��\?�2������&74kX&#�z����<�LU~(!ð9�,g��7��xzKm͜2}Ib��O�����:��G,]���!sxn�S:�A"�+�Կ�d�B��e�3
+|�8�a�B��l7	=w���*��[#��5"��)���_���І�A9uܞ�
+�ɠoh�l9'�N��/P���H[F���L^��/���@��0|�(��{������vr^�Hc����tb	17�����3&��a��Ҡ�-6uF�ݦ��1���W"w< �����W��H;%6�Yr40Ľ�]�_و�7�E��@g��DKU�(���˹X��[�&IW`=�!�n�d�(�F9��iu���3n���e���X�8����l�g�;c0��i�r��a�~D F"\<�^Vg�y#(��{�60oR=)nq�4����D��r-�f��8�C��=�K�P���Oq�w��a	����Ȕ6�wf�~}�&�;�u�`��H�~nv`c�
+a�R��w|��&��G�k��YV�C�S�I��j�d,�f۩�x�	_\�ެw,�`1i,��:A�w��>?WTĒ����<�g9�@
W�H�ڇ�1ߧ���
c�݆ƬiNڱ:������N�1�zAj6����<�5x�wU����VŖ�W��N:�WNj`[��(B.���UE*���p���}���	U���daI��)z�j�^�L�-�I��b�ǟ	
+�������d��>��R%*D���Z���;��k�3N+���!	��1�]�h@];gn�,��oU�ॲ8Zo�>
+U��T
+<�Bx����E���˿�=2b�&')��� ݞ����9�ų���3�h;�d����w�gc!tL��aD�E,m˷�h��t�&-فg�U+�A#q~���=�q�(�9�P	"�X��k�3�xU�#
q8�/oU���[rj0gX���f�:�qy?~Y
�ܾ˽���M�����[��eg����t�T~2�e��8}�z �����Gh�ՙ�����B#�J����S����b^{�hF��(5eo��&M`�Yn.�R���)04}�ۏ�;f�4
+���}[�yjr�����R�f@6�G̕s!!�5[p�!ە��k_
w��fD��)��@���(;��@k�즌$����Nr���J�ྫ�v�0lj��Cq_+TR6^�H��؊t�n�΂��L�gӠ�D��՚Շ����d�Ҥ��p��3�«�K&7߲���CӞ�Y\JW��q���w�j|���D�O+Z�I�XYD `6xL�ϑ��z�?Ӟ$� 堾rsIR>a�}���b�O��3����yϯ	�
+F����M���?O..���:�M #�;���
+��� j�8�lվß�^�瑆h�Y/o��*}��Z6��ǐ~��р���:Z�n��_d
+��ח�ƴ�Q�z��E-���Y�87;ϹǮc�TAf%޺x�+V|+��sRJ�DŽ7��F�>6���Bq̸��>�O�B��,��qTE|�����d�P�v��WxR�	:�(�����nl=��E:���.��	���έ���
u&h�c���o�7D�/v7���t����2x3JMn��b�n��g0Όƨ����p���'5�sy���:��'���G��.h5�����D̓h28q�aX��^�&��ٮ	���
�o�vں&ǒY�z�t�l������zw�fI�}�Qc��䜥���ú8>SӨR:Y����s��7~�YR�$I
�v�8koÃQ ��,�(nk$��U���C5�������vO:˩B{	bW�߽�D�����ٹ*�nQ&���.4�ݿ1��8��x�rnrFEb���h�M���asot��#�_v�����=��Et�6qp�6���;}�p��L��H��l���NH�ig7���n��8��S��
+C)��P�0y_���K+".�<c�k
�U��y�v
+��`��7&��:���`�Mp��@�솕��4M���u����ydFDn�ۆY��d�~���/ɱٿ5�N�C�?��}��`��&�>�H�G�z�V]Va�i�Y��Ȃ�hh�Z>��{A���Y�+��dҞ�7CL����Ur�lО���m�X9�14qDŽL��BڗOօ�	"L�v��O�XФ�%K~Qj
qsD�j����4�`A�&�t[kr2�9�Irê�ɯ���9�;6�"Y���O���)#�p�[��/*���P�q�-%�P�,�����f#޿σ�<80�a�K�v�+�x�
+ӑzUK1��B�k|B����z#m�Q��9t�=6�X%�&�+<� �8C�JN]�C����;�f%�/������t��%f�5�T�n$w�@�K��S�~< ����}e�cw�R`��z��]�_�p��a9#6��4��[�Fs�\�0�]!P,��Wmͭy�F��h�����jMJl�+��3,�����d�|�B�Ǭ'��ѓ��R�ӫ:���$
+{>~~Rl�)���MJwA�rck�@���h
+\�<��3/7N�<�$*rU�C+�+jg�|���
౿��Q�ls��kQ9)D,��K�9_�R��Z�9�wML�WY�Mz���؝�$�y��P�sm8�2��eW�pm�<굓�%��7�x��������r����gļ_��C�����܈���+���'�Do8�+Q���
+*��:ۤp,r���vR@�n*ӛ�����s%XG}����M���$�0�U��4�a�/@t���_G�����[�v#u�c7o^C/Ȫ�\
�+\��i�X�{q
�v�P��c0㓱*��Qs��|9�?�&8sh�U��J�J���A*kH�[KX�Ċ5Kf��@�_
�;*��}������qkfW��������T��9q��u��ӜZ6��ҁ�K#�uv}d�+��M���i#�ذb(e����m��L�h�y&h��g��U����M���s;���4#|(<�^Ȑ�W���O�������`�[��M�=�H����BQo�'��9}���?8knI\�,-5oT���3g"��j��(\�63���`
+R�t�P=�e���-������K�w�C-F�3�_`쨥���'(�(���l#�%)!�0d��Ń�7����V�䀴�˲
+��.���
+��������N�1�h�	KX��P�0�g���"G�۰����>3"�h�,���r��<E�}M��31#1��x��7|�Bz�7+E�R1�g/��f�\�	.�|��'�|��Ӕ��i����C-�c�E�C�ϣ��M�&���;e�Iڨ�#3���?@	��������n�)c���3�;_�^�:�A���x0�B��"����V��
ҴH7s��J����U߁�)�.��Xp����]� x4#f�
;��j����?4ت�������q	�y�d�,
6z�1���0�y��#���)����b��/_�m���(<m�`y��o\���E��g��[�y���t��u�Ƃ�N����-����Ą_����X
a�� ��9�g&���6�2~X��6���Dhy�����r�*�+q�u���&�)��!�.2�Ocۧ]�ʦ�!��
 �S�O��Kˡ!Y�7,V�]"~�sh���J�dg�,fu�iҠXN��Gz��O��jM1�I�`e%�������R]~d(�޻�����M���-�J�n!n�#_�����<�ps~��I�d���P�#������0=j��D��������
J���^�ؒx}�������\�6��C�GT�/)��Z֣��b61���kq�[�������Y������bwRb�,��o�Q�=2�6�B�	cq9��*�l��-�D�ܵ���¿��
+�@A�O���{q��xC��)I��Ţ.�yq��g=���$b:�`��ܤ�M��c�����>�R}�D��-h��#8�����sߏE�S�`���8�����Q��[Q����l�ٛ�EL#]CXŠ����M-$.���#_s�yKh�Ǐ�BfDYg�=I#�LR7�-�����>WH�b��6&Әo>.H��Iۯ#J�]nD���#\ih�ΡK|�Gf׾//t�1Տ���s8	��b�y�����H!�	I�����?�,$�u
T��Vҫר�}Ƕ�KpJTታ
V���
+��@�'Y�K[��i��*�Pd��HJ�;��#�.�'=&B�C�>P�;*�­y������EmF�p�ײ5��h�qz��H�V�[$��}7�e�S%�▽B�Z�y�;sRB�9��(t?��[n���LvW�>��������_����W$�;�E&�%%9����q���-Af^�����ٙ?>�tJ�߶Ɣ�j�ʿ��kY�ڃK�d�����U�䎶r�0q��d�Y$���T*��0��ehS�ߢEl�I���Y�>��!���tU��Wa?�}�Z	�W��|HO��'2S���	�p��2�q@��9{���5��K}�tO�sI�9�"f��f��<ȽQ��o�>g?L!?,H��"����<7�z�~rs�����:�v�U�wY`t���p��*�O��9�l�������[!�
+�xK����/��om�(��!ɣR�����?��̘HZ�;]c��x#@����0��H���/�GDŽk�8��y~V-.;�����4�Nڲa3s3¼;��A��lYJ���	q��|��XsmO���_�m���}�Gv����v�a�3�GJ��LDόA����\-��#�*4���y�x�q��SL� 	��B�f�.���r�b�S�����z0��^�80J�X����;6�q)P3�v����YTd����$k�e�|���ͣ#\������\A�z�a������4>0a�̔~9ƭ30�}��D�C�\=@ԪX�x�,�u]8j�'�Nrw��^�=�R֛���͌&ɑ�Umu�ۿ(�F;��Ky��c��(_9w�hw�%��t������}�,%�Ր5�)�C�9���U�0�p��oM��#�G��vݲ�:g�W��(a��3a_X6�浥�}z͈z���������s��f#S[(�B+[]�R�F�t�G*)C\ØxZ��q×��C�0��1�|]�����]�yG�Q�Mʛ/�M����p�ю��;�d����s��73J�l�'�&����t�#%���|���y��*�ˈVs�/'�K�������Pi�����G�w�G@�$�x=.;)/�W�e�8_`E���y٦#)>�刔������>�Z�'U,��V���%�#���!b�C����Zp�^[B�B�;�B<����8�x=JZe'����/�GI�T��mP=��߇�`s�y`&6���8g>f��]��r��}��U�wU1� ��l��� ���-�Ư����[5�j
+Ƹ��qhFb�i����x��5L"��s�uWQ�����7Ђ���5�s4��wW�dKd\`<�9s���L�%�z����/�8ч��+v����
���6�*��0dH�ɫ�^Q��R���z�'���T����|U&��:cƑ�u���]�g���dO�����Y�mS%��u-7�.�V�K��)xm���\B`�+����
1�z�\r��1U�{���
+b5�@'E�'��Ƶ�_[(��㕒yD�a�z�Et�����;BMe-��b�R�d�L�SsZa?yl9Ng~H5]u���qF*����ij,7����u�sέ����[�C/���j�ƩŹ�!7�(���#�6|�++�d�]D:�d����v��N�Kx$�h=�`�D؇|-��1��J��pe�|+Y{|�4���a�0�o�]:��xSP�\NNp�in�*�8qM�{+iK�w�Y�hx��$��j�dt�	i,|>�VOR�+�~��v���ùt��1�@�X)���c�h�������i.clbp���r�
+�����c��5�>�΁}`�7�CRaBT��oo�:�7����撯|�)ww:
���陈��͂���޳���/g����cI�t�*R�d�������Øў���<,�'����O�F�(�� e�cy۞�/�udg9����CNd6���f��"�ո3A޴�؞2�f"y�ܝ;��
+U���V�QBր�[`�U�V⳽�O�k��������y@gͣ�5p�V�$�B<iw(�
+�\G|�.F�5��@\�?^YΪ�\�,�l���^�|�:aCj��$$�Z9,�4je%�3x�g�֤���wz
o��Û�ͼ��e�ڬ��j�W�KF�ȹ�A���u|B��5m���
���l4
�/BCٿ��$:�뢼��;Еk��*����͵@���k�W:����@
+\��
 ��K��(0��d�?���������JBz�JQ%C0:[`����,�TQzW1XA(Y[hugk	��-��*Yj�Ւ�G�:��'�*�_&�%���ߎN",�5#�;H&Y�익�d�2}�v�N��z��}g���{M�Q3K�
�@�'v
+n�����M6���ݮǻ���)���'���6�5Z�3e .�ԑ���v e�z�@�
+0�^fKKd���&�:��������hakI3W�L��F@�����a��xxEL#��_
+���]"�������w���Rr��àX�eOƦ ȧ��-�
+m���
+!��]i*�J����˸귗҄��R:N�s��f������{K0�恽�j�B;���=w��1����Asv*c����$�~?�������~\�_:@;���jd��Z���tΫҏP�	�#<�t3�8j���0����8���"?��`��k�.��h�����G$����_���0�����O�I*����k�Q�
L+�I��m]$&#h}h+������?��.�uM+.P�t�eg�p�	.�����A)�"��:��˕V'�d���n���.�cU�BG�_R�G�)�X�F���i=��Q�,�4�N�Q+{U?�
���t��d��Y&��
+.XC�R~���1Ot�y[�,��MR,&LU�=4HЕA
�!�d���%r�y}�/�sy�j	�+�s�}��W�<����ݰ��?�`u�s5��t���}|:}i���ꁇ'������]�+T��so�֡�q�}#Eo�c�h݄o6Vg^K�#>-od�"G�O{�1��ˆ�N[�h���4�r�u��c�O���'z���]|�(��0u,k
!"֧��S�RĒ�P�������+�o��������
��?k�w�(o�����We[)�Hψf�Þ���`%�����c�SO���!���@��7Z�)=w�U�Q�;�Ժw�KQW����໚	[E���)��Td�+��!�3��j�	F]k4��Ϲƃ{j�܍Ok��-��Dup�����^2	Ml�k[�f��HC/M��;��twt.+�ƭ�C��8�)qݫT�_tI7b���>��∎<H�k��*լ���V�x됨|��a���0�I��3�'�(J��F��k�w�[���6LSO�Y��?mW���ױ�\��J��
`�&��	
+�R��`jl,.&jHKY*�-��T��ڍex�=1q�ܐ,.S9�K�H�|���D7���=��>�N�x��Qq	Uo$EH������V&!��ϑ"�kiu��N���4����gI�W��S[�5���w�3T�C�!&��K�^����c����V8cߏ癳
+rͫ��Mw��0��
+>$�
�qN�J�&��s���\�=��*�X�7�+z��\�N�D�T'^S-�U�+�jN�yZ����s]4�=�g�	,=��c�xߚ�rugfY}F������"-��G�\����@�����өBani��uL������6�A�!JvE��m���Q�6�Q���?�VQ�E��?P����ĜӠYh���*m�-|TE╈|r���ĒH؄ۋx�8^Z
��8u��{UN���*ўm��1xϗ�3��$㙾�5��+��q?Nlj͏��eE�Mr�Z���I��{g���'Uy�����yF�Sx&8�a"�kz�! ʝא��
+�}-e��������w
�(3�Ff�Hȗ67Ny�|Y���;_w
C�
�ܒ��Ŝ��Ƕ�.�l�Ē�׉'#�A��hX�T��j��%�/��ڸ�[�t��XzK��m���� �p��2O?��<�
+W����c+��{:��cB��M\5�9�X�hN�AhJ���Ubbk��&�>q�,�Kw�y,a���*^���0�
+����
+;��2���h#�N3'Y�fO����d����ί '��j0h9=*pT��7�F�T�����kЭ4]�lWd'L��e$�R�*&��%���U�@S6rm8�]O�Z� /�;���?�x�L���ωʦT�Ӆ�PAF���C�q�!�p46��� �@x�XcL����B���l��_w�/Jh�0ب]�>:���Sj�	��{�ie~
���ky�a��m0�M\f�f?:3*0ѓ�}���ďw���m
���3��[����`��a���^[����7�O�A��^r*��
��]��%�vyD���ȈFOd"������+q[K��%j5��ewbv�y��^m�Q���#�����n�)IF<�[Fg�\�"�׋"���/Ҟ�U)��8�N���hijK����N
yX�&5�U��I���邿^e�NZ�/2���+T�Ax�qz�;EXq������i`��\O�$>�2�k.�%`���%��%TT��1��[����,Ь�ȍr�vԤU��B�k�A�9���C�B�V�G�	mK��|8�6(��ɰ�>Oo9����	��셙�1;�L��w3t����xd��no9�7��_��(�'u��	�wC
���>�{�>�.'v٩.�8������P}o�%���TGD�%�!p��M���9�[��ׅ�ں.7�N|o�"�$P(�E%�/Ih7��/iK�Шh�����6��WͨZ����&��h�(����V�q"IP������+�{��W�Ș2����$jbi��}6��gң�e�8�~+����M�F
MYgh%��k���9�f=�b(��(�*���lJ�P)s}�;W���rc�fc��;Vq�4�I��=հZ�
��_�����t$k��*D����O���f��}ڥE�3��������B�����ȪO�o��p$S�Z3�I�_�Z�l�	�Ba��aCH{�,��a�����NB�:��؋��R1�:��Ma��G�Z�x;��v�+�=B�6�y����7<Ec`[��&�	�����Q�2���JY@�q���Z�Ԛ�!��'tp흑��*2
p�~ۂ�ʍ���]ₕ>��c�ÈE�R�g�
+��VՃ�F�1�=f��zy���=y�}�d_1��u�+�_i���a�
z�I�g��-��q�����V�'�sG�:��H��^g��W*�Lu�H���*B��<�����w���E�~�Cg�<N�=]V�sp`����Soߟ����E�?!k��b�����i��_ְk�븤ӣ{c�I�v� F��\�6
�a]D[�鴿B�K�~y��uM@���Lr�
+E�t����NZ��~�^Ә����
�A���[��RtI	�F*8�R��b17>�3�J8�ޘOB8����
����a@�,��Nؙ�):iQ��Yq%�8��s�;�Hr"	����f�Y�B��g�9�q�>�d
+9$v���?3	C}��7��ϸ5iK���7�IZ��1t�LLP=d�@�0�DG�Mwf����y��B����Ha�Tm�/q�Z�t�~4�ݮ�(@7��ѯ/��]I���*`�م�B��Y�0�<�U$��xI��e�5�+}���D�"#~�ȚO��b�Z&IZ܋�Q>c��Q�T*����N楨���"����3
+�Bj6@����"X�\�.�s��͸��Wf�3�nIf�T�������rJ������
kL-��Ӳ7G"Oݦ���͹�J���r#e��_֧��P:$�dv~������[,�y�ޥ��u$�Tk�|��y�S�ZA~�iܤTעb�&�KE�)�6������@����2H��1A+�f�0�.�2��A�ƈט���o�7Ĕ�6��l��j_H�k���x�L�ռNа%KT��A�Q��:.���x��m���{W
+66`�3��K�[�i
i����ٯ��b�ٕZg��=�x��)�g��Kx��f�f����,`�i��O��\#�J���B��HXNvMP-\>�>;^��R�%�ȱ��-�[���b�p�����2��V�M���3�KE�������?�$&�t�f}�0�4[�W*�h\�l�� �zo���=b%=ȏH(�h��Gb�iVA_�|���FٕPnR��6G�V���+�HE~�0�U���Ċ�WW4JF�߻�4�*�>�jWK�� ���_(��Ībq��h$�D-���n�p]DZ�|��
+ϴ7L�iKL}�;u�r�����-���Lne���=5�s�Kٚ֐�y�@��n�?�:�a���s�t^���t_��[�ɘyx`�Ɔ��1�.r�P��b�k��>�JNE���?/���Hubo-(�B����X�'��
+C ��c;K��T'O�*��2�#c'��q?"B]EO�*�������Œ�9��<����R�4TXt�d�4	=n�9쒗m�X>h*:�2d+c��r;�-:���sR�Զ���9�r�:�E���"
+��%��o]e�C��J�^0Y,J�WR6�@�vD�" �%"o�PqG��>r���C�]��r�gK�:�NGy\16R�*�*�=R0D[�L��_�B�+�m��i�E�9:�A�2M��7y���=%�	ߠg������4�
+��8B��J�����Qek�V�*��D{}�d}����X@�q�
y�������'B���-D���Y��.�0�;�]\�$����ԭ��̐��2k�T��^a�0b�����5�^ɰB.��j
+���-6���^`Ƹ���S���7��L�V��)i��_��`��?Ff�Ț�P� ާ 4ô�x"	J� �b+	܊��K���2�ɖ	��R�	v]{)��Q��*�ٟB�}���=����V(X)�K/�H}�DҦ���r~��/|&t�Dw���Px�&�e�������s�
+n6�,�fK챊����e�LZj�7;=���iR��=�P:��ܻ���+,�t�ˌ� 
+���ɍ�=Ťu�6SU����Sh�	�{y�?�����p����C638�O����׵��>lU$�7|J�
*Ea-)c�����Ν	'����ңMܫp�]�JX����%��!�U��/�ۏ��>^*j����Ř�mᩥR��O����++�ƒu�]����>I�{�5?����$�c)�=_�|�?u�_��?��P�8�J���ϔ
_���V���kS,ՉKС�m���L���v	��D1R�DF�.FC��C��\�z���Mm�ؘi�G�Z�}��+1��y�k������l��P���2��f����+���T�yY:4Ĺۥ�[�CK8�6��I�	��,.�<qCw,��?kEwYу��g��7���\a���Y���u8+-%]�7Q�9�F��5f����G�s�w�v���MF�w�6�.'������[7Ӈ�:��6gS��oؤPG%Y��]� zj�,��,��7!���+�y�*�|��=�C�]��\̩��w	iH����v����2o�2�oGw_���):��TFX��V%��@�V��6�U普9&��"�H[Uy���ő�\�%���`�~8�:�a!�V3B������\�Ͽނ�+��)�MS�������Sb���xX�r�rU�p�]p�Sr(1#��C��=R�=
�iт�nS�F��S%�|�,(<|Gˌ�����Y"?���3��+Q�j��
+�i�u�--,��`$�����d����~n>4�!�s�+�W�x�&��>L��۪̥��N��B��ډ��q�I�%U�!��@�q�ј�$���j'��T�X��yg˯��l���Ȱ՚w�v�z%���[���裄��?6��-x�&&Y��Q-#vP�}.琐ۻ�~>�[�
+�;��1dܜ��t��/V肱�9�����������!��=H�g���k�W���pҥ��xb��2���v!���ȅQ�e%�d,Ef��Vf�����Uh~���	�
+�s@�����`��Tbo�xF(O�b󔅗V���I9��BF~T6������~G}���:G���V�F��ݔ�`B�<�CE��ES=莻U���]�,5����c�
��C���T�?O�⛥���Q�֤�)-�mcHa��u|�%�9�'��_�H\UȨ>t%�$n��%��Y��Ⱦ��!�A�E���o[�~��I��e�&0%!@�EţO7c�Z�Q�@��殝٫��$:���DR�O��E���Y�Èa�*��W��� z:���G:f�GA�-$k��$jYn����hL��]�_\�I�����?ڦ.N���ئQќ���$���4�r�i!a|Fzз��]j��e�!�����ƹ�S�k"D��<"(H�,bq�BZ�k.T0V���*p�7Z��DYw��-�w����c�/�:�?r��;�7A�KYҐbz3��\��	�Ū��V�]�@�A:�G��v�σW���Dϒ�Ս��^�+XLZ�LCg��z���
��?��Ҳ�e9����e�8D�t�v<3�]����5�&���]]���H'8�C����~�`\a Φ�2�U�]|Wm�VHp/��g�!���)e��K�������t�Q��g�ia�^�3�N����1�6 �a�?����l��U��q�-�y�/U@re�#�f}�YJ��;��a�m���D�1^1}S���~p�T
+�Ut�֜�-�S�ճF�J�	��&\H��T4�x'L�K&�*ds�������H5✴��\{�cU�Gl�̻F+�Y9j��k�o�������o{�sB�5kN�]��غ)ɤ�y�%%~*<{�I�3ρ�圉�%�����j`g4�����=s�n�����5զ'^p��=�8Iw��6���������t�B�
+ۮj��)o�
*G�3���F����v���)�C\���}9�ʵӲ_�c��|�Ԥ��bӹ��Eb������-	�s�-��f�	�zj�pB[��rH8��y��hr�Ue�N�_�yd�>�Ӯ� �w�?�x���"�Z;ɿ��i)@
ת�ie�I�&Wc6��p
[�f?�@F+v��f;��K�b5o���MY�8Ѥ���96W��J:�Ķ'�m۶m۶m۶�$۶qo��~�}E㩮�F��^�1x�/8k���V0g���GoV"l�rQKd����&��0�����S1�N����m�/	^d�H���
+q�"���Qsd�)��,���N�j�����9m���<-�Q4?[���ʍ�0+�2j�݉��-��:Ϥ�V<�������d�7����A?�:NX_,i�D��D�ZO�#�١4∯<�7�a�L@4=������\���5>4�����/�=�����d(�>��(�vY=x���k�,�h������%�ɷQe�s))���N����Q�V�8w����X�Ih��@�^lk����>�k�;�א��I�i~5�.`�z�D�mV����v�yέ�m�$��^-�|xt�`Q.1E�P����NB"�r�5���{�]I�X\���̿���T_�i�}��7
+�q��B�)ԍ���%��(p�w0�Un�>�
+�F�B��\%
O�h,7 ¶���9��Tx�"�f�?���O�ÁJ;��β�M�����+/�r�(Jѥj��.E��lDHG�P�TS+�j]3�";M���Y�}ǍF0��E�~��ӹA`w�K��"~1K��(��w��Hz�j^����ϊ�S0	��(<7���-L�y���^�$u��Nh��U������g���G�=F*�$���n��9
+��5VF��x�� `�H����Zpk��P?x4�4r�Z��Hd�l���JY�񼥦�ULc~��?zUP��@�b��|'J�i�9=�c��=����oG��u�n�����os���F˼�q�rb\S��|���k�ےd�(�
+�m4[x�
+��6`Q������X�����bִR`���ʽq/�4v�<ש����a���7��S6'�?q
+����@.���!��Əd5/KDd����\����E@)�ТP'{A� �`e,Rz���h��M��В�H��w��ff��Ao!b1�.�rf�J=<����4�wk�4
+8��4DK���(fU�4ˈT�"�?��Z�a�c�C�~�KR��T<EbE��,	L�a�Ԃd�8l[lj=?�59��=�x�d]�PU��X����m9BF�~FH�5�K�2]\�c9�b����6?��&�)�*l�#���.��Lt����罅ё!��{ރi(�z}�R8!�Q!҉.�-<����#@t��_(�oH
T&HB/���j����h���$a�� �^2�z����*�����m��5j�b���;�E���Ixn��_���r�}���;.��h3A�M�,��8^Ejt�/̥�v������JC��D��z
pm������- H�Xۤ��+�ǵ�c	��>���j;�����V)��A������XL�Ë?h�,����������`=De�ݔ%����9�sZ����LNV�.c�@Lƌ�fԒ��@^������D������c�4T޳!ޞr���ݲ���N�)�w�)����z*� [��j�����W��1����JU��Eǁd'��h��H��пgG�4<D�����+�N�ٌ���0[`�%A��E���&-��2_*ZXo�Wh�a�U��b�L���G��+�\�;��
+�*�Ġ�_��Ry��&B}nsu���B��+�߾³>��1[�S��P�6�K}���w/c�yN�O��tW���o�I���E?���Dƕ�8j���|b7D�sUU��(�G�V��*���qFR}�ar�������*�Bٽ��?2&%c��!ؓ��A��_�F�\���9fʛ�����G�$[�Sk�Z��q2Q(�x9� �w��M�u҇�F�0]��U�G+�1f���cdD�r��[�yQʗ�0�'p�:��!��,|{u',7� B�_��m~���[<y�0BQ�0���L�B��S7SEDqj��'���Ўq�Wـ��l�om��O̓�`�'�\2s��[6��mX�K�$��gց¾������u�tO�!	��̰˓��,3�~���"l}!^=��~�}��)�n.�ii���H2J�H�����
+�R��,3�7��r�=m`__��j~��PX�}M��&H� �8j!�ύ�6���τS��hI�u��bXKf}��HW@�J�"���u����T�j�[�=�;�qT���~�$a��z�������8:�ɲ�+�c%������P$,���ڽ��1;�֩,���"n��DŽ�voAS�,�m3l>�Ay���9�\�R{�KxG����I"��v|����&U������@�|�"Hy佹|��a
+DL���3����[	'���}�zv ��Հ��s,�8�r�?�50,��X�P�������|�+�t�"��!�){ù��V��L�"��ۙR6�v�8g��Iv﷌�;|�n�\O�D��Da�E&%C\@F�>\�^�(�{;J��N���8N����4�FE�f��mɢ0oV|W5$������H�M���Af�߸��Y��œ���D��ԾK���l���N�Gh)�5/Q�1K_:�<e]��Z��s4�N�Rp��q�С~����((a"�5����_QD��C+���ϓ)�")�?�w����x���\/X<�XF2�w�*�r�@,ʊ��f葆��F�l�..��ցu.@_MF��[�#�!�r���q�������{���j��b���r���������)��@�8�q�s�ح���c��䯹�Biע�4��f�P�}j���D����Z�Y�ꂙy)�p\�6G���d�wY/�g}�3<Ƥ`$�l^2���dY�hY�=��dȥdsȄ/��r�s艌-�S@�eIj��p砳t\��8��S-�'�d�r�*�l�P�e:wf5.IEXa���-�K�k�%��)^ʟDE=���u&�P�%;q��9��}�v��%���/{��FCn�������b��.-��;�����Y��;�-�\lo��YT�R�0���"��9����a�k�^5XjU�|�w�t�3`:$aq�p��)�xX�d�ۖ�Y�\6™jy��(��w���Qf!�ty��-ָ�e$���M�'!�2s�w�x���?�S���q3�g��X��!����4�k����a���_pŝ��20����,��U���)��	h�O��9�\���U��R!,��
+�|��M�{��:L�5�����h;�-�����C�~ X��H|ٿ�i𒻿2�lj��d���k瘖{\��1;��:��\�y@���e�ƫ�������h�����qsF���Wj:��囜��w���B��yhL���5�9��O_mF��� ��+�9a������r�;-k;&��J5�Mz�	�����3�!\�kM:j�O�ƇAqƍ(������/�9�Ws(�4�/Q_d��Ca�\�~�1TB�
+^��X~�`	�݆`X��(�������c�RݻJ�{���zA��#�}dNQ�p���NbW2"�|�\*K\��*�'��kTG�CX�q]o���%���C�CT#��?L0��殸@����G��k�
[�\�[}�cZg��e"�bf�1��.p<��h��c���\�X������"��PTς�$b�y�
+����KQ�sS��Z�;��
N������*�+2��v��1���k��-�a}�G�ql�^t& ��[ژ�M3����Ή��:�7�ߥ�qx���?�I�h�T
�CC�
+
+�D�}��գ����:E0�S'��7D����!�%���Y�8�����Ĵc?�Ih `�"�
+/@l׼��?��ua�`�œ�7P��
���¾�#���J"W�w��j6
+�!���Z�3���נ��.!Wbfj���2�uT�M�U����D��֋�,oU�j�*��h0ݪ��+.j$nW�r��X��1���j
�k{,ik�|�����A+���n���_5)��Wm�A��X'�`���p�54G���w
v�l����:��P�9�Bg9�[�*��\����|�"�GU
U�+����zr6�yt�7�~���noީ�k�,M\::�Ӓf�-�n4‘lTW�#j�-��"��b�O���.H�a�>�uUL�i�l�-=�T[;I������-e���G&F�7��îk���*�c~g�I�6��E�Vgcͭ+�2_c�v��gj�5*[��ђ,�80?���R�rH;Lj�]}��^���Qk'�0�-���'�]�陙�Ј��}E�I�K	�ޒ��,��ʩ�Ȟ�!ܘ>�@ϭn��~�ف@�
+�a�];>L�\��8Rx'�c��T%a�qݼ҃���@�v#�q��\g���q�b�w�sL�p;�+v}��������@O�K/�5�PE_k=N�SP��Ml��n��wp� cN^5�L����\�L��*�@�9&� o)ߪ�n�S銠kR0��V����~���D�@����1��������1�Me��֑����V*ΰ��.y�#�X�zZ~uyQ���/Vvu�J4�����I�gT��Q�ԑ�HL���A+�(���=Z"�O����10�i��K;�[sl�$�9{�ȼ%�|ͬ�e�߽̿f��#�bmu�T�=6�r��Ig?���,o�؞��4�6sF�q(���&1���r�d����f_����?��z��yE�+��5��}jH��8,q%�s:�n���ZR�58��b��p~.2:ʥU��<K�G�ꯥ��H1����VSq�4^ZxOV(��"��d���*�̽�!1�wF�i����np�o]�����k6�Ic_�"�§e�U"�t��r�[a	��8��W6��X�@���9H������
��H���>�d�Q�)�G$S�Z>,\D_�K5@�l��X�p��� �O���%�5C~E�#}�!l[���m��I�������|�ЇʆP>��]+|��<���kw�R�
+2�v�hx��������m8y8+.��)k�sV���'�~�[C.C���{���ﮢ
+M95{�1K�_^ɻ|��)�$Z�7����=����G!��U��T�w��������߆o�5b��	Ԅ%'�.�ĵ��2.1��n�|�����v>>�T�]D����_f0�GԨ:\���1V�n������I=;/ˣ�.��^]v����q�{�8w��vK�{	���y�-_'�l�[Sغ�E�0MSi��UT�'�h��JH4������16�E����E�j�)g���R���G�zF\i2b���j�@C�����498��R�A��x|��ن�����O"S����kn��Ǿp2H=�$�J��[��O�}v�szp�	��Y��EhE���dBOǐ��;j}��ԍ
l�������bk
+�f04���ȃ!205�>Ɗf�x�Y�v��w̫�����uGwj���7�4�ZfX�Q�P`]�q�\t��0נ��物B�|��ڊO`T��ى]e})=��m#�(>ݻ��X�W�2$�2���q��9�s��\�u�l�~�;E�t%�e��z�)#V�\$���߳��E��1���:O�����nw#�,ۯ�X�!�����4-Si�o�D9�/q+^���㌖BM��R�(O�=O(�QV=JrAq~%e����rwEQA���y�m�>v��2"�1��*Bh(�<�S�k$�Lbe5F��*�6��@��c�\��k\��<�������aJ�u�͋�(R|���f�*�0#�����3;r�qF��V�=��T�~����S*ŢY��ҏ6K)�f�iW���b�a��^q���ۡ�:�e�~�I�:�n&1�P�7)�o�ҸVW��ޠ)INg�:��,���M�&�Kw�[�X�u�h��	�߻�����]א9���}��
QZo�l:���f�J^{Eׇ|L���o�����˔��<���G��'`V!�H�9s�T�A���f5i��b�n0���w�Pw����]w��^ꕕY.…u՗�5~�����K��g�_=V]K|�X�6_ߔ������6W��P�O�&�(S���-�ئ7F��V1 ��e��ό@Dժ��ϰVy� � �^=�
��
+3,P?i4"�
+n�}��n��A)�`���h�4Mfԇn����~�0�6��c�ߐ�����fǡ)�o�z����q˘�����o�eA��JW�	!,�m�~:����wa7`��(E��`"*ɴ���bL��u�&�p����A�;��N�Ʒ�{��1��Zb�PT���g�
�TT��`���2QJ�<~h�R3�����w��2�����5����$Ey��/�P&���>	�W.t��]N�23�m���.�%$��-���mF�:3��o'����&�j�)sV�T���QΛN��40��=��j|;h��T�<:dV���3�+��g�.8\"f�&W���B��6��<RZ�*Ӂ�O�����փu��*�̫�MϬ��E�,#2#.X�aV�a��C�
Y����\g�k�*+U���m3?�\�{�-ު��JAz+�{!S2C3�a��е�Oa:�{������eIz��$<;V��~\֭����	�EU�q�0ޕH _�d
+XSEǺ�0����Rwӡk�B�w|H�a�j�Cz�K,`��_�����N�i�\RS�P)�vÇ�.tB�ׂ�U-v�6jL��撥7�s�:��g�D�ɕ�9�HJ���]9N,�
+@p;������np�8�ʞiD����2�x@�ֵ/�P��yS\��hp�`|}�f�|{M�%Y\y��F2��ݤ��`��:���%A1D׌@)�yN�5��z���6bz�+S�fU9ipf�
[���b$Hգ
+�3�4�����3�<��9�MҌ�`�4:Ͻ�Č�i�OS���gdG�KPK[�+Fs�@��9	^��+,�+99<�/W)��‚ϊh�h�
+��Ǽ�s�WYU�����6v�'�z�7�o���4HW��	��W�5�Kd���<�dLA�V�n�yr�r�7v��e�����E��4uvcH�*|��bd+4��.lc�'db.�������Y�����z����\��<uO���Կ�em�_�"5L��~PXBi�����/e��o:�Ќ��R�>��E�zX�X�Vm�j�K�뎰���-��V5rґ��;m�
��:������`�+�p��3W�.�q��{��- ��ү�)�GW�����Bv�x;wj݋�3i���@��D��U~�N�������;)��T[v�}��
+cw��m~P_�Xh������f7�5C7cm�N׭��]��J���/��#����E�mj�h���A%�N�2��dm<?��&�(�1�x�;�_^T��+���FD�=��OEY��ge!p�)��"/$f��Aâ-&Y�Λ�?�ӰV��_�$�i��twH���q 6��j�=:����KѤ����0��P��O�>�0��YQsΐ�?��W.xC�+� �un}����7�� H�D�pHg^e���MYu�iI�����{կ-_�ST?M�����k�`�unr����L��w��ŧ��`ϩN�>p�Du�̀��x.6���2�����-�)v�Q!�E������3Bo=��}�rR�+\oejz������U��I���4��$��m���t����)�u2�y'�(�u���CYY�`�.�F���?4t�y�xwmw)l�:����NN�}u2+c����kfS"p�yG��Wf��	��g�ώ�����B��*G��fp͖��6��B��}��[�K�Rx`{�Ǐ�M�8.&�v��UW�����!���PrO�*T(�բ)���H(${�FsZ�ǃ���',���?�!�li�����%^�Wږ��[05͹[��+���R��4���IZXR���g������E��|�1[l�2Ƭ侓�șD,fr��鐓	[q=u�Tw)�E��7�㶯��UXv�
E)i{�ݘ�#O+m��aˢ�S��H4%�����6!׳�;}�k��L2	�����aVx��ɆE������r�����\�sZu�""-�Zҭ�r�i�jG��f�z/-��4	*�����C�(-���c���RrYo�m����)�����T�g��p�Suҝ���o�
+mC�eOi<�X��.��㰾����g���yV���u�|a�CBZ�{��\����Y��������ɝ0kP����*��D�&
+�)F�任���W���(�쨼�X�cA�U�2��<t����!y�({��h}�'C��O�(���R��	~v�q�-��Dٍq6�|�%Ƃ��%�z��&�U�Ii���,�As�?8;M�ބ���+��5����j�N��ϖ�:8���|# �Q&p�Sʓ���+`��6���tB=����0o�kI,��,]hT����qo��K�8��l���\�}`w�2�w��I(lm(�H,j�&g!�/�{��aK��ݻ�$�d~!���C±�	K�7o�+(
P�+T�b�){�vb�b�P���
+�:�.�6-��
U���q�kR���9瘍~�on����(n���g�kL��?}�{��g�K���|��4���V���w�5@��7$�R��Eڦ����w�c�5a�Ί0���jp;�+0�؅�8�雥��.~@Q�>u����B�r���:DMtS;���5��[���ܦl·��9�Ӄ����W�U)�c�����%�f����׻����XMq_E��,����8i}FU�d5��q�P�d����%q(<�P�cl�K#)���K
8��um�b��e�f��@d(^��nُ^4���x6���o��Kp�P6�ԭ��k��s��6\��%�q�N�0��\�cͧk�s��/p��擼�W�L�Żs~��ﱁk������?����뒪�"�\�@wc��x�p7G���ۜU��
+=��s���'�2%M�*u�����<��*�$l�������t9�^[���O�n��B���U�;G���/��������Q��2�	�Ʈ�{/��wG���:s&���C)lc�1�s��~K���MR�����5�Oo
+�Y�;,��ps^������)O��^\�t��㾂}�F8ח85[`@��|�5��k��r����(��j[�Rg�~,�T���I}N��H��K��j�/��]d�G�X�i�w6��4v@ݧ�[�6���4�n(� #��J���V*Lrv>b2��*m�fB_�eC#�p�$_�~E��&�P'`=�k:���,�>���H�/�j#UH�>����JE��pˍ�[,6c����3�4/���%Z�G��K}�tp��=�Б�A�����\.E5�!�S��5]�V9���+���L���Ɨ"�!�쭷�Q[3x��C\!~��?��J��,���ĻWAJǐ�ګf�P�V�/CIH��_m��H.6�",�7}�x���y��p��_�-���}�S�m^�t^���<��p��\�Ŕp��w$���q��5� 
+�6xXT����$'��ցu��ѯ���ʛ�A��E��Ԥ#�š�捷�9J���U'L*Z�.mZh~�i�V�~�uR�Yѿ
+#�sǔ��c�ɤ��� ]ʮ1��v��{���i���	[��
+��>��C����>��eFK
+5��G�~^_���	�����ɀ��[��R���q}�]�a���_��'1��H�/&�V2��V`��{�ݺ��[i-�%L	�x�0�s9����ϰ�i��<�=c���dK!��v|kǣ��79�UI�y�<k��f6�����
+�m�&1�ck�8r�%�2 ��0��Ҹ��|'�tn0��T��;�Y��s'5_u�k��ߪE'(�q��f{����� �͏�o�"�ơz�QI�]_�����iK6����H=�̦���q\�4�	g��=�a���"7;���z7$91�Z Tu�	Fhn},02��kcـ���#�Ń����f�x
+�4���W�3�]/~�N�����k�M�Լл�7����7��A��u��+�"��2�Ř{��D�]���-K=z�	zAM�0-�#�'���i���a+JO���צ�ee+�nu�)=��ln��B3hZ��YJ=(Q���v5�x�!�ѕe�"s����)+R�x{)(B����!DV1��1��n6��o`^)������i��'w9���B���y���#/K0�vj�m0u|����.y
+N��H��9�ţt�J��H/��_�;M�^Ӹ#$[�r�U��JQ�m
���]K�Y˘��C��C����4s��ɉÝ�n��|C[#����ѯ3�����OaYD
}����\�mޗ��ϩLs��P!��
+�����G={
+n��:�֫X��5���f|�}.��ꤻ3��
+,pF�r�)Df.�3C��X��T�6Ca�VU�K���$���ri6��w�X�-N� �-W��T�h؟|e���q��"�v�M�K=��#�'�F(Ʊ�?�iܔ�m-�XqqK�0�:���PFne�Y��꺮�����9���ewd���Yt֙Ê��R�Ϯ*x?HN3k}޼?�J�Rc�v�J�$�)Yװ�l:�?m��Ev,�2�C�"�Ĝ$��3~���tX�nBl��|�[������RV���8�p$��%{͊�v�Y�g�Ի���3������2t;o�k�0P"� Y�sP����rA$��ȩ�&�ed2}��Xz���N��e��*)�����~�v�<{sr�\��@{��(گa�Qo�ޔa�(\�q;LM@������u��"�p����+�^�N2L�G�R��DLkJ�&�����͸���&N�%��Ќ���Ћ�,V?��	�Ag�����u*����;�r�7�ن}P.��eF���ĦY����Z:Pwi�
���mϹI�R]���w4����0�Ad��9���U�ym�=��Ʃ(*Z_��}�v�XU�q��ނ�H�dn�+�n,R�w##|PGb��{�e�‹D�����7w���-AQ"4Y-�����߈�v�6bp
�T�BS�8º���[��3�"�\�kN�ʶ���d�{����F�nOO�R��G���A�*?At.���Ѿ<$:�]
��������qD�C4��[[ʖ�~��/�*�D!?)�3̐�:��;�݀�^��I�|��+����6��o�k�'�����a�ɗXt�kmD����8d,�G��ޔ[l��=���v��z���}u?�+���3�+~d�M
+;%�&G�)ڐ�7Fc��=��pX
���/����8&]u�ҊU��l��q�{ ��c�[rE��Խ��5��!ID����L.���쳥����8���Q\���H������!��I���m�2xv:_'���lM��;6�(5��rn*�ܵ��pBnat����b��p�>�˩B-�05̄?�p��c�#�>�7y��%�rE�>�ɇ6g�*�njg����8|��=�A��Z
+��m�\@`�r���Ê&Ot��#Q-�@J{����k+��`��	)�I�;N��Q�@�bT�y��������[�וJ�5y�Ոdt�\\�� %l9�9~�>Ȃ>#��9��Z�V_���
C#�Ur�̄��^�t�-�2Eܡ#�"�yE%?hb�Ė�+X��I�����i 	W�u�Sk�e,fVvІ���Z�c�GԂp`0�5uj�Z+����o,zr���:s�����a���'����o��LK������4�.���/�v#�M�@�7o��I�����
+h~�c��2D$�3�1+~�V@�1K�HA��*�h�2"����NR�V�ȞǿDV5R�.$y�z�S�y������e��Kx~�;���w=�Q���s�u��A�Şh�Н� m�9
+:�Ʈ�櫨`�U��I�3߱~���YSM}ϾˑF���U��ϟ%�LUC��$��C�e�b���O����6B��i$>�)*I�3C�@�t>�����F��?�.�Ts���ę1�.c��R��o�aN�v�a�Z�h���O�:�po�k_�@c��� ���l�����]�v��̶��&��z*urQ˃�p�`iB��x��D�p[n;���sFpN��1n�2.�����fhV�k	X�
+��^(�g�Y���l�Ԁ�0�-62���/S��lu�9�MM���s&�Cq�8K,A&��ޣw�\���X�K�$��Q�x>\�Sj��o�6eƃ&���l���z,@j�ݴ����7�/�]��������nx�{�Z�m��u#L(��ۣ3��L��F�ژY��� �ɐ6�^�#�	;�E=x���;�4���{zQ){˶�5���J���e�%���>Џ#�!W�IL�	g����,0V�OD�A��j���(b(P�e��Z���8�,Q))Ǒ�~%t/���^P�HK�#���v�s��b����q�,�(�{<��[Zh���U(�cy��qg꼱��i
+n�*p��#�M]aV���4�������-�WG>����b��~ш&�{��$�D�͆,�P\#v-�Q4
#���6W���R��~
+����߉m��z�Յv�����F�/OY�����V�]1����{�Ӽ&Y�Ԇ
#H�6�_|^��95�~�Ã��#��6<)�#@�yQUq&��;���Tm�ev�$���(KZ<����.9�=�1=�A�����}vj�lK�*���#���hLΚ��?�y�*+��/N�}9�@���$�O�	�/�uqS�c�l��Nۘ����;�&D��N1i{��L�W���14�~�:ݭL��:�B�Z�5�O&�Z如5:�H��nM��>�O���}U���V��/�?�U?��
�_�����1����Ddž�^3ps��%7^���x�U�{k�����Y�	��l��Ȥ�p�nXz@�<@}��iwP��:l�#��̕����v��1]���V;N9��:���
�c�q%��dU����
o�U��y�<���iPq\�ܦ�H��Z!�:
+����!�33�nOo�
+-<������2� B�P=�"AK���P��̶���zK?��x��N��⽀���d��J���Hѱ�����Env�`��Q�s���S��n�AY<�"7x8�?s�K*�Z+�ꅺ/�e|���ɠM�l��w��>}AK��h�g?�ȳK8��¿��B[�K�
�q�_���=���q��8�V���
��`R�(�BO�+�0�_T�@�lvđ��ߗ�g���>�Ew%6������[B�K�*NM��f�v�������Ì�j��#d�ſ2�T�5�\�&���B���'1r���j���s���,� ���R�-1?�\s����i4Ϙ�4�mZ+�8{���q�6��B�נ����Q0�bS�sİ�r73=}�꞊}ۧBn�>.��Z:���]��Ԉ}iQx�֍���'������^��-x)�{��Rw�K1�dl)p;_^�Q
�H�ie����~ztXW����O��:��F�-�������y]{�y�S=�'�۠S�+%�g��{Ǘ��4p���C2b����Ͳ�g���x���p��=�(T�D�g�&\�*��O6¤��{-�:���/�Aa9+��j�u��_�N���K����0.Hv�;]�=֑C9�ㅟ ���9WW	/6�A�SD����� �Y�=�Ks\��O�%:����P�X(����9w<l���#i��#~	n�e��{&R�m�T.�3��K���[�C)��a���z�����`���1�������-v���)�/#�aؘ��Uo���|�?x��Ŏ���O�~��F��?5�����(A�����O׭Q�<�nz���?c�i�#핉�Ip~<_0�ݡds���5RtBN�k��p[�{��)�i����NNʕ#
+���S�#�2hNWɹ��q?ϩ�[Z:g�0A����U'�)TWd��󄽈��0�0t����N�E������3I�����}�<aO�I)D�&�kY���`�B0�}�������F?��ď,Ո����:��#2|����A�ϊ�o�"=��P*���VBO�H�
+�GR��t��]��Jr:�!2���;���j٣C�$��8��,���b�O4G}�t斢�+�
��튿w�w���G�[j��c�'g���'n�g�ú��ݥ��y���Ќ�eI�]��hXb�ju#o�h`���&�Z�w���O���MRyae�Zb��je�"9�d>�N�5@�`p�2"�{Zp���p���~M��.��6�ܟ/�>������{��?@vwȷӔ}�E�?��S���q	@,��Ѩ����JC��~��b٥b%
+a�Qv�]�|W���q ��	��7>&�$V���)$����!Z\n�
+޼\=Jڬ��)Òz��6��I�t�́�%�#�%��S���f��k�h����;ٻ:��̛M��.j��]��1��f4�4��d�#��}�o V!^c��U�`��b�3��wˑҎ]n�;z�qp�w�c���&��^�YB�+%�2�Tt���e�9y�����_~��|��uNأ��Q�e	����믏��5��<	�y��ʍ�����<��r,k؎I�N+�.����Ǩ��q
+�W!�	���Oi�r��3{ئA�e�6�ƥ�.��!�� ���,��Z3�l��+��jD|�;x̓��M5X�0��J�{?"x��@�"���:8"�]���i���4��T2���d�=������3	,��Cػ*�
HEtI��ԝky0�2��Rm���U��͎u��*��BP3<0�ȝmS��S�Rꥌ�;![����,P��P 	bS�f�,S.lo\�G�{����B"v�3�=x�䆗d�lX-R���u$B��x�G���oO��L⒙w�S�6T�^���i;J��OA�
��͕U�ك��B'�V����u˃���Zh*]�]���{UC�6B0�c��_���P���H l��"H#�\��A@�x�b����ɛ�%�7��܎5i�.����+1"�W��vA������sۡ�*]��#6��ߡ�YZ%�H9	
��v��������ˏ��e�뻋��h��͹uA�3o�M���4��گ6�_Y�������(��Q1ґʻ�4�}�������̗!��x�<Ed?���;�{�׾XG�m�(�IbM��39�,ǝ�5����!f7��G�,
�	�B	���ː%Y{ȿ�2qD������t�Z`�����Yh*Z����/�W��`����=u���t��eo�.����+��c�_�a084:ք2�ڴ;~cO�瘉m�wB�_�n
+O5d���;��"�Ţ?A�o��l�]|������`��Q�l�bIY����e�E(�}AA]�!�oՏYgqy���U��{=����@�v#7p��*��0�3h�����DE;�;��q*Q�q���
U'�J�vH|]�2㢐���x�s�c±�c��P�O	ҝ��7�H��st�^��T�[��
+�}�Nm�� ��1P�Ǘ�d/���:`�iӷn�J���T,�7�C���uw;��P�����H&3\M۠/Х�ɍ���1�򌪯CQC�l<'�C`*.�NX�7l1���e�g����43�u
d�6}(��7f��iDl���Q5a,e�&\.��@�¡���F��Ԉ�S�*��*�67U���R�����
+�q���R�6l4��N���Ay�1]z.�h�"�1'.�\5�W�'$��	W��Z0���_�|OwP+^AJ4���h��Ҷ�O�fi��1W�o�𬄳���=Rk���&hG�,s�$E4e�	B��"�<�A�c�@	�
���RZ�5#�\x��VA�=��*Y`�TSvG��nJȻ
+�*�5"s.箈�x� $��.�N��������\zBu}��΍<ڡۧ��M�ķ���8�t���SSQK���!����M��M<��"��ytX�&h�2�t5�����q��fϑcg�6�!+�0Rm�& �nʔ] ��+H�n�చ�&I��+EZ�����#�ysp*�r��	J`�eT(��`Ν3�,��ц銋2Fʚ�J�,��(a�ȉ���=f{Ο�9�Ō��{��T��;��$�1����G��TuCw�����aV��߇�g@�P<���>��9��)h6�xp����G	�'��R*��U�o�#��m\aN-�[�,�$�c۶m۶m۶m[�ضm۶���l&�OtTted����>I~df�
+��¹�e�cV��hL���h�gB	g��H/Z�R�JV"��T�r��z
+��I6����^\-�ֱ5��wJ��dvQp���QNX�S~��>>�����Rք�w9���/�i���"ͨ�;�������Js��P��r��ܶ"���C
,�L]��_��RI&�����{�c�v��6��~i�/��Oe�/B�7p)Ys�8�2٨��i�l�v�_&G�t��n!�C
��j�tQ��m�A1�ʐ��v/}��/���?t�A��Q�Z�弸�R�ծ�Ö��=�Ǻ��#9�q��`6�G'��ЉM
+^��v�]	��W��4��VkQ��V)����C�.BX���X�c���	y}��2^Oq��T��?٪�g�T����f���k*��n1��>5���
+%��P�P��?���n�o�_�S��ۗ�}�����
+���i�x�@]���2�<�
In9G��ԺR�6���#�E�Yw�O����=�"��l�t��7&�tf���V��<��&T�~F���Q4��;���*��+2<K�ed	����%��O!�Q�(��+�[�VƉ�6�A�ߵ�����Мs����aW�Dg�i!ˇ��
5��2J�#�_�!!��,T��A��C޶p���ҏ5(�ߺ��W
���>��A�`���,��7A*빡�jP��<M5�Q����@��(�>�2��
+�$+�>����gB���헹bH�	϶��$?'�`+yD���B�/�p�7���[��,��MV�E��ʽ�Ԅ`�����{�	r�S��W�+�ak�*������V����o.�>�����R�ɺEW;{�8�Ƴ& V����VR��[q�gGGMU/O�������@���[>���JB�����i�e�P���#$>�$W�?�V˟1/O�>`�(	����8шR�B�H��<-�/��C����Ph� )cF���3}Ġ�3�}[8��+�R�K�1�3}|��g$
`6\��]k;��].F�TJ�u�?����GG���0�QҮ����֥�96|�O�˓���u��ӱ��M�M��F�ʸ@O�ǀ�~6���#��!���I��'�T�Z�5gZ�>vV�-vE����|R(���ڐ�b����0��d)�q��j��A4��!���D'�)�^�R��y�\��(B��9-�;��T�Vej<Y�t�2��Lg�-��R��q�r��F�A�bs���.�h]/@�����<�JF;�A~‽}�ת�݂��D���x���3�k?�v��;#[<9�y$�v�+��G�v��N���7�T�Z]�O	���ISd���k6��A���d��i�9����affq<���rNa���+��S�"w8O�+�uuDz߭�L����� #�E��Qw4��ݰo�l�,J�!-���1AK��9�3(���HzM"@Ϋ�N�տ�4ګ����p�j"���W�I�v`���N�y�-��UM�-"�nFO�CPg��j(SY��Dv�XCߗ	<nV�oԚJ��f��J
Zc�\�܎Qb�l�!R�x�{��˽�	���Ȏ@�]�P
Q@;(˔Xe�|��Rf��Y�ɴ�*����ْ}��Wt�m�q�9�b|h˭HR��D:e�%[��d6Mi���L�d�������g�^�f��
x�������{�+�F�羚�f�U�"c
+�����ń����[m��.;�?<(�R	B�ac�m����Š42R:��dZ9wB�1gB� �-�+$���N
+Ս���\�q�X����nfW�`R=ȍ�J����b;�U@0]��8�g6��~������O�d�n�ӏ����L^Er�Y�:#�dh��Jo�"Pзt~���m`�N�Wv0M����9ѥ��+.ǹy��t����%y)�$�
+��Yu�XLc4]^���a���Fܭ�|�]�Ж�VE筻X:s6��
	hxT`,'�'��Tp}gذ��i��$N��aU�6��"�pZ���w���#~+��ӟ~�f����<���0�q�����Z'�H�(�Ku�G��@2��͖���!,e��׋џS�F�
��Ƕ~������i�7�����W�lrIW��_��^}%�KBr���Y��B�h����ɕ)�3}~�b�f�3`D��f��d���i`I�*���A[��T,���]	A��,+y��葫(�
+�o��o��z+Ԣ��;%���6�����hOwN����1�LmuQ,��|�IR$�Q~��;���ӫ�/s�@艳*��0�r��T�F�����l�2ĝ��!���we\�n^k�����3��zn��~!����1�ٌo�����Is����Dw��hz�%7��,�N#BjQ�a�W}�#�O�0�d�};�D����f��|1&-P3��U����Y V� q��������UVf۞#x/�.��á����KԐB�O�7 T;���M����ix�?�/�Ɇ������6��f��������ɰU(�=밺	�sE�kD����@2(�yP��Jԛ�Z��#��9M�
+�HĞ
��wZ{�w^t�X���m�1X��ר�UC.R
+vL9�|���.�|=Y�Jㅦ�ƅp�ol3���������� ���聦8�/W�/��G,� ќX���Fn�gV�#���2����^�.1�����2>9��h�g,hz3T���N��o�o M�'�|��(.�YVY.����[
�&��|?�J�$���������R�n?�`� �X�����}�x(�L�[o^��"���(
�Q�$�̞��C����v;�"�w��0�[�w7��z��^@�dv-t_�[6����R��&�b>�3�M�M�����7����#x�U�]}F�c�����7�Ħ�֦���%%�}��)�X�-���1q�:����k���l"�V�C[_b"�e}��/��"
��ߦ�S6{S5y��RM�d��^�EEy�}�F�b�/�������P�Əi2��m'�]����_��{���B��5@Y/�oM�e;�|�R�l2/���9ݓ	?�~%��S}�T���~�}2	ط��y���4��o��������b/��c<��^^]l�`�� 9����XQo��X*(�o_��Fx	g����T���R>�k�.T�.�52^#�#�O�|��i�Q��c<*R��C��'�&� ��B��jb�����&
���᢫�K��z�fA'7Z
+�?	qOF�b����?��(�����#��郸i�j�s�#%&=���5t��kA����&Y@nN	���I0ޭ�>έ�fo��R(�'5d$�*+�D�V�*�E�٣:�U6�AY�K��!K��?����N���e��l7}���Ll�j�%���'Ŷ90�e�\?K_Q�_��<,�����E�ެ#�EU֘WS��$3h��`�5&��$I5Gs�S>e�����G���2�(��M�d2�{�*C�����\��g�={�
+Xb��N��t%K,pE��R+�ߒIe�y�����J��e#�D�\����f�2��:t=���K�,�p㢊+8�`�T���c�f�A�X�<���v�e��Q9���Y/5���K�I��.�`��J�N�lë�Orʦ��`�!�,n�:6allw�dŋH@}P4��v݁��d�����M�x�UI	t�����2�D`�_�����z�(L�7�������'pDِ+ak�!u\��.�٬n�asK�)-w;���i^��)�*QD,��>��4Y�ߓ�/C�gFH�)��?�?J��"
8%��ez1/�ڻ���j(��]�"o�?� V?��&�Ʈ���<k�-��Ɣ�����Ǖ�Dj����	z�w��B�e9�<VM��j�⹕���Y�vΊF8d�)��q*�d覌���To���k��Չ��(vC?EXϢ����W�y���
+V�<tT�i��R�DN"�uc��~?�ӄó&�'��e��:�S-��M��ؔ܌���.�HqR>Ȓ�P�'��}��M�#W���(L�+��3
Қ�`dWUy���mw��-	�jK�R��w=�^��{��<k��)/�r���i�?+�B0Y.J|�e�D��l��[n=�����Uh��c�a�^�7���|�?{�Q��<�^����؛�~��S��b�ntY�T�W�m��(NV������e�$�(qoS���D�%� jh(m�\h@��OD1����a��&���|X��5�����|�tg;�^�����ޥ��p�qQ}��ID6�Q��C�LE�����ؤ��q�$;w�`�Y�u�����*����D��+>Q�$�Z�ӓ�9҆F��&zL��B�d�y+���Gɞ^؃_�QG]%�3�Ƭ3*<H�<�����sć�+Ǹ���6�m�*���u���_��}w�-��>NW�i�]�G��5�.����S?|�y�q���]���
+����,�^pεF
+����֊k�#�d�r;z1����ݬ��h-�;ӻ�ukr+�&G��e�E�$3�h!���mq�m��BU�N�׹>�w�
�%��T��Da�f
+�S�sgy*���r�|!��0���I�Uq�M8�>8�@�	 �O?����ˎS�Q^TlWe]�d(�+�\��͹��qS�?{�j=Rf�K\�V��Uh���\ > ����H�_(�g��J�Ƈ��J��
+
�AB���}`�O����}me�S��Ѧ��	
_2�<K���0Μ����S�LݨΡ�ow
�|j塈�O"�����<����#uv&mR��>�ؘߠW��G-!�3�6��aT6����S�[VS��s4�}�W�z2ʚ��nR���J��j:�71[ըc%R��s•��Bf��AB.l��~����Y(ݔT��Z=�J�A5Y��$���O��#����on�I�=2Y��D̏I���CT��Vaן‡�G@I�s�B�ޚ��p�l�#6��WVy3�����bG$ݹ��q�}��qp�˲�\��=U�+�v��QS�;q~Oڬ�F�@����vl���O�D�)VX�(XY>�V�)��?z��@u��w��B=6̟����\��cBui����3lyX{˘�2?%����/w��_|�0T��˟b�̗��t�}?ҮB�?�e�M_%�O���ֹ���*�ߋ`��JY�����y0�Zv��*�n^b���K.�ְ͂�e�W���d�B��o�&��i��܉JO���>�0��#J�*�\��.RYeL7�����:fl��<՛��.�ٻ�ɴ�e��I�	��dܚ{ޒ��P�o:G����c�W�ZC千(P�Z���eY���.o\PҲ@����FjI�Fo6>��7)L�db&��tնu�G/	����P�1�����#���P������xޘ×��m�R�ŗ��@<���)ү����Wu�9����\�S�e'@���#��*[�|CWe���P�\���*}MCC�����N}h�$��5�/��`��C>�j�ie����ؐ�X�s�
+�s����������i
�4��'������n�m03Byoq~:4�������.ԧ�Ëy/H �� L`��*n�tT;H�w�1@!Rc,)��r߬|
{���[u�����~��~f��d��r?���/���u�5�-�k���%�g�n�)"�6f�7�;�N0��r�z�����^7d�am�����T��6�t@�v�	�������T����hCD�YKti��st<9�‡��I���b|ţ.��AߣG�#��}�������#%C�YN>vtZ�.u��`Q�S�F��$�Q!k�$�:�	/=1&���EN�4���ژ3��Fܭ��M~f�X
�
+[G���xm����M�+�~B9^F���>6-�
{��9�U��uO\��۫��wo�������!c�����~����)I�Yߤ�4��踇߆̉~��G�ag�����Ғo�����L)���y�W�5�3�{<Ј@�Cy�^�����{F\�Yi��ZJt`9}&GE�Q���{���<����	lE:e�/!�{��w�tX��^]X��L0{a��?i*t*/b-ְ�>��B��n�����6v�jV�u�4�5������Y�R�i�^X
��*O�?�uҶ�D�#��Zx�L�I:�[�b��u�j�?�g:_�����V4�;�x�A�@��β�|L���L�1q����u��[&㯼�ڿ�;��4ߊ���Py���M�'[!R"lSVbkH��U�/�M�-����GK��Vs�
+�a`�G�:6�x��ma����9�#
+�[b10b�F}�/�
+�}(��@t�����ֳ7~C��y�c�1��k�2�1�8a��J��77�V���b���_�~�C�-Pv��J	��`�B�l�b:����
/r��n{�!#]�{��)�o�s��~�*k>+�l8��D���Ҧ�F���;�~VନB�`�7�^#WE<h�
+~��)���ovŊ��
l)^t�(����$�*�kl���2Vk��`���IְԦvYQjl��pͺ;��F����=�)ɼq�Ff�	3���~���{�2��z\�a}�2r_��j��
+^FO��X�uFo��6//���X�m~]iVL�y6��7�WPa�H~�E�]8Pp�����x:]d��Ab%Q�9�A������gd��6�q���F݋��WK�@�=VwF�A�f�•���2��ӛ��vZy��У�ׂ��d����!�Y��F�3�ީ��'�al��p�����ǭ��Ж<���7�������f�H�0�順d�$���:�x'�N4���)3�(C⧦���G�7+"�1ϭ{�|�E�y�+w���j��8�l�WѨ;Au����x^$�QN	�5"�YQQ����dG������%�sj7y�OG��I���k�?�H�@��X&��i�D߹s�r�aR��T��������2kAs��&��d��ow���;�n��N#
%��=H2���;i�\:E	[}�Q��E
�,�D�ݞ�\��ҙ�3�2O�$�i7��m��U�֮�v���
�D��"R�]��P�_Zt����<�#�x��ؼ#+���r���/��/��N��Oq{��N�8V�7�~
+�k�l�w�i8���5�.���߀�����ƶ5R�8�E�ӵ�}m���SE��2�V������W`���#B�u<^|��A@�U�I���4�j˜��y�]�_Jsϱ��;Y�ˍ5ݱjV�eIW�{�j� cb�mT�G<,��l�����~o"�Ŀ��S DN��M5�[O����=*?n&��N]ܯ��Z�
�Qx�UkUo����F�saͫ`6�<�L"�6S�6~dH�q�C�T�U���VДB��`z&E8�H�r�1�߫vsk�����U�i�ur�Ɲ��1W��\�����+lQ�}�I�-YJ}]qy�p�iL��=�INM��EY[�(0	P�����F@Yq�&b0��z�6$�/@�WD�W�n�{+�ջ�����2X�rτճ�i1~������*�I��kޒ�3]��)1))��[XH�a��Q���rP��~d/�J���K�(ked'^f�_���v�����>\C/'oR�.#^$��|gJw�z���#���p��,տ�C��͌�R[�W�U3�$���\	��c2�1��u���a%��G�Ԉe~Y�fq0���ۼ�g�l[�%=��r��o2��C��0�WAxr��m��@mN����Yi��"��C���%oDe1��9��#P��.�ibm�&��q��0�a����+�	� $�"-f��h�i���[����?m���� ��61_�k�Z�b<����A3h���u�QFD�yW
+����SK���_{��������̋�ǯ�R���b�B����J���A&\�'�\����8H�(8��x�g�b��O�i\����r�/O�HW����K���mP�����E�B�9�4뭥�#Ce�D��{�:�FNV�eZ�G�e�Ś@W�tHy��UH�P��J�;���M�+a���I�\%N�m�U��3H���d��O��(�#���&�CC3�N���eOX�����ӣ8^�{�im�eX
+o�R &_k�[HI�}��<B�8Q�����{1�~��i�qA6��
+~D4�}�H���
+����.����z5����F���E���df|TФ���R�a��P���S�/�K�;a8!�`���%d�>=)P���i�F&�S`=XU�q�Y���kU��QB��'�c�H�Ft��:�+1=�4��%̙ge�Q^&Mw�'���"�G7؋�l�M`[��^�J�8�3_���������КZK:W�{[T1��OLrQ�����r�N�I# 1���r�l��~�6B.�8Љ�: vt�P�?o����d��7fH2N�P6�3]�ǣ�k
+�xp����[+�����BO'*�XF_��\6Yo
˫��(�4�n�6�86��с��#��ʜ2g���c#� b?��6ٱ�_!H~�#%_�6C������TI�
M��-V(�
+Y�i��A-ũ�}XQd�d�$5�Οֻa�_���=-��u�c������2YOXp�)_�n���8h�mWGąr5"�Y�_1��VŽh��NF�.��dž�D��lWpӘ�-��87!_W7�m�G9��:��^�r)�3��xF_���pTd�7�a�R��o��<V9L����6Ѧ�f؁/���'+���/]����:{�H��ceg2l��gDF�pj'E��
G��T��}j�u����}��{����$?��]1���uxQG�\H+�s4����NA��´1W5�}�R��7���0�]H���ތT^8no��K/)<�m�%�I��bC���ٱ�dGUv��l���I��zvȃ,FѨ���J�~9Y��_���w}0r[[�T�.7ݗ��1݌�_5��i`昊×�N9n�)e68޿�L-j?ƻ��%ABHX�Ԓ|":�忌mω����Ɋ��A?^%Qɂ���k�.h�?/kk-l�dV4U<�=쯶��fy��#��q��r�ܜ���s��9h��H����O�����3-b�H(6�U��ᎧT���8��2_`�:Ѳ�
+^�h�(~�l��)�T?��c'����~|#"��_V�W'�[���F���D!���^��Οr���rz��Ԍ���Q�Y�W&8��GD�7�9F��⼵�mp-�T���'���M9`�}N6��@=g˫)�f��<�>����J��x� ��pux�C��)�n��e��Jϝ�
+bn�U���R�'�F�㘁�`y�\�c@v�*�6��|���u4U0�B*'ެ��b�EVE�~�VP��v:I'%�gqk�Ʈَ�C#�r:p���y���C�S��h�},^������6���U�k�;J��|�ٳ���֘Q�6�8A䖌�3�FK6� ���M7qE̵`5K
��Cq��n.92T"]��k���;w�1@/��T���\��&������+9�� C��Ͽ
+i9�[
+����Ɔ�,:�
m��e�ˠ��D����	
��p'�w�X�h�cP��|��݋��;~98:c{���MTA�$��J�ݵ���j�X�D\���
?�tv6�����4�>vl3W�h�$ c$�?���E΢���P)��b�8~G�rZ
+��%��F.s�'�R%T�{����6��;W]���.��2���77YT�0��4��Y���"����% FJ�����8�x\�Lz;N)aJ�G���s��.���U�@Tٚ���2�b|Cs1\A-�ƸWg��5)Bw��VӇ�3��������i2V�R�%���`��S�^��E	��:@��49�!���D¹c�Qf�tz�z�$��VNNd�9�DvRl�C��Yp��&���]AqP���g��ŧ�?	�sU��	�a��c+�v���C�/�k��|r8����e�5Nv�K�wb
��~2�s��C6���{y(�5�Zc�����*�L��z��x
�� M�z�J[�����
+��n����@�Z��,dƲC��kJ�HNpv[I{
+���;#M�k���������nV|w��͏��� CXa���q���ي�Ή!m�[l&����ae��C�h=Ӄ�xOEe2'�H���Y�̼��w*-@>?� ����!�5-~�
+�(g�g�.������P�h�-�p
+?�!�]��2�������^���|:��G�XPZ�{�hR�/dd��.�VKs�ŏNV\t�d�7�	��bX��Zf�.h�V����~c��ҏ�5��������p�n�+�Wr�.��L�H���7Z�C�p�����[��L��{�ݗ��u'Q���ai;�o�_�W1�������A=�l0��+Υ�����\k������J�b%M�~���M�A9�!0H�zV��9[���<�~?�>��N�c&�sz�B����R���}�6:���&g������`�6�JF�;}�d�/�5�#6<y�
+Y~�8��	�LU |G���;�9��<)u[��i�x���.2.pC�	co�̃�#I 
����b�
+'#��-��B�����[����Kʀ@ҙh'�}z�y]">�Ka�(���2V�O�'lB	6f�7	�߅~��G���\c���w3YTԸ���l�k�U���l�&$�p�7��6��m�������-+c�Y�h��̥���@^��f�Ml 1'���QmyA3%Nc����*�6%�L�Xf�Zj�mO�١��I�yAسu��Zx9���/>$���t����U�>�K'{	��nA��~��gֿ������;1%Vһ�����ܒ9�9��׫m���b��`ij���C2m��Q���3�->D,�C�Նa�+�4�Ne7э��1��w���3������3�8<����0��8�s1��LJ��TtN}�^�k�뤏W��5��ȉ5��Xx�HSŷ,(3��Y:�`�����z��~�SAt�p:M�wA�  ��#d�Wp��U��1��icFM��U����[�@���ށ���!U���,�Rr��"ҝ>��
+�''���t����̇O�Q�߫)�d�1�2~ܢ��{�_��?y�����p�G��i�ٳ9w8#z5�/8��D13����
+;W��L�G��3y���]��`-,�Ӛ5TJ<������\;��k����E�V>9�i�-&���d�Y�6i������&�o)Ph��5bu�|��k��	���[��
+��Πd^�˅Z�U6`p�W����ƃ�F{D�����:�{���u�
���8���T��V��1'QQk��Ӌht���c�Y�ܸN�.h��+
A�ۤ�Apd4F�
��;0X��E.�z�=
O���&����
+��_^�9�ZbHX�z�%�����L�{*��h���d6����j��J�jނe�&�	��'�����n�%�{�t N��G�$�6o$���"�J#%�?�I��.�F���Ah�N(��'�U�^�SK\n�����(;�v�Bw���B�i�@���J�y�Z�߿�ha+{*�B��n:g�@�>!�$m��-:��.<r��*%Wn65�����|�AH�9o����n��*"�����[}�#�n��`$���2��g.;���n���Z��*q�a9�x���W�UM�/�>��nIX�U���+{�+9�t�{�b�d��7;;RDR�/9A�u���0+����a��e� !\
+!x(D��� :�I"m��@3�H�9?��j�Z����n������e>:v�;��c�H�"lb����&����u����9Ο�����_]��H�X�,�3�sc~e�k�� ����S�;ģ�^��co�"U|��`u�h��-�����R��Nf=���>��@F}<6�x�`ܞ9{���lWB?�|�
+�p%��3(��Z�)=��]i�׍di�կhF�ʵf
+����������˜���6�\9#6��c=bt�h��X��S�ʨn�#��>�P3/*�>a�O	ַǂ�
��(g~��J�̙z�B�}�ͽs)�>'���8��A��͒v
8=(-��|1�����e��H�̽��⯂R_����P�Y��� L����드0?��fl���Q�?��~���12���¯�Un��}B{q-����Ǯn�i��MJ}��=�N�D�����K��vƻ�
�Ϣ��F��o�C(�
l{��(jd3��	�r	� �I��)O�4�RG�~Ƿ��$�l�����xF$�{��M j�|%�$aJ��0?�7t����Gk+$ch�;�ռ1�R�Fl)�7��NVΠ��2�4l�M�+g��WjLu�o(�o)-���^�F�g��8e)�g?���,�%V=�-�T�`R�8�S�g�ׅ*F������"֓t��EA��d	qħXK���<�~[Tk�[�+Ӵ��e��ɟ��Q�]�%���+�+�f��*�"c�y>rE|Ǹq$�j3K<h�κqf��ы�m�U�$�"i�DٔzUYFyM��}I�CԄ�j���]b{�E��i��ڑ�$w��G�\`<�Gb��n��L��>QN���Ү$�ϻ)]�iU�b�K��\�/��`\19�A�����轸G�Zi�B���r�L��U`�f���K���5����5�Ѩ�j23�[��i��s
+��!Qԓ.�X�5��*�oXk7H�N����T���)��¶T���_� ����M��uS��+�B�$�W7����WkV�s~S2�����78����[��<�7�z�`���|F.M���f���k���^��s��G���m��ѭP�ņ��Q�v����?a��	�62��,tU�ƥs���	��s4q�
�ƪ�$B����3a�K��rRK�'5�h��l�
�"��<;������.��������A��%Mrh��cb&u�iw'���mF��}e�\�]����q1�mY�H�n�T�j]�)��h���+��:�j//?L�,�֪�G=Z��q�Xvd!����vI�9|c�,
+�\=}��!�"up!W�s]��"ޮrT?���{�T��U�(�ZV����/uG����l��x:NO<%y����<r�N��VQ��N�?�5UDf���#LE�x�uj:���k��6B����4�x�g�I�46��o�
+�z�q�߳f\�}�+��g뺍����r�_n|Q!g��`3c�S��(X�ҫ)��/���6��A�N�9"ӕ�?Հ\u�e�Lx��X�Ym�(d{WϷ�sUw�P������ž���O����|O���yKp��A��S�{ͽ@j,��?HG�&��!��9$U��=���Q��8rB��F}��։�*-&���\������BZ�;2&r�\�����~�'��Ŏ��.V�U�+��a�CG�ԕ��&.�iWW������='m���H��e���z.=�g�#‰3f=��@v�&ٻ�Q����JF|Z�0;�N����E�p�3[�Y�<k��6*E�o*��|כ_Җ;b"�	� eʕ7L��dy	2������Ne �m�ywpR{
+�h�1��ƕ���TB*щ��$��T��x��C���4�>��M�D�O��/����VǨ����-h�;�l�Ҹ$���r���Hq�}j<���Tv2��T(�,�L<ҙ���{N�{��|��\+�j��:���ڪ��2��T�����"��ZPDE1I��T.�.j`#�-�Ӽ�OY�l��I�)�d8���Ε���t���I�Qz�����c1*�s�_�3��EE�
��Z��ͻl>o�I9+J&)��5o�zB�P��S�;�q�|;��o�U�����=��?�36}�Q�9	`r*��5
+��U�������Ll<%���|��i�Ԑ7X�|	��F<}GB
+Z�/���в)t��M��MB��8X�D��٭��t����]�ij/���Ⅴx'
+12hg�
+�d�#��DW���Rc�𧁟�s�3�7��k�@��r4c�T�}�s�[V������˟�XJ�nvvC��+��/�ѡ��N]�*����z�� �G�ֿ/M��ܫ�M@�a��� ��[C	9��_�V/�]���[d�A/T��n�i�fI�1K�{sBDȩ=SV��a2�S�m���M󪳾H&Z����ֹ��x�`�eJ��ƨ��Mv�|�x��N��^qޏ��q��h�3571.O����n��@��D���&�iI��NN�J�����>H����j�7& ���̚��&!�ZG(>�隙N��*ESߏ̢˴X� ݫ��&=6�֒�{f�A�ݵO��^vs��HX�0���Q��Q���c|�ޤ����t�x�)�s�����)<�]ԧG�.?�[���>���Z�����S�,��v����f�<軭��J<�W[8ݛB��+�1��y-�����R{���3M<Y�3�A�iӬ�R�=Y�
+UY�Ax�^�]��t�m��H���y�*�
?�8o�,�t�|N��E5�j��e���������f=3���Cݾ���ѕ2P�T�����R��8��
+9"���ތ]��CMu
5�v؈c��)�(�ʍ��q'3�(�HOUiF�h�:�ռL����A�ƿ.$��b�F��a�1%H<p&����+6*y6�&s���q�p
+M�O���;�.��8l����D��u�j�X9"�M_3���!$�G����gխ���
�#\�����+�"R60����~gG.WX�1n�O*)�5i��]/�HI3��t,����XzҖ���|ڴ��#UM�5_j��B�'��C4(���e��J��
+�=S�a����|Jo֛�����N��L���Pd_���1;�۩V�Y1����yt�����F���[mt�U��
+d�����Q#3T��YI��wt⯰���3�r�8A������&m	紜ĴHY\•��,��N3��P�t����*E�f��ZV���^ʞ�?�X���Y4�&����ig訔��t�]������.L�"+�%�e"����
+���nWB�۸�_���t���MؽBD[��l6f[C��b��U�+��M?�y���O�֎"�	��1�@�e�fNb�$F���/1Q�J�$��aY��}7P�#����㽱%�\'F-9Q:ʟ�Di���v�A�fg��:��o]s�JUh���ic�=K�e����8-���A Ix����Z	��SӋ��c�o�
m7�<ٌ�c���n�q��ԫ�ʾ5貲�>�j@��k���_uճQo/.���,6�`ˀ@�ڂ�4)T*
��`�N/s1��6ȣJ2*��S�ڬ�ʭ�d�j2�jTJ`��̯�J�����(@rA{w�
+�N_YD�.vj��Erx�s!�l0N[�D�����yo��]^�j�v
��v
+L�d�B�C~k�e�"��0�c^����djWF�	}L_h+M>XHi�3?�΍��L���6�q&{-M���$f�fgs�-k�������B�B\d��xR�)��(��K�,�d��`�1G~�������X��R7z�Kj	��+:`�e�v�v��f/Y���Å��	dY����fL=�m�,�����H"�R��H�*Z�3��W����J�,
LΑF<Io%�s4#�M�Hb�)V4+����-ɥB�&�����Q7�S��R�E�����P�r퉉FmM���>�O:���֮�ө�������-�꺿���<y켭�N�	Σ)W���Y�z$�C�з���%˱��7����W�ѪC�"o�Ds����1<��5)y%ȸ�i��e3���Y�d��z�*��e$̍��T�	�k�%=��?>>c�ה띢�nLG\���(�b}�<tP�6e	'�k-�4�Q.��H���i��r�%�L����Ѡ>|��-CS+���g�=pԔ���i��e%�m����Ze�L�����k��Ju�м��P
Q�M��������f��p�f������&
+U�=��ݺ�cg�^�}����G���'�
�{�9�6��hd��9Vm߆#�~;S�F�]0��;�OQjn�HJ��x���k޻n��\�����5��Sn�r`�?�V?�t��v!����~ӗ��"���P9s�ȏ鸅���LJk>�1X���:o�w\0
��"��dO����?l�Ӓ(�`Ѳm۶m۶m�U�l۶m۶m��~�8?�22"�q��{�_����[m���K��Y�P��gbI=��~�(��
&`���h�Bꞿ����
+&�|l�X���d�,&�*��y�)r��.Ni�x��^��@߲i@ddL�R���b��S,�ɗ7����L�ΐQ��-;k_L��f��6�>��=�RV�,��S���r��P�oC"���H�sK�K'�
+펚2�V,�4a��_�Ωi%P��Ѳvm"�a`���fō�7),B4�G�(SK$�H���Vdrw��@�3S@h*��ͳ���P���c�<ͫE:�k��.�gs/[�a~4[w|S�c��dysx&�$_
i�:��������8-����G<qv�,��>�yl���j'�2�5
��?F,JN��^��!���3Y�%��2B`2�\h+c՚��j���)HF��*EU��H�*��`�M��$�N�+�����@(/�Tlˮ�^(��6| �
�0�
+��o���?P�Y�Y�����WQ05����ȑ��<�"��2e��'�S�Wj$�0̏(�Es�bA4���.�4�h�DL��U�� ��MB H���2�
W��M�u�}>ۅ�}��|;p��j��g����W�
+k��1���cU.a
+�<	�Ǩ��։M1���cg�脛&�A-�qE`�GA���}ĨgRyRì�?g[�i�2�׆0�B���a">^������{���=��`%�^'
+�����bNQ P!��������ѱ����U���#�a����eI� ������۬�ב�����-�i�)���V�|~�B��� w2Q·Vۼduߪ���)�4��8`����X��W�e�7�1�9�7��HW/��������	[��z��oVK0�nf/m��ߜN��4�%UC���������F�j��XI�Q��Eԕ��U�6�+l�+Ln��� g#�uI:x�I�4@��������a3��z�
+���c��o�Yt��-#;^����
QTb�� ܂��Q�Gk��l�T��5�]�a��A��M�m���3E�񜌚�!�er'���y	t�IC����D�>n��k��L���(��������s�Ү#8:��5�����H��K3]�l&�����(n@�Ѹ�x�-�&�!��m�"�+�`�6}�H��.�H�����ر�����_���
+Ο>E?���]y���4��g����>��lc�5:>��������ɴ>�@QUU%	�����i3"k�]N��.
+��a<$eOr���Hh� ���k)�a��A�3`q��1���)
�7���~:ߒ��ʛ�� K_��k��N�_��HHg0�V5b�Q0+0~IޯV
�چ�1���SO+�=�6��K?�%���K%Vu)ީ<����
ҝ���
+����d����d�Cwd��Y�4kc��Vޠ����uQ@�Y�A"rzάm�u��*��4@��0`�3O����?@���}�<���V���
tGI�HU*��3��uy~3�zk�@�g993�OV�T��(�`{l��B\�Lg�hZhOj�RM"	�~3���/�w������5�-iv�t׽x�,�ȗ����5�9�¦^;!�O�(M����"+L�~������$[Co����䠋��ǿ�JQG�?�/󨀰I����QN|�mמ�KA4���5��*Ap�|�ĵiI�o*83d����e��ٺ�
+�W	D�Ę�cԒ����`��F�bna��4��8$:y�)�MG�u�Z9�}��E���( �@��=h��p�O�"M78LV܈�&c@�x�V�w}4�O/�՞�n�Yڏ��K��3�s�l��(1�˹��+X�$L�6-u��r1^���4�$݀o�n��&8O5�w	(A�WCg�����+��;]�dm�a��7M|ΏɊ���簁�?�de��ȨH����u�	
+�]�G�ILpѣ�T�n������1(�^�6�^ @�a
۟n�
��*P>�խU���&u��Z���C��X�Y��/����������9�z�.y�~�tiE}L�x)�GŅ���'��nd6�����G<h-�9��.���W���I��҄:�d�:�.�p’���%�v�42Z񸰺�/c��o��Țc��*G�r*bbA����g�b�#а�ț�y����X�tQ���������%����xǣ��s�]W-z1ŕ�/�:�8?�_o�N {@��#�n{)���oS��	���rhR��(����j}8�ɱ5g,B'�F8�\ty����{�*X1Q<T#}�>廧�N�����ͽ漏U�zx%n]���z��q=p�W�T	�PQ�&@��3q��}#�
+�y���԰px@q���/L�oㅏ��1U�6sл\��;��J��
++�9��B|��t�/}�u���*էE�)� ������O����=��u&0I~�3�i1Z���_�wf�fL��c��5r�Z⠘/��n�&������0Ѓ*�Zk�C��Tq���֬–Uv��!�L4����M�����F���R>��8�^qƺ>�ı��y��@j��?�ۅ���A0�2h&���nP��U\�_<ጢa���z1U� ���'����$�2.�Y����90x�Ck9a�	�*��|E/�܉�����O*f�8���fH��,E����e�j���_�
+ꈙ�)��M�����8�?*��OP���� ����8��1J���"�S��G����{͹@y����t�N���ҲY�c
+�4D�푑�}�a��z���;)�
+=g#��Sƅ�^mG(���՝VN$L2��Y�S��Rίe)�ZJ��9,x�%~�
+1�`�g���6 m#���s�|[���en�k-W��A����	\(s�7*�����f�b�X0�� ` ��o$�0o��Y=�:���@.��8f/"C�������}߇c�˲����	��QJCc�R��dP�.���w��4�,��|�<T5�M�pڂ�$���N���>`(�s)�e��s�\\i����%���I���U���R�=�t��{ï��ےj���O�X
S�j.f3?G;5��YG[0q�Ct���$�1��[$��-x���	���`�mU�!6�[ 5R��B�"whP,�2�
+ⅸw�h�?!���l������i��'w��y�g��oƁ!M��o)��:	7�XfЌ�d=�F��rq\����s��JCۋ��0Pu�@�#�i@~>��Z������,Ef�s�{�G�b�vVZ�H�����]Ι�H��$�8�
+6O@���*�~�+BcjJ��8"��d�BT@u�������#Z'���0 ��J�a��l�aTx<�ܨr�[�u,]��IKHV�аQ�ܶ��0���	�Hȩ���\�߾l��N��T�)Ί�-�v��c�~���%�g(�Y�ɝ�1���ue~��"թD,7��P�|'�0�߅���: ���M�T�~�eR�I�p���,F.;�����;�Au����Z�?��7b�&�	�c��D��ye>�9�~�ե����f��Jh����W�mV��L�P�fWW_q�Ž��"ל�i�nMu�纫m�k[4�-p�C̨a��<~�c�����J��~"�5�����d�����J��$��F}�N(����a�
+���"l-	xR�۱d~�K��j��ߞ�T�|	��nj���7��ks>���r��=5
+�;!�� ����=}W�u5%�JL���
�#�eE]��ZSՀ�-0F�~l�8{}m.��7>X�ϖ�1�k
���uq�+W��"�~D�g�T�p@���n�O_
@��}1-`��)���?���qŒu��6P���A�r7>x.'+rڌ�1�.U�p����0L�P������j�4�s�-a�|q����"	z�e��8+��	"�1+�|�ى��]kK?
+��ϊi�͑��.��h���
+COJ��\"#�w_�V�=�U1o�	����!ư�u���O7P��x��w �ids��N(>u	36
+���D|������p?����U�ۂ7�R>}�4#7�g�UK�bL��2F]�t��#�����}<�<��������^�C�j���*��퀽"4�����Q�%�@���K;k��1B�	�r�[��e�ۃ������S�q��[�=�d����d��i�[!���v���~q�SG�6}%�lu��&D�kQ����dX��bUy�*��@��#%�AB��ͱ�^�X(��uJNÜT��@���?t����%��h'"r�#mB���d��_���Yjg�����6)�q�ȹ=߅^��j��E�kUf
+�}
L�Ȼ���������Ṫ_\�~d|_���1�����ɴ��6I=��SKԒ�ݱ#�t�����b�S�K@�!̱sI"�5�2���r�'�����A8��?k����B{���q�A2��i'�"\��𨨅倖c�i��^�HZHԑ������i��l\��ْ>���g�o���Y��RK�^��!J�loig[u�@!�(�cR~\��^�y�WV<O�d�
+=.�C��`I����:�νF�0���*�<R"��?x��(���^���)Hչ<��^'|g�.�	��kN�=g�Jl���?a/�/D��M�6��V�gPap<	����j�/�<����^�e�+�Ʒ�D�8�\-��
+笔U��M�Z8�O�\���w"w�&{oK0qh��૴�/b� �B���D	]�4��Z�����l�bj��M
+�w����!���Hdc?mvȗ�+�a��)(���m��3S`K��HUt�,�IU�%��|?;���LX�p�
+�Y��K3�;v�羴FƌX���B��
SL�����`U=���t�8�>���y�}"���Gu$��!��U�ž�FӾ��;�{xb�$/��*m~"c#mj�0�.�オ�<l0aH�祅����!_�$\���\�U*l��R_Ah]��,���h%�MLL-Т#�q�	�,�9I4��a��<�YJ>�r��4:P#!@}�*���0�вݴnS�j4�y"���܋���z�͎�kHY�m��`	�R9V?����Ӎa�8ҠrZ�������'�^�jp����<
+�=Ӄ�H���5�T����i/���*J~LΓWe�O���Oז��ߣ��n3����ǏV���R�†s�ۣG����n����N+��I8��4�8���ǐ�A�,>xzv��Z��hY�r�����Bp6PH��i��X��Kc��*!��O��Ϊ�����(_�����$G~���Yf=��)��g���CA�":Q���z\���_��=��w���@[V��Ds���
��c���O�%�U��\�=����`*EQw�Ь��VF�b�y��s첱��g{��r�X�2XSh2>�<��zK�NbG��\K%�d��r!�F�CXӁ��	�a���­���MB���z�V��6E�ڰ��3�<2��
蘬��PI��}�LrC������p9��2bR��u�G��q>k�dg�>��r�D�N��>�s���V$�z�=	k���"��b�?�x'��cIBn}���/p�j#e�*Y�����H�������2�˻�ԝ"��
a�pM��H�b��E��"MW���zt�-���eF��f�W�v��72�D�7}sr��衪���b�#�1h�Π��Q�]��cY7�O��-rIF̂d�.����Q���f�E�Ű�U��s�U���&��8p�!3��AaPXH�yq��hG�g�`?�EL�.�\���<���S]s,
+�^��9�)(���7�ևD3�Ԓs�g�(Í�3���jG��𥦵b+�W6�T^�D�a�W�e�
�����W`q�{�z�ާ��A����9���u��w�7<�y���{?i��Dz9J}bR�4�sr��� F��$
���=>Mr��z��8v}��T`! ���P�>�����É�R�ϑh�ٷƧbU‰�����-��M-ap��^L����_��U�–)`K�a,�6O�6tź7�*���J��VOQ/[bӯw$u+�YћѰx���8�8%�k�tI^v�L:6D�m۞]*�
+�)~X��|�%���a�a�ï=�;��L˧�H����ب�E޽���-V?�l�n��X�t�1a��%�
+!MfW^'�KU��i*訢˞,rg����xΰ�aR��	�C�.{�'�);ߒ�P�b�]H|�䱾�36�Ӈ��]LY��0����I�pc`Д��х�2�<�>�A���L��F�I혳h����+�~��k����#��]��3�L���~2��v�
&����"���%�ЅMf�t�U�ꭡ��@�
+֨#S���T
O���&�ޒ�Q�����u�+HN�T\6&��+�9���4����kՆ#��s��ydG�;����*>��'�B��4�Q>���Xff��E���]��CS����M�E����1]@]z3	+�$Z?U�͉QLjM��Z�P	D��ܲ�7c��pEm{��h"������2���{)���&�U�� �:���.|�*����^�Q����ID(�l���4�����/\z����ь�YqY��,/�ڭnv ��	�z��R�_���e�z���e�N�J���zD	��1Z�z..��z��"��l�53~��v�ept�v��Ev�8��0���ʲj��������!N���f���(�j6���R����'79���#,o�ǭ�ipjq�18L�(�P�=%��]�G1��G:!ӏ�����0�M�3�G�I�s�CS��N���@�*��̉8-���@��KGoV;��	����k�H��"���M��7��uM���v�9H!#!�dot�^-��.:%4��NCku�La���CX*�N<�l�d����ˀ��,,ĭEA����!�l����"�п�Q*�1�!}헒��>��?���r�PH.���-�W�h�b�_�Q:Ķy����I&���g����K�oܒ8��9[��1z�+@�.}�x�q.��4
+ȟ�[����a��/�/L$�"���<��m!ǹ!\w�'��f��ý��v!����xc#2����\tM>Ĉ��r�}mL��߾/�����M_���T��.}���O(\�K�@�D�~�]F�M�9�O�8[�5+�_;�	8�XP�.��
�`�Oc��������V�|ү�_Νj�pD
+`�SB΃3����	�U��G���:�&�Z�?����y�(R��$�Ic8PT��.�w��;
+~�lߤz��ﺘ��X5;��V$���8��D��`/+F+���D��xY��6����\us܆�ߍ}�/���8������r\�}����D(���cm�lQ�m��C��������s��l�R������P3���[8+#~�A&~|ȹAZ�L�iJ��X��{)<]_�c�
+ӡ��		t�x���Nk�^������=fuQr�;��E��NG]�2��M'�j�����q��)K����iw���m=ѧ�"Ə軈��/G5�oGDwwr��#�����Ȥ�Lfns=�F��UC�9&Ai�΢�~������;�N�A�fێX�Wk4?���S�;��`�bE~�EI'�R��>Gd	[�G@��������Y}����&A��놔/\��w?�
+�\2�h��F�������$���p�V��E��U�n=�d�;�k��M��eX1�ˋ���	�)e6�-�u���R9V�
+�����3��?Om��;�_`�&C^��I��/�R�ZC�o�����o�$*iT��Cn���R?Q�@�#B�(,&�ss7�C���.t8[u�R���5����_`J��7h%r6��q�&�p�
͍���"F��w���/[��[4\�,�1�J#3�c*dk��j�U[K嫅k&�;�3@ύ6���/kr�9��"P��u���i6ʍn�����gQn�g�2ϛ���)A���5�hJ;�|W����ӎ_��A'B�ԉ)E2���1ur�AmI�F$Ŧ���ӭ*E+�Q�[�n���C[ɼ^��A�^�����Ϝ]�vG���M\��<u3Ok�RO��Zu\�b�I�� �Ҏ�d�\���'�2���R��|��
��jehgm�Etc[u���5Lh�s	S*�������\���L_�E"��rI9����j�5���màO�u��Q�Z��΍��y��%ﭟ^�_��`�u҈"V�>e�%;�I' {>�ҷ�h��τl�ȳ!���ǐ��J;K�k����I݊�s��΍bZt�6vW�Z��HġL����UQ"I������_���7�Ev��J��q!�F&pc4pɜ=��Qu\}����/fCF����-0���1f���y�M~0�[��5C
Ÿ;L&�xZg��ђsqI��M��=ܣE�o�Оi{)���J�/Y��כ�RH�w
+�������>c�M���� L{�r��yƸHn�O~e�]�[��X���ϸ��AF��#�S‰f�
+�ݾ���(�9�pv�ͻ<����6`�C�Ts�1�+���
�C�K"q<�_$�o2���'���lI�!@�UZq�;��Ga���a/ܧyܝ���E�k�2Gs�&?w7�/�	�����&͞���s�X�����v$Y�a�9Zƕu
+�WX�ϲ�]���
���´R��b`X3�L�)U�h
<�٠�7�h��2���Zr\��@<�����W�;�o�����9*6s�( (hs�ac��~�2!]���	
+���f��Y�D����m
+I��t!�,�Yc؁��x	&���4�#]�\��y[1���:^�3$��hb͔έ�������l@ȅ��+8b6���7֠-�P�?1�G<+zӘ�H�R�z�j�YɁ��q�h��T��a8]�
+�c,��
+� ��6��g���y�dw�9M����1D_͜6�}�2w_�@����f�gLiǤG�����.�����@��oR4\/f
+����ǫ��0�,wT�
+��XN���(;��&��$Ҵ��8T��B��'�7`=�C�΋�F�����)�Bq{f�Q��憞�o�2���9�����ʁ���Y��)Ө]P��|v�a��f��%��2ҷHb~��vKB:m|�d%�QW'5cc%�윖L��	�J4��@Ng��@�ـȋt�M).^�n���xN��a&���D鋁���=r�,�Lz8k��*"^�a� ���n�F�դO�][�3h����S���s�82����U�b�ܼ��)a�<��j�}��l�Ny*�k1y���_d�U;��)�=t����z�G�B�"ޙ�X�r��~
+~|:T�·g����* ���}�����M��py�lDB��b��1�wٮ����L~v�S�����OC�x<�WB�O�M
��tuG�U�'_~m~�¿�$�0���J��cWQ�}�UE�]'��-Y������_G��Ƒ�o;R�Qǜ��81�2�[�v�F��JR]�a��Rx@�~�{c8�VD@"�l��;t�p��2��I�T�J��C5�(|�~rF-�q��4��k-*ʾ%Gc�,��k�nӞjK����V�Y
+�
+i�Ge��}�-Ć�eY�B�>�{������.��u4eL!x�W������z��o�$��j�����w��To�q�u���l�T]�m����=�[��&ɀ�#�Y$����?\�J�8vm!�C�=萟Z*_n�D-rj������t+����D&ى��A-��]�́E�����x�v��j��ú�E�:W��ɕ*d�����"���79e��e$_|�J��K�e�|��5��CA����Ķ��.9�p�	�8豛�Mi���Po���ŁC]"sgSϖ����`�9�K��'��	6�!?C���<��*˵��7�S7E]�[F������o�pg�l������`�\_��b	f|�#�@��3&�{�����DE�-��֥�sI(,>X�tM�X���Z��B�d��R6Ъ�9Mpt���+�|ٓ����sB����IB��+V˙��9��9�T������B*�b���)e����$(AL�h�k~��!�d������.9@<��Q�䀙�?��s���F�W�
+��3���`Co�+ɖ�4�G��N#N��~�>��B|D�JQ~�Ҏj�H��9��*�]!�=�hu�f�Z�'�@�;7��W�f3Wg�c��Lq�c���N���s�4ξ�\�j.h���Ml0=:x�Й�{}�˅�]*2��;}q5��X���?�df,0d?��W�dc�=�y�\k[��~g��^����Y>]r���®�[�\��81�T�|�ִ�#����0����n��,���j���lXis�Z���'Ѥ�]����6�Z�#�Y9O�r�8rQR�@*�X�!]�cࣼ�oT�5K��F2��b�vפ�t��|
��Η�+����A�@���0*nO�4,��U����V��U1�G1��^����t�\�t4��?�[?����:�I}��zխL))k>ۭfFqHPC���N0>�����`�I�1����w��'���A�����Ӄ��c�۷�r�bF�)�
+#o���{d�D��0T-
+
+�8�ϩ�0��a�ߵ�w��,
+ɹ5D�}<�2��[6�?��~�
+J�Ej����-�W�=�оs��d{����3��u�AI��e���c�j|�(� ����_Ϊ��[���-�e�+���|gK�Qls+t��v;_d4��i�
�bn�H��z~KMJ���5�o���ON�2�쿏\�-���Jg��6�
+�4Ejv�|4�Sٜ'���[�a�`�X�1$N��T:|���e?j��d�C�g�N�r�!)N~�+�T��(HݵE(�/�̈-����ٙ͜P����ޱ�<��le�+P��������&hv�`.�����8z.S��-�������QB��jH \�՞����
+�8�*��Ѐ��x�Xy�,�0�i-QR�!k�Ȗ��Պ��5�KR���'�d���ZO��{����}�Z��ЌRYMʚ�tߟc�ytJ���}�Ӓ�gf"��F�!<���l��M��"eJ?��P,9Y�K��L�G<�s���q��F�����rn|K����k(��*�Ҭ���<�TBz�a?�����[�䫈
+x̯��(N.�" 
]?�k������S�<Z1���۷5Q.��u�p'|�E�g8�8�J�d��x�&~#*үO�KG��	�V�Db�f||�͗
+!���t�՚u$��ɩ�IDF|әA;�^��X��8|ѡ��S�!�����c�b�
�p�]\Ƽ0���0����vVWn=�;"83m���1l^�^�3M�@���h��s��mA��1�l��o�@Ț�œxgl����ߠ���]���%�P�����ly�O��M��)G��sIy,��6u���v��+p@�ë���~N(!�}k�r�˦q�-J:^@z�$|������g4 Ohf���>��S��WPl���}B���|NR2#�VH��3WM�H���a�mfZ9�r:Z
+��P��
�,b2�H
]��������a��Az��Z���5�]�3�x�r����8Gw-M�|��l3�:��^��ހsB����MA��$_6�)#��.u�D�V�|�9p���N�����0Cx�KE�?�9C�7Z�`������)�Y׼W2�C��]��6v�n��@��"5���ߞ<T�I*��`��ᦠ�u�5gPk)q��>�^��F��L�
�,�yjM�N�X.'mѹ3�����>�G�&h�"'r��>�u��2�<y`��
��Tu�^��[�j��Z�����cv�2�]ժ��V�3$��31�pP,{4Δ�IJ+B��	�w���ccߍ��e��K+ݷ����L*6���ݽ\��8��H��K�
+w����ͷI�ѸteBM�GeP=�b�L�B	�I�������
�JZ1��/��QY�n�$q�&L�J�|V�n�-���*�g�t}渻m���D��_e#\�!�E����9�T��Q't�*�M��)O1�e6�<v�w�m���¶�WC�y*3��5��`��0�H6�#��v�+��~g�^�៦�fE%R�Aa4���`S-�H�j8|`�0D�����߿���R�EA.d�M����|	�_�kR�Q����fy�U�E�i�c#�\���o2����m^}O���A���{�!�,s,����/%�C&���������C�`��+�h߹d����8_Ci(X�\����T���Q�p�A-���aJ�x`�[�(�ѩ�������$�[�3�U��BΩ��%� �b�\�j�-µ]�,|rV����2��i3G�����DBs�В	���z��JF���Ĕ�\GY����/X�bJ����%/c?��I��4�'�1��ټ��Z���#["�Y��������i<�{����&�=��T;�2�&��)�k)-oƱ��}�Oy#GE
+P�h��ͳ�Ɨ�*橸��揫���eD2f���%�0l���W�K��j�&�Fe�X�"��"=�ǧJ"�)'F���\������֛��\����F����w��I)gE]y��[ ����=��z�w
+�,������5��ɯ�"�}w�W8m�j�KĔ��hS�N9Zy�~z�� �5?DEV �SfU�5"-���?f�R������2-4�7>:&��բ�M�DQ��
+��ʁ�N4b�V�Y64!���?�@����D�=�r�+AIJ4���B�N�0��]*��V�pc\�<��30�8
+c\*
+�t�����i/���8�}E��7��x>��<�vpa��$ckǍ��.�tdҨ��G����=˦��M����T����BQ���D���({���u"Zt��w�|
�b~��u�������Lxz�e��k]6ljYH̔�Il��9���ز��'B�*��飷�.?���T9+���߳�H���ڝ���đ�%T�'$�&��6f���:�̜�8��Ǵ�%�,�B�|�B�eiW�a0O
����v��P]d�H:���M�b�5^�S���#�a�Omf5����;�hBHFwj��e��7r��$��r���XD�0NFD\��j�:�}�*��W�x?g��g2(˨7^�(	���i��2�
+41���C�$�|�Yr��J�X�Y�a��L7H��+���]_�g�[�Y�ہK�K��i���Te��F�������i<5����͛v�{M8��@Ԅpw�4U^�Z�3k��l/,�*�Lc���r=�ѓ�<@�e�8��GΏ�)\��=(HR̕�O�
΁�PrU4�Q��<�cw��͘&�>ӊ�W_I�����:�
��Chjԇ�(�]�;�oy+�=V���X�g'�/]�CۗX��!��~b�*�̜i7]��s�/N5�7��d=`	<0���@�3�f�i�M��C���e�\k���[�c�Dz�C�7�&[�6�SdQ�H��9c(
+}Wܺ����|�:jY�@��F�><*�A���.�`v�X�9{���� ��}�6��"G��]TQ~�Yj{��1��`u�kT�t�t,��5ɟ^���jϫ]�Fѯ�I��g�!�JE�������(�2���g�nI6M�`Y���������|����89�_���{�#�S�nm7�Cƕ��Z���uk���Tkb6|J���a>&�_�'E#V�a7��Ko)3�w��8_H���W�X�.�ˢs"��9UNl�
+���N'r
���crZ>�==E��/�Fy�����Ew-�p�C(C���)�u�:#s{��������݉��Vw&�����
�]T���M����U��
[�61������߽�D���DZ�V\E|���u�1:ps����X�lI�]���H��ѥ�Rt�m0�
+�xR뜲][:yL�:�2d���`�,9/��g{|��ź � ��'_�-Sk����.�4����ذ�	����YD�#��
�W)g�����
���J�0���C
+�Vi-�gE��
+5��H�L<L">���I�������#_��]o2�6*zE�]��h*���c��GYS�-�=r��Rn�[q{�Z]����
X*���{��'��;��̫����OG�y���۸����,��0�7��/�D��7���V;����*5�a�#���#v#���({���BBT�욾ղ�P��z�[��M��3^��m���ȂB�u+�n;�ضao�z���օF@1��y�5Ӣt���	
��ޞ��
+��e���u@�;�M�fH}��Pa��x�它�u�l>�"5�@`��X)L��/��ށ�|���hY��}�r3�U
+
+�)���4�N����?��F��	�x��w{�tE/p}~��RTf�3�˂J�
+�
+BP�[���!����s�D��{�:J.;�NUrx�2˾��%��FG)8�Lp�_�&iA�
d8ǒ�$݄Ç�Y�$B���0��s�I3mG��λ~�Oڝ���'B��[ia�"'N>N��}��YQF�RT*��tˍ��m�\-��F�ŰM�Ȍ�5��h^଀��&g/#�c���Z�v�53d�Ώ�R��2��?��:�r߄���[�D0�0O,���"��4�x��H�����?�o/�ZP�;���kv��?.8;��g��@��y4@��(���[u[Aĭ���&�8rZ 5fH�!HK�ml��M���$�GgF��)�B�΄?h�D�t�W������xƦfI��W&���
+��-���:)4%���}�q�^�J��GSg�ed���t�1j�<̏B����|
+
+���`X��8:2�����/2@j�w�0'�`bB�wIG��ʿ��O���̻�-���+2�Tw������_��3���6Ք��"VT�e'+��i��� D� �15���P�O>����$"i:��|�Lj�M�f/�R`2���j���:�����L�lb��ݞ�z��#����q�!����_�TZ��Cc������Q��{;������5�`��sS�M�5�]k��T��0�����X��z��C�������b�l�D�)�(���@�&~�}9Oi��wѩ��:Uo
�u:[�ғk���~FU�;ه�kρ�y��s���I@"]� #��FE��J�Nb��!Z6
+�
+F��1�O�Ƭhfm�#��Q�L��O��۴:�;oNb�����P�\���mH7�F��&�lP%e�q<4CC�Ge��$d�J��:���%~��8u
����Òi賲7�t�Nu�R��5#�24no�Ɍ��V\d�E�RZ�[�[��m�D�t�gq?��	�n�J��1�-�<��}D����(秳Nc�f����*���xG���֎���I`�?"�f-�{�	��@j����
����s�޶4c��4�����z�"S�ob���a�d�X������
+5e�w��'i
����<�蘚$A
n�A��14-�}P{��u���wA-H�{߀n �� �L�6�(�!�L����T�щ��/&B*Tib\����&߮t��I�c�����H-�&D���7t��16�B�����bv���d�f�|�,9ELX�e6�w���U��*,%��F����ns�W�L�.)���J�v�3>�_
+L*��;��}i�⃙��K������GTwk�I�/tv���W��^`�o������u�߰h.,hmK��՜�e}�|���<�ʟ�iN�B�������2��k�U6�wig�	�t»�dz�	LZ&�������L�Ed7�f��4Ol�a{�j�`�i<��\gj.���y����,E��3��>��gl��
z�C�ʼ��$��v�++Pual������$د#���D<�9k��Ȭ�7H\rY����L���m�_�d�z=e��@���0�kf_L������Dǟ�5��p�if���[:��8�(L?#�:�D�>��Bї�gp�A&�/�/\Yg�fq᧤��TA�6��y����X�ce�nC���������>?���V�S¬Nss5`URԛ�ug��ZJ�'V�u@}�= �a�ѕ+�����M"]g>�ze���~�t��ě�'���x��F���u��(ʒݶm۶m�m۶m۶m۶m��7��oX��U���L2�9�L(rlu��gHlp�l�o@I���П�H���6�ř�'�k�+.�����X�ފ�7CsnJv/y?�X��1��u:`K`���!�(DJ��s��bJ<���(�	�WQ��ry��Ҋ�
2�a�
+�
+,������t�*Q����f<�Po/���w`@����.u����sAe#Oyf�斥��%��p60��&� �$��2�P�ܥO8Ja���<��]#o?
4�j�9`�z��ܯ֢8��$>4�9<tL����mف���:@+{k8�࣬�#:J*��:��7�M�H���\��j��g�,V��VY��r��zQ��@Ȉ�t7䳃O/l7|�����s��^�: �0���J�E���[,^*�,+[r�
+�<��@�ї�8�;�I�����m�2�f��u&-aW؍{�zv{�V�c�Q����y��p[YL�6����?���hFd�`s*\e�ǯU��xO�OB��/��I5��YP���S��
o��
+�j�E";ը�S�&Q�����$�C1�6<��Q�a������=.Í+�M�%��E��}Q)ęp���0JH�|([@h!��O�;���ҋ�)$IR|a����7��dZ{7�r���"#A���/��@t1����y�>g��}_X��HO��Sb�8i���D�1��X��(��r�Ҹ�k!`Հ
"���`to�#��5L�����V�1�xw���!����&�]ǐ��Y�0A��]�b��~lV�R��i�q�n�m���"���o7�,Nf� "���eL4��!/kv�C���!�5���ۂS�Z�$e����	�|π��?T�1k�P���q����F�H��U�U�%C�a�I<�rL���@3|1�Z��}k@��T� ����+Z�Ж�0��}N�W���9�ܜ���&>OC}]���U�*�7���9B@��*]
+�#�e��/S|�
K\4��Gf��nf�����g)�_��j��G�<������~_�ɂ���jļ[����T��A��2�j�-�_薪Ӗ��?R2�Qg�]trx��I��a�"�۩F>r����	��*�	�H�x���l��oX�e����1e�L}˭�c�7��V�A�^�כ����ݖ�茸���E�����[���[�=	�b?2���{�����*�~pE�)�5�Ģ��	��‡ʽ7������}~ާ�T��FJ�#o�� �gG��?{�ӑ�Y��mO����N�ުn*�����i��N��l ���R��\^Y��	��jW��Np�[�Ą��R�(��y�PJVb�3�:�����/!E
�e�濢�����
+���i���%�dH�H[^�_�c��"�T,�>�%D�}�6���F�ia�#�2���a�����R�����ȥ8.�D�^a�T����\����r����`��Y����R�:�s; �`���`��v��k���٦~�/|��\�{`B��8��fZ�[����w��R��_�d]��!�Y	��8@K׋8Z���Hm�o��i�YI�����8�8������v���9r��A�o�
.����M�)^r,�����O� ��a����!APBz�L�jc�ٲ�� ����Ǔ�3�$�M>���G9�5Rش_L}5�Xr,�V �<x��z�<!PR���Iįj�	f#m����6�4���.�����b�{�r���A�l���Y��	�j����1DX��-�N�I��	�(�Zf{v\B�=r9z�U�/g;Y����}j:�[��Qm��q&Z&���
+��Dx���� Me���7�x�8�2����j��	�rÞG ��縱u����\-����d=��+����"*�Bĭ&�>�١�&,I�7^�� �����a�"���|����`���L�!�';���ҷҝ��x�1m��nc�	ۙS�-�G�CI��l�qpm��'�}��?�r�꽳��捻Ӭ��'\䞶1�'�4���� f,Maɷ�X���N�f�gN���z�%
+��*/����F�^�2I��y�����}��ݗ�(����֚��AR�a�@ҽ�T"�O����K["���Bkkl�q+N�PV�j�Wv����ʅ����ע��*Q(�+m���d꿿�P�*4��	�;��Pa�^�f�y����p���}���HR�c�n��!(!�&�����I�����3נyֵ��8=�Ez�R��c�Vh�kp�>^�ni~I����$cf��c�P"�
�o�*Y��j������c�mb�:���2
+��&�&�[/(��I2\���s���eC�xLT���N��F��$~y��-�rM��$T�L�y��-L��;~��n3DЯw�c`�R� ͚N-�o������)��+�/v!��Zg�v������P>fX��6���Q��gψ�H�6C_j����n�6ed|Uh{��Q-��C�Z!'ܤKh�v����� 0�B��@�a�@결v�of��p���jH0 S�]�j��;;�2DM���C�}a�g`��˜\�'	�h�W���j,-��Tǜ�Ο��GM0ȍT	�6�9�o�*���4_g�d�#tN��2���4E����(�&:<���E9�+r�ZyB�������|���݇�ݴT�%�)͊�@�'!���6�b���9��t�U\�J%ˑ�;vw�P�ջ.3�ψ�tU�{�U_O~j"s�_�1����8h���0@�kV���qf���M��R�1c�f�OZM�H}d@jKS���,^��;�`ϩ�}�
+:$�6.]Y��#=�q1�` ����ډ���?���j�(�@�C������H�����l����(=2$0�җ�����.��OE�*�?3�8�D5[8U�ɑ3���"�}H��<���H\l[}S���P*
□A�o[$Q���gu����H�
+�[�JKe��@u����`τ)zp��uU��p�S5¿Һ���1�6+�tqN��<�������6�p�HByQx��-i�D�Uv�' ���X���2�<���l#���sԆ����!��c�iH!awT�#��m�pG7��܎S�T*��������z���ϝ�+&��_�N
�k����v���'�$Lg����c�W$
�xa���>t��Z��`��������3��ԫ�:�Pl�)8[�-N}>�'_u<Og�-Y�
+&��Z��r���'E
+
+8I�7�u´�qo�W|,��+���M����oD�.���j��*�w�=h�1�P�?�fS I��k���0])N(_�S��Œx�])�K��*���x�qHI:gRY��i��%Rƙ�����U�s��Z�~���<o�����QRFU���l�Q�PP8z��Q,Y?ja.1x�e�e��!�ʧ�$g�z{g��sX	�z�{�lr�����vR=�^m�B��f��b�����_?�K��jr�M�]
+�b��S�*-�-�e�i'��`Ѽ�O@&�b���u-sT��A���f���F���=ɭ�D��W���*ɶ�o���vS�
yW�)������t�h�T��W��&�+wrm�zvY�ah��-�{$�Xr�.���v���s�\Zk-5�[��0���������-14�b��+��BM_H/�h�
+�ױ<�i*tM�ޯ�\h=��I��X|8C���(��� r�>��2rpR����~
+5�օTA�3-?g��#J���
+���rl	�1;�T��Y�
N�]'���l��/]����(r��yt ���㰽��0�*��b���G����
���7�������nFt=�(���s��A�>o�����E=JN��9o`�SX`<��g��k��������X̒0���zaGUL� -��WѠ���JI�f9u�����SZ��(,�*�A�-�i/���D��>Kl�j�p��Ħ��_K\�#q$���7n��� n�NC5/� �EыF�>e��GDE����P@�6�!B+��D:Z��_�;Փ�����*y+=����ó��Е�*�ʰBi�)�K`;�0�e{	ip�n�h�U���>s��"DcO��=�5u˹@������$�"�I�z�ހ��	�I���ŷ��&�\��K�I�h4�r��.�ȈgU�n�$>F�����]f,��YR�r݀Ŝ���PF�󏥕?�P���.)}9���O�VZ����2dߜs��������[�!�씺O>0[���ʅ��wuʇw�H��?���^�u˥�����ܾ��O����7�63项yŷ�)�/0�rUq	���g���
+��c��U��ek>�{�=1�t�թ�X�u�ibM�t�/\�Nv]���+���U�V�����wP��̾PEn!�<��+
+Id��BTTD6�&���W��/�w&U��S9Q��RY�����is��ۂr<��0�z������
+��)��F�M�:��t�ٜQ�����Z�����-�@(�R\miQZ�ް�¥-�b���"��8��<Y����1�n���yX�a�;�ܧpFPb: E�;�~?�6EŢy.�r���r����2ù
9/��4�:@����r��q��܊�:A���z�I����-���y��V	#ݢ�}�N�� Ǒ3t��`���':�K*�3k��
������'s����'�\K����|�Zkއ�մ��p���)o�:88�1���q�����z��F��M��g�X�b8&��BH����[J��gX�V��Yb�p�P�#���u�<�(˼�|B�j��퍤tx˫7�/��N?eѫ=f��y�5����(<��l���%�qhX�ߟ>��
&#��j�
��Z�ˠT�4`�Ӵ*�y�W~dA��2k��Cw�����ٷ��ҥa4`�ϚL`c�EHײ���M"vp��=8�G~��\���cA`luT�����]��I�'�Z4���{:s*|���TđK��L��G,.S�
+�Y�P	Z+��t���H$��\\)�|��#�lc�H�Qu1��n���S��w�3��sn2�^�E'B�t�‚>���o�.��
EgO����H�?n~W������+���m��т�}��8[v)"�SE��t/[)����fa.���č&�2>{a���I�uY��LL�qmϧ/���O�%�7�Xf�\༖5c܎&g���{ãs~b��������ҍ�����#.d���X�4	��_�;w�6����O�����X���"�j�3�<�Phn~Ǡ!���Zޥ�V����AΪ�_��D�`W���2Y��Sp�uޣ�Jf��T,���H�
�Ĺ��=%K}䢟� �s�4e^39�|�%��吪�4Q��>���~�/[����ͪ�ҕ%��U(`bVG�I&G0���U쮻�7��������[3�1��OkhaI�]�\o<J�QPwc�P�N���� T�`���7;��>����P���ѳ�v�"+��G[�r�K=�~ZQ�	S����j�]��`s�.��L�y�R���xo��v�C�(�XC�yCg�&34ԭ�ԓ�����<�N"�� �x�l"��]�	�x����J���ψ"���J���7�i���Ŝ�$�٫S&����|�5Q�X�vc��6����4?�֟I��J�n����1CU��c)��If94��Ď�'F'��
��IG�%�8���ݙ%�p���]2�b��q�61v���C������s`���W4nulR���,W��k9
�|0�J�4�uN/���5h�غ�ad��+@��@��npr9��ߌE�����@�z]���p�O��r
+����(Xڍ�izzt�0�C8W�9�����=YT{�E�
+����K��S��h��)h�N%ʥG8
1�vk�I�Q��*6u�3�m<��j�'`$�Jg�����.��(���J�}��b�d�B�2���9o�{K0�ڑr��cUz�cق����G�8"�`}�
+�Zj?D���.�޺�I�_��}a-���`�x�_=k��y��������Υ�P�lV)�AOgFm��i[^�L��=)4T��!��I��_�mad�2�_�\}��l���;Խ%4���GJ��+ʼn���*�㵈W�J�z���5{�\,�	X=�>)~��ojK�b-<A�P�\��*=
�p����{� �tbt]�%�"�y�:�J�v�ꢱ�M{O4�t�Y�Ra���*W^F$Y���!��y!�r��\qMx���}X.c�n���l��qFyC���_�R�S��vc��<��#��T��q�Q:�X1��܄� ٍ]ޗ^��b?bI��i�!��BS3���2^S���!��Q�z�����<:քE���蕌���+�X�?��4b��� ��c���Nu	Ϝ�99 ����l�2�r�3������m����k�8�#[�}�9ߜ�1��NI-��
SQ֥E���nfV=�׺"iю�[��a�*P[��ke�t�E i�Eh�Z+�p�l�޷x
+��#��K!�-O����,*�mOk��6cgc}�R�h:e�yXi�������v�`#��.�g��y~5��c{��������fm�C+y�Y��m�;d\�͘����zڣV���+�&_�x�a�Õ���u�&�	|�t	�u[�N�>w�U����g^�j)�#
m_��q��/��n�"W�>�(�e
+Blt���z=�r��\��Z���i�BƖQ��IC֎���.Y�v[��<Ue�F��֊o��f�o5ݩ[�ㄈʒM��3>�`K����ƍ���f[utI�9Y���UB�@�*'�[E;�.���41��	�i��>4��l;PUyV�{���t8P�3���k���P*۲M��8�[�#�5�!�@��cz�޲�\l��m2�}A��R=��~����e>�&k����G�@��
�֤5��=�6�����N��X��u�u*OrK��/.�
+'�B���@vm`,XbN��D��-�{c��#saA�'�~K2�������Vw��x����/��ntG�����1Մ1�y
��ek9g$�s~=pX��Ѐ4>W�W|��Ůy�7���L�y�T��`	E���弈�=���;q��xB�B�
E30oo*F�Wz4�
��ę�[�o9{��4�y7���[$�;>Ӆ�^��9�����I����ߣ��'��VKj�*A����	��/�#E�>'�c��
D�4TR�z�Em�u����g��f�T�x���	s;��,�ܤ�E�'�ۂ�!�
��)�V�mk���)|��^��QiАHRF������絰%N��T�g�]:q��+ΧN\0��;W�2u}��&� g�>�aǐg������|��Io������*+8�3t~y�8Jڤ�|�U�KZQ�{^��&>b�
�Jwvxr_7b���D�5"�|���.g';xZ�L�q�RP̾��d��L�D�"�Ӝ>S��LX�=��V��>�tQX���)0�J0u(�w����8Ć�B�l� ��ƿH��|$_M�Nx5LJ/<�m]��T��O�����D(���ºG������TS����j�!N��W4Yx���=<��"���pIU������!�g���߶�V�ȝ~O3>r�~���2C���P��rq�$O��B\碞��(ݲ��6r�����<��笀d�uyo��tEi�����n��:@�K��$��W(.�����јzȾ.�.wx�h��Kls�,���Ю���������Һ��q�X�y�~��s֥ނ���(v��U���b}�'�:А8O��p�(z���'��>qF�\ӧ��
+J8�)"�$�Wv�f�p����<>e�LLȠJ����%[q�����6��:�W<��Zp�y�]x��'xhc\�B�H.>%2���#���������R�}�/\kS�R?�XE`-B!J)F?n��3a����r8�;��f��g�m���D��Ɇ2I����b���t��
,s.���"��5���+��R��'�tqO_:4���1�%�����ÆЯ�Pn/��#����d��g>�5�dM�ab��E����q��}���E�i�c
+gd��;�SԊ4��$p弸�V/r�
+�d,%f�A�Vf������1�[WR��eh
+��W��r
��sF�h}��b�vk�J�_�]d�rڢ�����0D��??�D	���lm<�AG`�ijnΟ�N!c�lQ؆�����B�q�t�$�mH���6��4K��@�p�W_����?!DX?u�������\¥�,�+J�B�OrBx_���p�x>��VE�#�{k��d��z��{�PΤo�<�c�길��J�X��MGh�yf��㳕&=�����t��9B���K���P�()���-楘�B�.'�9�=��i�Ώ�Ď�G�+�<f��p�2�$t�؝!��9H��]�r#�ܕEa�L�*��E�^�{�97�
+5���$��n3Q}��OF�lq��]'~�7���K��)W`�Ԇ?N�Bu%t-�k���i'#b�+��]���D�ԍ%���Tg��$��੆v�)H�
����9��Z�{�JL�v�����cO
+Y6q�K"S/*F"�M,��]�%��������g/%Ѿ3�OG�z,��B����?�'��>��}����8A��R�h����3P���`�	��y.��cU9,�6�E�a�>J#ɭ�����#�Km����,rν�k_z&����!�,}#����e�ɓ������%�x��ta���ޭ���"W�0���M���k�Ȕ���K�]4"�|x��#!|(&�V�3��=�ؑs�t�g,���3�
+�ͫ�:"Q��YS4��fN��Dǥ�)k%3�Lc�<5�=�K��{�5���n'�#�S��6��.j�2a꠩٦W4�_'<e�W�$Dnrl|z\V.8�2�p{�"�	����Q���&��[��ھ��?�WZ�(U�$Q�،��@E���i�V��E4B���U��@�\���ȟ���|T9�e\C�5��ί�Ke��hc����c��(�5�*(���A6���(ZQ��*�#��}����)��a�9C�ݛ�� ���c6\�c�8��b�bv��Qam�%�5>��/z��~b_EB��E�_�ث1�-D�f��mǶl��e)���?��m��(�;#/8|�|���k�_���g��c=���LP���ȵ[e$�Na��$6k��ҾAZ��s�������)�[��\$�t
�
+�K7n�)��j柸��Ie������$}�V6�„����m�~���H�c�Hd��^�
��.����:>W"dg��e�S�B|6�{r�:�J����:чTQ�V�Mõpo|�zb4HQ���IeȂͮE]?I?������=����o8N�ǜ�1�'
+�[�bx��=�����`�\��t�:4�x���IA�P'���_?�)7�o@���ѿ��Te��)� �M�30>�!��'�1u��n����'f���3�U���dk�/�AT�|g���DC:.�MY���\����
�%��Jvܥ!�]��@��QW�y��Q^�_�_N*7�R�SU�8��D	�$<"���A/��;2��W(i�����:{W�5�R�fЀ���!E�3���1EN��7I/��#X��XD]�؈��^v�!�=M*�D��IE͗���|�;��	�\\,m
���V]�)��5v�πŖ7�V����/x,p_&���Ў��2���Kʃ�f�i6E�۬?�q��&0��(G��+Q��aj�o�<4E�D��\���e��;'�_�[� ʕƘ�Γ���_�lE�7"�D@����/lE?RQ�</��E��F������t$�٣�E͕���BBjEط@KL`���K�s/�N����
+���_���ro���#�	�L����l:o߲�����w��i	�c)�b�SOp����_�NoK��[%�V�+�خ�6�7����,��p�Q�5���Y�r�li�+��4�UI���!a�&S4*�J��@F��((�ӓ�?�
+�ݐ�9��sX���+V�A	�SƊ�vF�P�3'��M}@m�	�ΝCZ�l��;"P�W
+��B;���A�U2�	�j�u�
�{x~��覰\)�����t��(Y6��K����ΔW��Q�p�d�e��W�w!���6�"mMF�.}A|g��]�i����FK���N���~�,�j�|�����[*'����QFY�����������[)͛����:z)C�R<d�p����I�;S;��z������7a�}��w�?��C�
+�Z d,���%���N��J��}���VMQ�W�/��
Xą��O�1i����`Ž�=a;9i�<͖bT�pM�o�p��G���;����G�.�S�4���)��d�7{�mT:c��zACwj(���M�6���y�A�����|p�G��)��/����u���G�,	0eCu��V���n�cAH���pf��gD���~��h���Z2�xb���:�8�#
+ϼ/��:��M�ĉ<��v����SahB�f�x=�e��F^�"^.}y�T?ӑ-�IH��!�U:���D��mѪ5OZ��@+��Wf9���,Y�Ś��H�Sx,�!~O0r�"E����">uQ������G]H'�����8t:b�c���K���d! �bq�U�Rp5�'?�E�:F���Q>!��	�`�s���*���ɢ^5vF��t��c0uJ[)�_�]u��uҤ#�7�:��#�
+�Xf�
�ݧls�gܑZ9_�T<���\��R��z�N_L�rF"*�R���v���B�"�9�H�'�fHr�,��1�
+Z=8�����5T4�d�q���	�C��(x����7[��|��q^��X��۠`oq�o���^�G�n;�Kn2�x�߰j��:Z�<q[Q-�Q��\GQ��ϩ\4�������i��$+���¯�$'l�#_���e�\r�X�0��T4�т$&Cr�#�)r{���q\�
+�D�GQ���]�b/����0D�R���������Y�B����rr�,�2�+&�0oh��(�����դ�!�n4Z�����/�4�M��I�/�s��r��9�C��a�ܒ�{[r�~�m�͡�1$>���
�U~|d<��$>1o2�F��@f��v���l�}���Qޒ��L"7�"�*<�߰�DO��3�1E�S{����Z*Д$;g�����J/0I����T?#�5�>aF 9���d������'�^~g2Ģ]�܂9�C�V�
���C�؉bH�;+���:{�)�a1腙�y��yC\����U	?��G�{�g�MІ�)�GP:t�)w�>| �v�/o�"x��a	���z�� �dI�-y�M2����$��W�9�td���n&�S�!�WL�����,���S�h�;�]h=�*��F�%�m�
+�R�X�����ȃv��h��"��bp��Y��=-\iJ�6Q���I+?���~v����he*���17�"�q}}����X�"J�G���(��I';���zks�ӥ��V��g��l?u�{��R�f�`��!��|k/ڄ��X6�hq�6Ѿ�I���,����xf�*��-��sP�ՉflY���}�	1ht�O��9ܚ �����s�_�ʺ!��<�ax���|��?� :��`�[�-��&;V�+I�`����f�7y:`jd9#�rl f+�9
��ld�4now����6:r�l���S�I��~0���A�� ��8E�NCG��a����Պ�����wԵ�j��=/@`��˖J"�-K,p���4�&z���
+�}_�N�g�)U*�R���\�̒7�3>¬�4���l��#@\<~(�>6t�Ӥ�=�Ad傍���.��]���Y��36u����P��w�N�:T�B!���0I�q�Y[���g�(�(*4>Ƴ튳�"(Q�;
+�<'W���/Vh��&������,�eDqِ���jř��Qf8`Z���㗭�A4O̱2T�%-��i�������){'�X��!�N���Lյ����<cL��'������RHoa�?<w
+?�{5]7���͚hz�K[5�?�0�k�F7��c���|;4˓ט�W�m���Q"���rˮJN�q�Tـ�[�0Ľ�͞�6AТ�+ʾ�Hԥ���6R�`�����f~+��a�S�tyU�=m3�ss�x�a7���t��ڡ,�CU/S����G�lW�@��B3��Z�^B!+�
����ܱ
��/�9+O���p�E�����1�����)�����U�5�r&b����>�%�z�\at��
+�vMn���ߩ�;�.g�Ud�#�g�5�IJ(<Aq�d�^��QFI���[ʑ�dF-��>l�ϖ,���}�m����2Q�$zÈC4+�7ˉYZ�Q��Vu�9�(��	q$����j�Sˤ��1t���md�̾CBL��3�;]=���Y��I��O���x���:�R��0������� ��ք�(V�z]�b
+����8Tы�9��zt�d�h�����s~���6�B3�N�9��	x�v�1"��+�?�A:tn��n����\�6�,�p�R� ����D�f�iQ�7������X�~�!3���V�J�2���s��{�H
*�������:+��3�u	�\
/��?�P���H�&N:Ĥ�<Q��%��3�iٰ.�m�^:��a���.�;������-fI7x���il/a���O����5�IeA���T�&T�|�¦�q�����)���}�V�d	6H����=�&�f��{_��Z�RCy8�d')[@7�ʰ"A��$�*/H[~�N"r3�[�[����_����BSG
+�T��I�c�^��Y�=�����K��FF�i�~iH���ʕ%>t	b�:�6-��Q���ôF�PZW#������oL�'ߧ��q�c��'���|%#tI��T	�!���Z�O���w@D����C�z�ا9i�y'[����{"m����]*!��ޏ
+b1Ea��9p)a��
�����E���	2W�CM�����, ��M�-..#Uȳ@�\�<F�g�OԦCٛ꤮a���\�f��:�6���"��9��P;1s'��J�I�ә=��E&�s�Ӟ���p1^�ܐE|�_;z��[�(r�����E�-W���5 B��5�����J	:1��"�y?��Uz3h��6��&,]�['�T�9��}Μ�j�
+Z�,��?��\3/�	��}fhjJr}��ZT��0KG����)������
�1�4�H�Yu��QR��}o�"�����';�4��ς��?u,p��c:�K��x�nwa�P.�+���b�퉸���� 2���������H�u�F�zr��?��us��2ȟ�0n�e.bA=��,��+/6�W.����@4�j*4w����(�������iif��ދ�ϓ��k�%Y՜��_��\[����'L�r���^A�]r�$?"to����H*��P��	�{����N�b���]�c��܏$�
�5j�c;s�2=‚��R�%�@��K��0��-�װ�FFE��
�t�5H\��7!�"�8<5�h2�چG5�1���kÓ����~��{B"Vá�����I]*����4�V�dT�*��é2��22 �R=����欽�������Px�#}��1������F̳��T
:�$�$��F/�ěuC	��iˁ���m�t�� ,v�X�
&VS�}
+�w�q�򌒟�%�,qXM�;�&?����v�u5��h�;�@x�`�}P�\�|W��_��c��9�}�_�&*e��i;�yaR��>)$����7r��7X���j�Ձ3՚������*Eh���>�M�W��	ΐ��Ba�`8#�#'��W=	$/8�A�t*[˻-cJ�[r �)"!�:v% �}�MF4���1A��{�b(+�8�M�����m�����h���bԾ{?�gA���J��:�|����3k�u.���F��P}r{����H/��[��ѩh�:��vEy��QVZ�:�ϔO�+)�T��N�;����r�`�>=y��.L(��ja0C7��$,�=���j��k������D�/^0K��&�vp�<]�9���-p|��c�LFum#'���C�|(�����R�r�ߺ�fjQ'I*i�e���dw���F��mzfVI�n�
ԥ�F$��m����Q;�t��~Mϐ�W���|n;�i��1-�T0*�zDlYe�;'��R����)+
���>+?8��w�������(��I�C\���NU�
+�g�#�<�K�}� ��~Q��7���
�c�~��'�<&I@�����oub�ut�Gpr�E?����뙍J����^
�.BZZkm�
!ݯ�t �aU�x��K\���Mq���dWtg/��|·����X�����fD�n0���O�䴌�+�,):�W��%�ؚ���VbT��p��&�n����|5��=O��N.�g��A��[T��h)�n�j�H)|����ʱ*�6��d���^(A���
��?2�/Ӫ�[NΥzq���_.��%pg�@1�+B8�'l?���t��^0��|o�G�C_
�{Uc.9[��aB6 xv]ʫú^�����S�]Jfw7�y�CS��������tE���.��{Y]l������#�,+:�l�����6�d#�1����X�`��;F�dhM�N`��L/#����V���T��8�̛���C�;s���&�&�9D�A3�ܦ�h�*��Q4c޴8~��_��
+D��	5��ss��Ք������������Y2�(�ⷢ����lVk
3ᨗi����x�.'��P3��MF��
+Ȍ�YP�j��1�5��qfQ^0��N��%Î;�[vb8H�
f1�U,t�8E�*�[�����Ҫ����J�ߤ�:G��A&C�\���Nҧ���{�������x��!&�
���RU��#v��!�0UA}:�Ħ)��MN|,/��25Q�*�
+l�#;�����:8C�Z"d�k6"QAw���:|W�԰�
+>������ Ki���ý`7D��:��Ra~+��ɏ}p1X�a�mCb*�q���--�(�0]�J{3���I9��T�LA�<�!17Y����}�3&���&����2���	���ߺ���&�� �F�d~��ɔ�a%z�@�"�"�oڞ�g&�¢�m�I%`d�h\u�؜egNz�ό���"TM1��	�B�i>a�i���6=�)�����+�����&	M���k�ʠ�↨\�d5��}�_Hܳ2k�R��j�sZ���QU7j�'�|�B���W�\2<J�ņ-�Lj��z�
+m���.,\��
+���Hmݧ���wW����d�Y��v����&a~���6���.)0��N�QU�"�(g5�kP��T�����b� �y��Q�T���_\#�Z��r�W�*NK&-�ͦk�Q�2�Cf�����lE��qp9�0�`�����ȍ��	�q
+a���,�3*��΋O�����Ȳ��+2�1��/
g�)+��t:]_�Bˎ���|��Ȭj( ��#͊�`'�næq��
��q����}��'zFp־��|�+�4
���-�y������N��P���Ԙ$�v�t�WB�.���N��W�����J������PFe[��L�W�ѷo_���)����V�\����؊������!�����IT�S�zxb�X���v��ڶ��v7V�׋Qr�O���j�x��ݪ�\�K`����ʔ7O��B�@yȷY���q�f(Ԓ�
�!�\�H��r*c�S�}P�]�k17�:u	Qn^q��u��f%��sF�p���n(!��{m�]�
�~�f<��{��pk�4
+"l��7�_�*�)r�&��l�4����V"��.$6VL6ט:G���R��H��m�ژ�N��?�&T�]�l	"hv�����0Y�6u�@�	��Y��ٓ�������B����ߢH�ůV*{��3-}r��uG�NKr?�:�1\K���8��0���+����jp�6 ��5j�C�C�� ^*%?A��wӼZ{�Pi1���Z�{��4���^!�NY
rB_�r��)4#���{�]`���<��c��D[��*;�<��`
�]��.D�����O%-�e��d�s��;���pa��ağ0#-�c�np���r@��D�V�I�^�F�`���^��4 �\,���ұ��Ӊ�X��G�*�ͨ��������p�	���w��1�T��Ǧ���D�N8�͓��#I��8q�a�|"���i�����Q!@Ô�XF�DBG+�{��G���E	����gڢ��L���s#����1_����/���2�C�E�w����$mp�����J �W����q����7_}��&.jµU�u��yݗ�"�o�����z�7'z/��^6<쭗��s��K��ٴͱh6C�O���YR�8Nn\y�G�v�_ҏiԃ��QQ|}6?$i`&���\��?Y@;4M��T�]������)
��ܚjc�O��_����Oz߽��H.��]Iry:��.��T�[��k�V���,�"΃�o����n����
����KQxZ����u1oQ�މ/������Q{Sg��H�,���Q�.�&��	X�(���$iw�"l�c�	���o����@YSi���q�1�c;٦����O���|=�tOTO��O�&2C;��\������=݀���J��Zt�5ھa�q��Pn^b,��<��
+虰�H� l#�p�k�/y����N��B<7�5)e��T<^Rz�uj�`x�m�����f!�{�	m����:��l���e��͵�=]�3D�����Y՚_6�)�JOS�P�l����p��We'��bT�Wr����X�B�U��~.���SN��'r�@��`��m0ޚ&�Ť'�l}O��(LJ�a�F/+̏�3i��+�ُJX&�	����)��!>8�
+�-�k]y�z��=[�|�^�Ls��;
l���e7r���3�����݈�)dJ�4Xŋ[���(��
�A��7[$�"fUlO��~6��kZlAy�?���ǔ�F���u�'�P�GZT�2��f'e���q�lKkM
+�A�4��:�evق}h�)��iC�@�
��ý���>�RR���-�����'��M�o3�&z#�Ћ��W,��ʌ��(2̛X�)���)�aT����-I
+�8q��Z�ᑣ�:�$K۰`���|�E��Y��i]��H��)z���N�&����|��ص\�2� �Χ���
�c}9,�o��v�*�M���*0���
+�T�9��5:Q�.�?�a�1ʉ�d�N�|#���[�a��_dH-S�ӆ<�J=�2�V/F!�M����Ln'V�SZ'�e9_)��ӣ��y��]���^^��h���
+�VV��"�^T�mLs@:
+0z�n��������{{�|H��HYN�ॏJ�5
��d90�2�I9���A�ߋvz�Z&�$y�eq�b�'C&��3�°�0:-��S��ph�j��`�!��&���r�`���,���X�m%uCÛj:/��&�ZfT��U<����u[1-�U'����e�d$pG���{�C@"j3G�	b<(���������"�d�`{�D�wM_���[��t����sT��V�\:�U@�ײ3���ɩ�J�-Qo�O���ׅ���氂��RDQA�z
�e1�d�0D>��ɑ�sϣ�}�.������G)���$�]�9��u�H4�w
����T�dN�����Mu��M������U
+)W��~^9�)��
+x�G����E�+�f�ڷ��z.��+�W��?
���@�O%D ��.AXs��k��v��G�Q�NF"���<�7w:bX
+�gȇ�NP<�$8M�V�dw�+�)�S	�S��-<��?6X�p/ 7��;�VN/C��1�"��M�}Y7�Q�`�]#�����!���^e&�����|��W��M�Y��ض:��Ka<u*�K�	�w�4��ϝ�@�1~�B�8d]����������'d����m�1f��H��%�D���0ٍ���R�U���j�搡ky�gN_"�c��9\��f�"f��ޱ0X�i�&��=/��pD��pl1��>���j��w�C<Nt����f��o
�Q:��b��€��\<�hv��p�E�kM�(�>�����K�pZy���f����|�jH�O������uXXn���%a�nWɱ�\O����4Syf>�x���SD7��w�-&Tw*���sc9��6��{x�\f8_{�ű�o�q��1:�i?��4���l��C�+�3X�W�I�Z5l�)��ܞ@$�N���R4h	2	'�e	��r[�c�l��?��%u����S�
+��\��/Q̯���Ѷ���`�-�F8�w�=)�GD0�ӗ��tٮ͙5��Ӷ��Ac�!8����ƴ��d��4m�n�劶���x�Ƀ��o�7�yLGճr�!\�@���jRA\T�E�����fN�і����G`)�$y��.�ܯc��@r-�jFy�RRaX�S՚���
+K��,�◟�C�����|;L\�8��][)�q=�|#�H[����]�W��;ke+�Ԏ�E�k�I��sL����*��'�ۻ'���l\I�/��KhAR�uz|��������Mj�6N�_��?tIɨ�&��Br��йK�~d��눱&��ALᶓ_c0����4؛�"���h�n�1��́pڱ���oE��/3'�-D��d�
U�V8���T��.��IfSl�jiI�h�B�2��r�K��Ҋ����n]uŬ�``�q�4YuE�m����O\������3��?�4�"b��I��B�K�_����u�C��eX��,$I�l��Y�ǟ{#Tc�>dUk��a��~!.��md��"�&��TZ�srݥ7�o�Y�(�4�������g���<��Wp�؜��U��r�F^�pƢ��+1͑�ȫ��v��|V�&-�'V��������m���A���%�a[��َ��Y���ٽ(�B5�8���p6���?�Հ Ft���n̸���ƣb�c�5�ħyq�c$�ׅP��#X���rW{�)�8���*����uPB[G�Αה7M��g0�����Ι�M��J��:�qL�	�T��ɌW�t�ut��S�����LX)'���:K^Gߺ�p��7x���di�"�S�y����թ���夻�Ŧ1���.�^Lt��%��
+WL��-e+s!��S�o�NH÷�u��\���k��NTw���7t�4��D�5�Y�	�j���zy�e~�br>���5�����������J��o���w����)����?\�/�y����p�B�J����4X
��������b����oM]Qa�����(N�}�g^�D+]��#��
+�"(��t_���L~?|2���E�;G&�^v�U�E�!��q���A��y��m+�ܮ� VKUx6{!e;��sY�I��Ŏǯ�L"�n)6�B�n;KV�%yk��;��p��s�;Dk�Z��

��dx`���t�4y1��0�\�e>l�َ�X,��<�Иl�e4Z�+�	�T�j|0	޲C�^P�U����l�%�&0�I �1���˺#�����ҳ��]�>�L��wM�2�X,H~��:4��Qz��N���v��;A�`C�Wj��B�$W�<�8� �{���/�R���闢{F=;�*I��K�B�R�Ш��TA�R����hYЂutBj�6!�A0��-f-����_/DDJ#7�,w�H|��r�.HJ��&=
+�jA u"H1xN��xX$�����/t�1����M���jMg��.r�&��(O�CՔ�uTBP�?ɟ��Sc.�<��)�j����V�`s��p�&=
�S}Z�4��t ����N��������j�~'EC~���o���e���&wB��4�+�6���!5�f4L\��}̗Y*�JN�3��lrS�A���ZXHO[p���i��Ԇ���$��"�w7{�#�`�	v,�����0w� +T0G_L���ʾ�I����I+�������7@�L�X�8<i�����O"�N�$jw�TM�1XBb�����6b�'+�;,9�@2�iDC�Y��ê�X��}%�p�
+�����nN:1&��
+��w\�%�WT�A,�����..�vv����Yi�~KRhs^2E�����U�Y��Όc�����h�i��P���;,(�O��T��A;�iǖ]���8ػ�?����=mI�R�<�������0�%=55��+���t��N�Ϯ'�_fM`�`-���C+��9t�BKTq៞5�����m=�O�G�����>�l���?�0��W�e߫Ա&d��I]���pT�N������tpD�$1�7S.ɺ��N7ȩ�������D{�)땷�{�U�r��iy~�S
+H���p��}��q3�s��������Z�Z�i�U��D���##���y0�İF�H	��b��&��w+���P��w���F�@0�& K���wXa�a��I�<ī�����ImDp��A��x�i��]���BXn=��Q�p�f	U�Gh4���Qӟ���X[�:�C�����Ԛh[�5G��i(���Zc�Erk��
+ڗ3��&�L��{��`���FA)HVy�ؤ`����6ӱ�So܀������m�ԓ���e�RK�3vAu&���q���͖��p	�eH�|s�OO̔#֝V�l�
��o��^���-ㅌ(sF���9�^���2PX�0���ln�%�����D��˜/����OQ3�54gz��	�*�-�����(����G��0�%� ���K2w��S��~$��������P�_�(�}��vQ��-r����i��zI���f�,�"���CϘ;[2�+��h��������_���s�<����-/^4����"w,��+�˲��'dk;joۃ�}%�6����o��|�%���B�T�×:%%�WSE��Q4�RW����Ӫ�i����
~��,2��x���
��Qx#�ULzU�}j6�)��a�����[��{5!�/�\��Y/�����B�����nO���:��p:�XT�#�i��@�5xn��ݒSGw����4j1z�LU�'���8�Ԅ%V��q�I2�W���;K}X
+���y�ah�M��S]�.y��V���O�qI��*n��4�;�u���Z���96!�����&�d�[;)jO�)[�*\����
��Ut���88�.��Y��~0��c��+���'�/jшD6N�K�bS���N����q�S�55YQ�c&�AXX1���w�$�V4�N�����Z�{?cL���24RyA�t`�X���5Sor��%����䍸ET���'��{��{�?�[��&�a� V��zs��)/�R�@{;���qe�2V�ۉy�*�Y޺�q9�����vQ��a������07`�T3��ͅ��2�&���'k��J�N� ���<��Z9(?L��rNh��n�#���G�ٗ�v++<C�F-s�iB.oǧ���+`ӱ��G���Кiʚ���[�E�h�M�}����K���1��Tz�=�Q�Q�J<L
+)Vu3�3
A$�xk@<���*K��U�b���5�Q0�Ĵ����zd�#f�em��o�)�+}�19?�+�Hw�^����!�����?A�X@;L�dk�}D�M�ӭR��������S�9"v8���gM �,���/�^>�3^C��h�J��;r� �kq�M`&�uah�@�g��w.��t�84c�|�{ pM��N���+E�[W�C
7����?�l����0�O�`�f�lx;F�|
�b�q��vr�|�������`f�C�G)��+��]8��XDZ������P���EO�,�3.T=����@zPXa�
��멪GNx�ș�ҤC��;�2J~�D��6%��_j����l�2��̅�/�]��k�E�d�n���)� Lr�l�'��9��L=��g�.Z
+}�[0÷�(�8�n�:y�eY5��Y��h���^\i܈��NU��,0<���DQ9"��X>8�}�>~t�4�c3fO�3Z�
��-�u��։i��(w�
ٕ�[�sP��Ɩ��o�b�y�K�8L2$|�|�.,ٛ��=�I�՟���E��oɼ��`��zc��B���Y�C�B�
ݕX�v,#����t)t6���Y��:
+Bֳ���u�$�7��X��8u�i�n>���߾�N5EqO�����9W�G��XG���^]���%n8�\��+u��q�.�,���0���n-��N�9E�*�	�`����.��X>箚�\c`�hLL���
+�E�7���qc354����Y>�-�?�HV�,�K������d�a`�{#���d@O~AKok��þ������q*U�]|dN�o��ny��i�U�û#���\����t������Nk���C�@VMF�je�	��$�au�b|�@d�]�������>T}�0����4��CV7��m}	Dp��Ц4�g"���*���[����B���<���:Ra��:���V�%��ʣ~~�7΅�=L?
 �9.��������.8mܷO��%���,xŒ���	�U{ce�����a9o����[
q��HK G��J\_HBVzZ�	�:�t�>�m���O&,~�ڼ��\�*��K��F��*�M�Wť�
+\Y(�����Qb���$C�ꃊ��s����r�pb���J����{��>�S��Xf��Tug�����u왁�������C���R;�%�/<[v���
�)�	?�5���G��:Jp�X�ϡh`ǔ�b�6�-��������1�t�}<��D
+endstream
+endobj
+1562 0 obj
+<<
+/Type /FontDescriptor
+/FontName /ADYYFI+BoschOfficeSans-Regular
+/Flags 4
+/FontBBox [-174 -300 1295 1118]
+/Ascent 769
+/CapHeight 733
+/Descent -198
+/ItalicAngle 0
+/StemV 93
+/XHeight 523
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/backslash/bar/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quotesingle/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1561 0 R
+>>
+endobj
+1563 0 obj
+<<
+/Length1 1664
+/Length2 94813
+/Length3 0
+/Length 94701     
+/Filter /FlateDecode
+>>
+stream
+x�t�s|dݖ���m۶m�c۶m۶��m;�v�q���;����7S�O=�k�}v�:�"!�S�0�50��q�a�����u44�51174VԷq��pҷ27�g�g`�7p�W�6vp������8$	������������1'���9���>#>'3'�?�Y!I��lm\�������Ʉ�Ή������
L9�i��i�Ml���i��!�1���6�qr�d`�72��``ljnI���%lLl�9�%6r����;��wa��*���������^#[+w|#cH:[��f���������������˿l�5-���_���<��ͭ����i�jlnj�O�����T�������{�������Q����H���;��������6F�V�6�r����X�oOV���S237��1vt�ge��������=�6A'�.,�(H�l����8)����Wu�N��ƪ�FNf��#�?M���N�n���߭1|~���I�/+AA[7|O6V|�����X������Y����������_��A�����X�=�Ϳ�w�7v�����ӷ����7����?6+>��?D�"V|:���
�N�/�����1�Ӊ�EL�tѷ�Ͽ��O�?�N�O'�}�)�E��tJ�!��(�;>��_��M����NV�&Nə�#w��&������w0C[��}�o	3�?$��%d�:����;������~�51w���[b�7��o�W��ۙ����[f�7�^	����0,���
X�
�����+�[d���m���mkk�J�O:���߾v��6�m���%��Se�.������osb�n��o�ݸ���Kǿ���r��w4���wȿ�|�u2s0�{��>���w<�\ᎆ�������i׿��I���w����@<���;���ÿ��.=Cg��8��L�>K��&��'�����!�꒭!W�EZf�SZ��f�N��&q�<6���uo�C���E���(�1>���Go!t�h�	U!1Ҟ�^��i$-��R��)x�ӗ��'���D�[��b��kL�)�ޝ���͟�?7?UU%�4NW����X���X$�JSő����r�E|N҅��Ҍ����]����{���Bk����ء/���Ӯ_��#�!���IvO��������^[%c�~T]�^�\7�jq`�.0����3��1e��=����)�p���.~ҎU�~(��vܡGУ�D����0��#MGIX��kb_�&3�"�&М.wBU����ͭ������:L�l3��d�^�%�q����1�+B�}��j��PT+}�e�}9����?/�ۗ��G�� F[܏����v�
+�">4Ⱦ^��!!On��>��!Y��b���j�l2(Ԯ��f׿˯���BgD��Gum9sC�֤�*���y���׻Z$-؍w��K���\H��Z�����_!�oG-�2�����N�&jZ��$�mlj�-t�/Gӆ	�hf���/(��461��jlBh�/�]��,����A��\���g���w���Ao�=B���5����/,OyA<��w���ر�����D���X�^6h��…&ؤy0DNM��J�UX���+7+�)��/}����+�4�*#�"�(��Wĥ�k���T�c��w�-��B�Gv$�&��مnK�~]dԯ���r�zq-O/X�
p�fb��@JҎ��:��&�&����ANwc�]���"�f��>����"��xkJ��>��7����TM��"/A�hŭD?�:��|IѶ���d�,��	��snjR�"�	@��&�� d��g���T���'c{v�YT4��yS�o�
+g�?�dی��F�Q�G�ކ���<vم��2�i�y}҅�X#$��w�JЎ�.r<�ǐ����c�կ}���xwQ�ҙr�~@i;�{[FX>���]\�d�Z��>0��F
ȑ`	;5�N7��L�``�оH]d�ޑ&�z�B���%_|��_ֵ�Ԥ��-��'�0Q��6:�[�K9P���q��T�uG"(p=����t�H$E��f�����nzT�m^�K�kѴd8/1�L5T���^vuZND0Hi
\�����OXz��I�%�b&�ݾ
+��9��u��Fs&�V\1˾�Pǂ_�g��I�)�u�$��M��ey����\|O��!�K�nV�ξ��f@���F~�tO^���Ȕ�I����H��E���buH�?#��P���{���j���Nb���F,|
+F�H�C�B1��c���QjL���X�U�*s5d���
+�!��頚F���a��f�K�Ɇ�d*�)�2Zذ-y��} �M������ 6Q����1H��xً7+D8�[�2�ۋ�Wn�ljm���!�]Z��	�,�փi,�+Bl*�= �n���;�5��~�}���_9�Qd� .Wx�.�"�c�|X
�>Z3`U�"�e��4�1�x.[7ڊp$��Tʓ�,b���/�-��\!�Y�3���?�a�[��j�b#�RLEZ���U�p�f���� ؗ�V!��1��G�(pR�8L�J��ԯ�@_��	`sx���#�n��x�|�oX,����[��?F�Tv���Y�+w�"���v��j�`�z�����V(F%n�\�A��^�3A�3?씰G�G�6��?� ���p��>�͞z��U�F��Q�ǡ�^�-��a��]�fȖk(=(��t��2m-��kJ��Ԧ��L�/��"}��~y�&䘸��:&yoi���%���?��?����"X��:��1��
+c'/�G�|+�w��W�À��׈��Mhτv��c��pL�r������u�UoRZ|���e�_s��C�#62|�ғrO���=@��kRcv��N
+�>��9U"B�8��c��$Hn[��}���;�8u�U�t��
+�G��EW�u�Y@o�)Yv�WQ�;��;��*AN2�,]�N�{�q��:�჋�k�%�-빘��9q��g#�5,k��I�E�Ȅ
�$�0qC#��@gS�t`	�$F�/�DM��:�)9�:*�m�%}�_�W�������3?�������ղ_�T��' ���M����Ƀ5VUwj�Nm]k�c���ƛ����+���Ǝ	�4��q� &JQ����(�c�>�s%���������b�t�j*�^ij�v	jn(���orR�"!�Բk�I?�:Z�$���$O�s��w��E!o,{�hҚk[MUU��B�ٯ{��͊j?F��UK��h�{~a�r|�)P8]���ߵAC�V�Q�y�}�{��of�S�v��jbuY��~+�IlI�
�c:=�v՟�M�\$M��{����\�`t�u��޿�C^BY�b,W"q��;��j>{�D̡6���03�HI6�BL�ʸ�{m��X��������.m=�X����,!����X�6'�����s�\��t��"��ȍ��sv.|��mY��a��\ba��ͰG�Ű�5Yϳ����f�;�R��g_ќj��!��<���"���0p��$�L��p�QH�����G�*ħ[i���a�+�ǻ�ɩ�z_S
+��D�:���Ȉ�m�����r��u堖&�e����:�����r�x�h"5K�����!K&�f6q !�O�ji�ru�����9��9Tsy��a�H[	SX����<9�
q�/�$^	I�w>���Pi��݊��_/���G�����Ȣ#%�7���\��I����	;����g����P}�d��6O� ��\���Dj'����u���
-��Ǐ�2�Ѩߙ`��œ��M=�F\^|f^���ι�/B}DŽ�\_�Z���nу,���8�/V���2�Y�&��{��Z [ܵ��gˈ���Q`V��fYF�gTEnnB�&�Һ�_{��af��f=�Μ` ��oy���1�m��.%�#zǏ�
+��4W��c�/`;kYuo�x�`����%`������i�a'��$/M��(q�U����1Jŏ&
+�r���	e����O�@aCa��O�bz{�v�n��a3��g�!��Z�R�;|{Q����5�0RVKF��S@K]���]���h�cu,�>i�^:��@�\R��j�
DHC��a�IKs-"W`1��=/6���j}|�����O���ڗ�wc���^*�-9����L?ړ��E�����VE�3��n�\FS?iX�W�m��[8��N�L�+�J�s��JVN���mL��r	��J�� 2�2�W6A5�+L�E�9�x� g�b����y�r1����6����{��ώ�*EZ4�uo���p��r����l}�C���l��_Ⱁ�,�^����U���JW�st=�p�~b���Dj�1�/��t�Tͩ�[�{nt�2��+��/�O;i	}��^3jDv���[�Hn`ϛ_��ݫz�����ʨ;)>�������-�AiS�>�
+�`���c��{o�I�6XI�O�.�"�u/\����#o&ܘYզ�m� �je�K?�%K��gM���Nu���%�J�1Q~"��l�,�P�^��\�k��."d�cs3�rgN��]Z��P	��S�6���n����բ�=M�����J"L\`N��?�7,T��h=[���������os��`F��X@Ej;��Y�ey�A�l�Mu��^s�W��dD�l��Kl��ȗ��(#�,��
+�m���R���)�
�ܺ�5S��gP���S=�+4	��Kf��Sb�������a��9)�|�"p��D��#s�@����о�S�mT��A~^�b	
"F�����E�z���>�������)����5��7�M�
����v"�jsT��������U��{�Ws�9~P4z{�))=Ԅ>��g.�/����~+T��gݎrj�g�񟫑�O�n��6�|[�5F_Q<�Y,
�\l�Km{*�/U�‚	���rk��5��s:�E�H��e�ꄔ��g����k)FN(6(�cI��C��%ќ.�=�H�mP�E�B~��!�<�%����I��69�#�h�TWO�������=��$.�'�4��
+V�֩ѣ�g�m0q����P!��`���qJ��K�҂�c/��Z������d)^���lNV��ׂ���["qe@t> Y�I<TI�[G�4�xMQ�,�Ipn�́�bqT���Dz]��sB��{3�My� �����
Z#p"C4mw	J�0�޷�w�I^�����D�`,4h�4r��U�K!�~����vH�X��6��$m:B�E�õ�������^�����s��$�fӣ�;|�N����_[(�6n�ٍ���
��L�Q�0��p7��@}��-���D!w��Zx6�o5� �7���ހC�kU�ۛ�Û�q]�V
I���C�uQQ����Y���BG�QK�M��ӱ,�H��-=���+�S)�3��P�d�r؉D�U�❽�(��{�W�9���
�w��\'�럓x8<�[w���Q��w�:5�}�:�gLĉ�P9m�)��
+�;��e��h�&��R{���X���+�r�ŒA��S~�"�{�k0m;�F{�_�O���ͦc��{���C\bm��B���q/z��o�o�fD�jt����mP������p~���A�ic�z���:��/'m*$˰S[�6�n�g���9�L�Sh|�@���X��&������j����y�J��>��
+k�WrVk���0m�r3b�#l������[p(�j��̹{����f�����?��U���$_�m���xQ���r5痭٫
�G,��3׋d�兆�F�Š�.���I���B��u��&`�ԲbWz�܌��F]O��j���>II�55�'X�I��T��5���/V�^3
+���*mg����{c�X3��)F���9zU`5�
(��w�����(�&�#e^�yC�?CM8R���ܷ�Hp���!uS�<!�GL���6��G�է�d���che��~o>��W4�.O���4�rT����wY(:����n˱%C����~`VkbN�v<�F�
+������,�f2�dX���d�G��
5��!��CG�Li��*�%m���M�B�g->�B��,���|!���<>�>�i7oap�䟰���'ODޢ�۩x���P���%���
e��SF'uV���o�|�©?�t�?	�&'�pi@��'��S��*K�
��� �ٌ
+&��0��ȧ���8.c[�-\��匤�v] -�����Փ�&�ƶQ��,��
+���B��h��3��u�뽨dz�oY-��Ne������8w���9{(�1Y��i����ο�Nx!t���Ne���"���d�~�X��#@t5wZ��������=W�
+�)�A>�-�b@{c�U%BRsS�W�F����Q#�$��G}��e����+e����ڎ1�EVΈ���)$/]7o
�QW'�����J-ק��Z����xz�����F��[�t�gw��	���?����O� ��|�*tcDNj�O��c����
+��xh-������ij��J�2�Cհ����w�αRl˄+�'�<��uxT�,�;(߹�!Fe
+9�I�%�D���[�؝��Qv��M�(2�3oH�fU�4�z��g���$[ h�]���~X���?�v�R:
�6�����]��Wz�m�1�F�<Q0Xу�QvyL�U�*����
+��'Jf�u;,��5�_m?^6\��%=$ ��
8��y���i©��%C��Lsi㧤<����kƨ��A�ڂp�����9J7��3S�$�eG�B���zc����<���O��]�l`h��o[���T �P�������+Z�uX��E���b��hH�#Z��y��焦԰�AϟS�xku��[�7u9�;{���[�wpy�C�k��8�ȋY�$��-B�:�h^�}��zJX���V�'45v�ٗ��0�0`�i�����c5�U�Uޢ1,5*�.�E�o��$�X0*$�VŢ�A�P�?֪��!�Z�(x
+J?�L��l����,��)j���Y[U��Zk�b�����l#�,�*?�`S�f��wk�o4�;|u�v�2v�5Yf{Kј��}>��>ڣh%�G\w^.X�Pw&�^r.��}��?��-?���8Vփ����;�
v�2l��m���rֵ��9]���R�ˀ�JVS����kuH�do!%Gסd���D�"�h)�-�WE��12$[��Ez2Ѻ�0+J�_
m����s��)�K�"zA%����J0�q��	��b#j�9a����[[�4w@�:��4�i��t�{�Ӭ���Y(��t��x��m�~|f�[�r�E��p߰p���x(B�=;h�^,#�v��R��z��G�T�h��o�K����:�����hr�����x^m�fd�4=b1��$c�	�ۡ�R����U�?Cewc!��IHwǮ��?�(�^��G7.��
[,)���:�ɮ��EYm�$-���Ӊz0
+.�rG�A�ij���W o/�J���c<%Må�
������#��3�� �L���tm��<a��w4&v���|��\�Қ訨l>��j�a�
s͝��y	$t��
+����3(���YF��6�Un�KY���_��4nq�g�G2e�KGR��Լ��w��8��d����j,�B�UuJ�ף��U�_`�/����n��ꪷsˌ��=��kN���؞U֍?�T�xK��aRf���ىy)�@3�lX���a���w��r�.���t��b.�2 �����:8v�~�@��I���_�]卑%	&Tߡ �).ʪ�\"�u�`Ե���e�y�A�_��I���
+F��E��I���<�����L��HU����D����V�I���Q`�%xw�w&�9z3����(��#��������>>�2^��>�W�q�_��n���N���>�2�沚��"����C�)z`t�c
+ߨ���\J��\Z��?��>:�Vn\����
�)S��j;��#9���w�e�Y��'?$����H Z]��m�{(�G�Q��?�'�D��,�ˡ��Ilcװm��Z+��)G_�2d|�yu0�����K��T�,���hSm���3�uc�e���*� ��r���{Rm71�[������
+QS���S���OV|׵'Tk�o����8�#2��"s�:y �T��Z��*eRҘ��p+�
�4�r��yu'�͔��~h߀I��Л%^�A^�j"�����M3��.��F-ū����Zn��O��P���nA���CL�� �Rh���ǟ�y�:��6���0dAػހrr��F��&�N���1]U�0kHvR���g��}��� 6`�,7�V#z.��w*A&¼D7����Q'8����*�){N��3�l�80�%�%2�hf�����X>v�%��V�
��@|���c�#?1����D竨T\��=N�ޑ�������֤���SDːժ���U���dqW$�F�Oɕ��n��� �øG	�U�˷��h�Uy
+��V�×!��~�R�C��:�\��䷚��N��c`kX�6�n��
`�aW1WG�I���g<�Y#e��fSf���ռX%�ԋ��E$"�#!A���mgJ�zKa�Sw:i.�kA�ik�����a��"m�C�����DT�@-f��(:�W���i�*�� L�(L<ש�K�<�Z{N(q�}�.�A66�7��Rj��@o	�D�|����5h��o�p?M]ya�ayw����5�8Hk���֦z�>���[��:(I�������<jmSW5\�uM�yg�k���0xʹ9�vb]���!�5k�nJ~Ɵ`N*��zъ�uҧD�_Pj�]Q�Ŧ]���h�ď�����@��-��N��b�F�
+QRkn�h�ク�XJ^d���"��C��g��H}={r��'D���[I��/ڷTn��d��tlF6��KJ^>x������M�ra���=�~�(�k�(��4[w"�yO8$�-^mAk!���-���U��k�T�,v?��c�'x��9��J0۽�5>���wϿ���z>�s^��4ޭ�u��kdzX�L^4�Ϡg��5y�L-f�ZQv�]⋙a6��`��&���5�7b.j���B���3q$~�'3�@&~�������~%)?�K��`�i��c%}���t����N�v�-����	���d�|���X�Yڝ�
Oq�]|y�0�0�q��`�z;0^$3bb�!(������~/��]�7<��� �똚y���Kv'=��_��0zuk2��j�I���F%7���onY���U��)��
%᫽Z�
��-|��3B%vا��Os�ZoȨ'�,�����^6B	UWر-��ҟ�Vs�!J�o'.+C���Xh3†���8����x��T�Df�} S�/ }���E~Πa�C�8�������H����}�H�!�����vd�ePi$x���p�z������/r�z�0�d�J,�צ�>�@n��(u�6��jM�ů�����p:��G�3�S
++"��s�hyjE�}J�HG��9��p�Zm�b�L��&j��Ϝ�s^��:��:t���b?�'=�"R�6r�riM�if���8(?~��.�+�Zƴ�p3{��T�fRʏ`�/�,P���H��8q'cT[`,WsnX92�\�b��"F�ܜ��e��&�؞yJ��Lo\|�X/�n��n��+�)�I�<�;-��5#Jw��g4
+���Xk|�h���b�Z@�	���	�b�I���1���|�j�f�f?SD
��3�'A���㌥ҏB�� rL�B��`����nygg��a��(ip�O�i�cE�i�㱂�C"�
�I.4������j�^G�~�7�
�C�--&]V��6�uQ`j �g���p����q#1�~�Z�H�{��������-=��K�1�ne���pW�[�C��F0�Q��i+%�}I��Wי���R���
+b�t�Z051H����Vp��<�_�j����BT�H���\ߐ��fT9u��ô��`���E��L��X�������Be�9$ �>T�A�B<g2�T��gSQ�aGy&��Kz�f���w1Q}$:�C�LG.'&a�0��1`8g��A��S�h7���֋8���_�Z��Q�`ڡ�'�6�\t�Pr�����ղh8������>=!J�F� "3�KB�Z�kc��
+�s�@-/X��zc��hq�<�ϓ1���碃�0=��� u�<2I[��Q���o�`���׊�k���/f�����)R��;k�oks��>�&�����ȼQ�������z�KƿJK�jw{�Z��)=�#���p(�M8Kʭ�Tw���̻̽4=�2"ƣS��=/�յ]��j�q��gB��,���2K�srӼy�����,�qg��W������Z�l/�D�����\d�da���݇\��&[��G�o�����+�:��_)���@�j)X�p���Dn�i�����1�~��)��g�K���7!�YP�'��r��'>�|-�=�����T�"/k��e���>r��Χ�ьJ�	�v�S��V��A+̝f
+l+�Bywad��(Mo*�Ǯy�W�$�>OT�TJؼ��x��~sw�c�2�i��#��H5៤��f�	9z���ز��I�x(A���x^�Q��W��&�Xmv/lAW�?N�X1!GӞ��nT�=�.N?n����',/�����L��N��8�����?�k��TEi���lӐ��>����H��-,9�SmW���2��*@����M�A�@az�LHrg��y/V���~u�Y$uۼ�;r�g�ǭTnI�+��\�	
+U�T���!k�@�?�]h�E�3�C���b9���+��8e�W��Ƌ�j�$�2{K����疍o�$�UkG��g�ߍ���=z��p����~�I�ҁ͇�/8~w�D�XO!�&C)�^T~&r�4YB�
+�A���R4*����%M��"��h۽ <A��l(L����x�7Ľ�Nt�A�~1o��b��j%oզ[�o�3Vt�Xw�@��9f���![8����r����U��R����wdX�2m�rjiz�b��w�"ռ'�[�̯P�7`���2ߣz�hc��/�#��#���b���W6�=�$���+��C~�E��rD�\��g'��F��JO�ʋ8�d�T�z��ӓ)@p
xO0�n_�5���/�64�\����3�ũ�Y���4wκ(��&٢��W�7
+���9-����>{��
��R5�
`��#7�3�Z\]2�2 H1�h���c����+�~���s�վ�ד����6�X��8$���i	#�Kog�pҚ�xlt�
wk��3"�Ʌ.�����>��˳�IGW�����TQfw}�*�|Ë5=�s<�e3��2�0�aW�*D�����T�w���D����^�����}z�VF�;�d�Ox٧��8������N�C�&��/j�,�_�t��������DV��N��A�HiS��LB?N�L
+�k���Y���D4[x��6x�'����W{4*n2r9��5y�s2��<�w�a(�Ȱ�GN���Ec�����X��x/E�O��V���M7 �<��&o9�M��*E���g
+�5q	.1�aWƒۖE��r`!p\�y���.�
+-F�.:�cy����h���Y�7_��C��.��`͸h���34C`�#����+���ӥ����Pw=G�z&�X���y2mb&h?k�^��B=i\95����֓�R���!>q����Y����D!����S6B:�8�m�YJR\��� �M���Ge�BW-b�Y�U��k�6A���7>Q������~��$�V
�K�7MM�9_X������\�@6���A��ON��N
+�K&<��"��O���hb@:�H1���#Z��d�~�?`�쳄A�A�)��y�b�%�`2�2.(AJ/P�bH_���U��)bڜ��6�G<�<�V�'��ଖ���F2~��cڜ�r�ڴR'Z�ī��?گj�Н���v<kv�7F'�����nH�E���\������Ԥ�F!�9�xt��$����Yt�"�wD���Ӝ��
+z�~hY��7XY�������&¸�����y��\m1�8�V�lhm;��>_���	[=w�Vg`�4-=s�O~`����^���lEy`�J[��F-����k���4̫ߒ�
+��B?~��q���}3b[^��Ʃ��1��;D��K�(���:+@���&G��gh	�%�	��8�~�3w����7��Q'���к�U"��J!?�)أ�f���?հ��������ϡ�~!���><���6���5峷k1��t$2X��O�ݵ�GqF��J������lu3������ ���2{�f��,��
+:�hU
�����UkcW��h�мJ������0(b�y�L��mb��:���+_���&�%�/�Z@kdJ�f��x�ޛ��[u��i
����
�����I�3�t0ҧ�ta2�`p��{��^�2�|��_nv&�N?��բ4Jz�,�u2x���!������$r��湯��<��ǰ0L��e
�I��8q=,��a�7����U-0A8�J�"g!�O��7v�g�m�r����XקN���wA�8s�R�YQ�E�A/����jklW��73&9q�j��5�:S�
+anr�
+�~T�'/��S��;��N��H{���0&��cj�.ɿi+d5���3�!�&�U4qP�Q��E:XaU:<D�+�Oc�=PW��0��T��rSC6ԬC�13�Z	=_�-�������Z�}B�Ě���t4	��Q���@�����ڇ�J7|S� T���-�G<c˸0 �0�$�np�?[�`&V+�8S��_�N��\gR����3~}�'���-rA���`�.A���G���o�2DJj��)~���>��Q��A�����O۟�X�%�c�ڬ"z�t��$�t�ֳ(�-�����R�3g�dYb�����n�t���u�a��;�L�^/�'��L	�l��i���J�nu�oۿ@��l�h6�2W��ë��}�I��;S�p�f\��7����`	|��0�}YB��%8uZz���Bf��-�����w#�g_q����e�+�~Y���eX�C �J��"�TWð�k���� 	�����*X�"�"�	${<��P�=*�0!<kBo��㬱S̴�e?�Z<7��ni�JV��$��"���r�c��4���k<��/����%����:BrZ]3I+��U{�'��>���9f�}���P�����`�,�K2�=��E�u��n�u�k�XR.8�W�$�cfd�xw=��+Eij�k�1�ws暮�#���:��hw�VU�Խ��O_q�f�\)� �P���\���ԑ��浥�թ��Ы�
+G�ǯ���.�A�?�/�r��SS)Щ���ta	����՜�����BX@����9~���GLj	�*��̨Xҫ�����)��X��V��e�T��뿩v�'�ڝ%�a����ՇHeaJ���z�W��e�d��FFߞ-9b/Q����%�2��@����E}x]l
+���+.�ӆsÏ���fF�u�M���3^]���{ �?�[�-�6�==�u�u�e�^Z��T���eS?G,�����@i0��]?��}�C�M��[����`�.�=o7D�<��.�s�Y��ܤ���QȮ�Ĵv5��wR�*���
+
+-�)[ukXu;����p����
+��������T0�v�>c��D�S����.D}�ӟm�H�e��E7�br���@(��D�)sۢS�(��=Nդ�����Lj���<�1�#��~))x�j��+�'��:S"]�.N�B3s	+/��6��服O#��
+���H8ׇ�'��wx<V[?d�r����@�x�9����KoME�4�*�nF4}�PHz[R�x�G�3��22װ�-�8Ms�]	-4'x<]���݃�~��\�xEvd܌�\	��6��z����?dj!����[��"$$q]La{��)��k�Fn�R���p��R��R�mm�5��M����H:����y@{�_�4���Q�_�	�y�*��r���N�y��G�>�G{�S��miI�^M޽Bۘ\�Ƕ1do������!��`�tQ�������^�4���)�Vm۝�?��r%n|�P�N�e	3�_j5س�z���9�,R�V�D�ry���%L��G:��?�x�h�إe��>'u~ue�=P-d8GQ�8	�x&x򕃜����xs���	D	�%�h&q}������<��b��^%Rz�d6L�\I�A�.��@FT�h��c%EE{�&}E])o�]���3E��z3��ER��6s�����`����(ӧ�Ѹ3�^��A��n���g���U�$�c#D,�YfQν�tiP�^[F�1'�Y���E�i��Kl�w"/�0���PCʁ�M�-�X��ce�y/�n)t�U��U����6V1 �fc�C��Cߤ���jQei��sE;��4����G���+]@M�����V�ޙǤ�T�T3�nj��M�"aA���pV/&]������[Icʅ�tݺ�X/O���*�*�W��c�y
7�Ms6k���Xf]�u
+1E��-�I
��
��7{�+�s&$y�u�����Aqa��[e�/��I�S�?_�
+6/<R9�k��L�N�LY؝u����B8N��e�JK5a�6�$3	�OYMY����Eʹ�B.]��F�}b@��O��5V�]�;��+B���V>Wz����AzX
+��KO,\�E��:����=������L�Q�7O�L��a��Ϟ��j����e��C)��M	�
�`e��$c��PrbY���h�^t���>{#)�����n�&ل&���$%�L@�?i�y9k::QH�{@�gX5Z�K�zQ?�����K���6ސ�B�4�����2('���+�8���N�O���"�%>q	�kD��5ڮ���+Ţy���I��=����NlUyhi�ߜ%�t��	Ѣߦ<���p!N]��s���q��jcN��{��Y�{����<����3�3�^�:#�08�)@wq��?�'_n0�<֌��ʢs!����T)솢���js�X��9�fB*�ʱ[�Kx��Fh��fǖ�m���7��<f��=&{�A�ְ�|5G���W����j�w8�JB��p��D�}4�C,���7��e�xʾ��y�I��3C��0!�)}��J�5j��y����NȪQX8���0Q��Z��&@`��G|�3�^���3����k�6=��L܅��cD�����o�m�N��ܔ�?7���Г%n�$�ℕ?�>�s_;��;s:��QNL�(�aCX�ɀ���ɩ�։r����	�jz�����,<}�x�,y �G�G��1J�ȕ��[ޟ��JrAw��M']٩��S�ӹ��_ߊ1���_g����`^�)�b�2�q�?�^(-Ü���2a�����K��f����Tm��L�W�^�����9��풅-ԧ]���@�XsG���b�nF���b�mr�w�A;!�Ov��'��DX
+	7�4��?��-�������I���@�@�Ԋ�i$N)���ovܠzJd8u��T�X�h�a�z�>Ї`�Ln����U��Aַ˿�GF�K2coe���^��te�3nC��Q?�n��'��>��Gs�c"���
+�U�����6�L�z���+�R��k���0|�G���-.�L�3,]	�ؔ�F��4j�qq%�o2ޯr��܂{o�~����>��	\���})����z���F��k�1����r�W��?u��� )�w�
+K��r9�nZ��Y�@�{\�ZNhћ����W�=
|�H�A#�q/I�~|yf���xbÌRe�O��:�����Lz�L�6�(>�z;���<�d�������Y�"�ߘ���G�+��Wa��iϪ�2�	���[YQ�(7F��G��"��NdS�N����T�4M{�(��CW�k��"<j�s2�Ֆ�+���~����ݫj�/Ω~>�� wځ
��<���̘��_���HO���ĕ$�"Q蝹�VY1ѸOź��7⏲����\]�q���֭�G�i�M����la�/�jq�
��IUX���P /�}��������C�!%B�l�<�d~�{^T�w\K$0H�.|�rX��^`h8J����?P��Q&ؒ�h�� W�<O�T����d���F�r��G-��"wAj���a�@1ǔ�4�u��iHPu�8 �'@k
+(Յ����b\�z�
+���Q���B��ᙢ��rԩq&y���R?�G��c��DQ�,��m۶oڶm۶m۶m۶���A���7��X�c����-tƇx�s=]J�	-�yo#�����;�<�)_6�
+��1UV�p[
+J*!"}����'�/uDy����!�Ң�w�v}�n��ԩ�!%�`:P
�Y��J�S/wڀ���@�]�')
+�C֩7�@Gڵ[�F'TAȻNk
	{j�\‰fT�]>�1�6��\�1�;G_r٫���F�~�l੹���M̑�����Q���H�5�e^8���{���;770N�����s����|�F��k)K|(��.,#���ߡ
3��$��7iy<	>7$��:h�Ǿ���ܭ��~���8 ��0��O��;��
��\ph�Z�s�[��/Rˊ��0��zi�a^����Y��ѩNП�������=��r��\8�U�*B���<��n�0���Ƕ�����SH 2|r��,
�|�9�Iy�傎Av�_2�J�D�اj,�������YNkx���6&�.Q��÷"S۽!�.,��9'���@����B)��6%A����$��6)���J�!w�N��?U�����<��)}�^��`ع>L�Hk��<D�@�����91� [�"��>U�y����5�y�tp"M5ш�}�L@��asg�Vfo�_�Fj�c׶��J<g�gJ�:�;��	�n�JX���:)��I��u�8�M�
�C�s�r�=�.q3�J n�%伖�b��V�Y�?�Uv�`F�W���ZF�l{�msП�"�H��RE�b#��u�9���F^��"C,
�����2�&�����*�В[��#�͓9��4�}0ϰ^f(�;%N�b�?�)��}�܄��'�n�=׍=��n��KV��������1�F�!�};y�*���(-Rf�Ӈtbm��I��'۱N֒�
+�O�^����z��*�É��ǾS���3'�o�7��]��������L��5�c�7OL*�|�<�Er2,)\�ԭ��W����z���J�����wӘ�6�G<'�K-��QA_�,��YQ���_1���yu��A*aL�S��y���G%�1/I�R������P�iUO�
Ѵ��M�
�a<ͤ��˷]�>DR�L�q�v�l���aKI�&$���Jv_
+(����9���N֎@�q�����)�Pb��岞7[���j��P{��F�H^�{���fS�G[����<�R�@���T��GX�����7�|!P؝� q�Ց��}���@(=bFz%�#+:��7Ov7�ߝ�Ъ���� �Ae��v�S��Y����&��2����ވj��m�NJ@.Gg)������+v�Yi;:� /c���* ����d5u��r����I&�B*�[Κb�S����7�?H�djDD��l0>4���ї�r��3�Z��"%���$��c���4�aF�u/�Zx�4Q��ʬ�9��SNU�;!�����و�T��Aj�$J��X#�LrW2.��yap���j���ms��%��]��1�_� !Vա7��&���9̓�%���ΜP�Ks���D�����`k�6l���{ۢ��v{X{��|�����Lt
����l�Bb��]�A4`��C����"
)���f�=��ߢ�ߴQHS�\s��;1�!�UqZ���7��޳S��J_�7J�P��x�1r�T_e���cJ�t�"�kX���Tq`��-���p��
+���)�OYE���"��-��k����^X��3�z���' ~��Y�D�"H�4��*F�H>2��{��m�#�MDk~�~�,}��IY���}�r$������f�s��m(���Њq�2�~�Gk�}�W���x����30�ڒ��d�xz�Hܨ�v_G���}1�4���U�P��c�q���p�J`ͣ/'4�����>S^�iGfV�z�E�����d
+i�wo76���'����z� �#���H�}9���E�6��R�w�P�>��9�ylX@�z��􅄇��GP�|ޘ����-O���2=�MP7i����x3"������{����6q�˱I�G�˃}|�>P����ʤ�j�<�
+G��P-6�@��g�@�� ��*���-�7e�ʂ�Loy���L&��.Q[�j��TFg$�ӷ��/X���39<4M|��
�{��rx�o�����*oF\�F֋����r5�}(ݥ��o˜�Y�v����ͫiG�G������
+������Wh��0[C���K���E����|����H����K*�j��zr��X �Taz�?vc+���6���+���֖v�Q�ɗ!� ],�mp�Z�0-^��{-2D�ߒg�e��?Ҹ
+&�	�xg;&�i�5�=s��7tE�P{������C9A�D|��[4"q���j���x9n�O1���ʇ��LդúO���c?��)����i�R:�1�nl6��9튾�Iq6�[s��p�]��ф�!�`Rlf��yo���I}t4��� ���QU�זi��6�0��u��A��8�Y�.mMզ-@���l�����p�폭�H�6��<]C�4����s!��Z}Ex�Q��h����_'�E1�2"��K�8`
+��H�ӾI)t|�ו�PAj���cgJ-�c##t.���"s��T7�Dǂ|����5�F�zS�&�W�ae|�]�K����-�g�sn��[�����=�ò�H���^�d�8-�#m��VZa0*@��NB�\����w&c��ZBF1Pֻ��j��k>�$S�{�7Z���D�5��p�%�Zĝ:��>�Rȴ�vok�˓cO���~�c,ϨTs/��D޵�P�`5�Ǵ�x���z#�h��|�=T��	���4dD:�s���;α��������t�wU�~��:�C�[Z�L��ߜI/Ԕ��E��vp��k��
X�P�,<ʘp9�����Y��Z>��5�f���R�0
'�)�'7!}���x�iO���=��W�����{�]��Y ��e{I��H��P��l�
+��Q��x=�UkND��t�#?��g����QR@�|}����n��G���8��U�a�(7��Z�K��g�:tf���;�����]v�=�@�F��PCB�3Ҝ�V�˄���[����Ιy�R��%#�]��z���F�p�ǶHyVj��SQkJ#�9�;K]i�0��Yo�=�#tK�9���=
=eK,�j !�%�$����d�<8Uq:����=�.�"����Ɇ����{�vA�d(L*;CS�2B�/�8C+�28���%'ȍ`��D9
+�L�L)�k�ZS(��h➳Pu�tU����x�âZ�O���u���b����_�d�_���7*4�3�P[U�_�R������T%&i'T�5	�O�`�\�Q���J�ej����L�n��#n�ʺ!�z��S�EV�w64�<gA��^��&�*_����9
��){�0�ˉY�-81ST/^tgz���%�J`3�4��i��Tu^��썵i�Ԋ�v̯\�^D�#���5[��7���cb-`/f���S�8�Kof��O�	��a������7r��������
+X.���b������P����:1��=!E^��F����:FA*k���0����"� r�����zD�t*km�K':�.)a�A��������S|�1�G�R<^��\{�2w��>��6"2�7�
���W6��-S��`��*�`�a���k�N�06�� �m>Yԗ����]��5K9삧T��
+{s�q�yYf;��<�S`WH���O~Xo�����M"L����Ƴ�
+��]��|��Qɷ��i����AŊz�����3s�ꍒ2�Û�Z��3K��+@|B�JWH!�'�����R�n/
+�,]�h�(@J;g��:}1,D���f8���Fq3R˿>P2Ȍ<_����K�Bq����X+��#��#����$SV�:'c����,�a���/!�3#�U�N�ۢ|��qDn�S�%�vRJ/�rwї�S¬�i��hw.B�p��M�	��޳g���	�KxZv/�gs���V)�@Ņ��5ƬJL�n��4Ћ6���u��~�󚝥m���l�B��h��7��ޙ�GMn��t&�� ��� ���q�'U�&�!�:�JQ0%ʅ>'��vIq�k"�/r
k���Eo�q�n��jM9��ԋt��h=I<�0F^����G]�E`:�ٞ���S��2t�b�C��R�H&�<|���0�F�`
+���݈�����	P<�D���i��h,��~�	:o�6��{�R��-Գ���F_�^�P�2���G��<��~����z�%_���"5�?-�'�)��3U��aƩ\hcW&DŽ�]��Xe�qnX�&5��N{�gٿ�����W�*M�&<Jђ���,�Mm������M�����m)��|F��#��%����w�����
��I �x$0(� ��ôf�����3D8k�%^Z/���b?����K���;0@�2y=Q��H�z+�yQc<m6��[<�����T�2��B�s	�L�8F�"oP8_~[W�<��*s3"<�-������h8 ������d�c4䓙�&��Up鯑�gx�&,�2�U�y��m�Fk=C�H�E�a���E���I�6�pw��[Τ@�,R�JW���@_�5J�����~�r}��6^7��Aa������@bOڝC�����}��':9z��П�qp��tiP/�'�Wz�zqU�~�ÿ��R�)��e�Ή�2��=
+1�����q��`�Bz��F�-�b,���֧��p����V�ސ�N��m)o,��E�����߻$�sV�n|�8�[A)�,$8��dT��F�>t�9�\&���K�@Y�����`)�B�m8}T��
+��"��jTyѩo��v�Mh�v�=���kd=7ܕ��{S��h�;
+]�Si��ⴝ���*Gsͽ�B�ԓ�H4��-s�6�G[��Gq�nhL�rgH���9�Z��i�0�Ԓe��3I��8$RL��%>�r���Z���M�淂�cxl�j4tt��,�c)���#�d�N�R�ن3=P�Ѡ{�</F�<~�2D3W��%LQ=�Q'tc��d��&���x��!*�8������=�l���okm�_�3��Te\�:/�9`R:�"�/���wn[����J�QY��q�A(AZ�=X��oұ����B���fI�R ��Ԙ����D�f���Ѡ������7���|���!J���=��le4��,�tͧ:M�w�=ꪗ���
+��[�{>�Ng�a�6'+�O��Re�\��>��T�?{Į��9���: U	r�����~�\�l���Prg/l��d�H,~r!G	��h�kj3�z����<�T}i���Ѧ���!x��`#���¤hҿb�\����5�Y��g<�f�W��&����t�w�F�F�6G�d�Z�[�vn�N��\t!�#�-���M_��v. E�C�}'���d����(/����}�^hk:��A.���lT�U�6U�ؕ5��Yň2���v��ͱG�{���e��O�'�S���h2+7�-T�BJ��  �\�S����᧚r
+9���rM��稼*Xd�ǃu�g�
�R�2�S�4P�m��!"�7�R���	�U#g�[�v7��]��g�w��F_�'�_�@��'N!�A�
w�5�CW�:��jy�TH���N����a��p��GR����y������j�c؇\�j�[�O������T\�ӥE�	�<�1��c<�MfX0�mO��-MD�؆!ICb+���(I���V�����,�b�!��UeaC
+]��>�W�
+�˔�v�+�՟���Y4�Bc�9!���S�hʿ�-X����W�6�ah�����^�� t��QV�Eb�-L�D)M��s��։_��W4��ڪPH)v�������2s�.�p��'�B��!�y�W���w�,9]�Lݼ��Ht�?���}�M��C�QZQd�v)~U7|t�36�]
yʪ��q���at�9�`����#DWF@V9�䋴(vcX)B]����AO*�:�Fù��F<����]1qW�h]��EОe�.�[>��/����ϧM;O/銎䭏¯�{~�K��Ƽ���a��<�J�yf����E��BM7���2��W��~���p�/0y�j�7�Y�=��U[66�Yo?'/�Cl�r�5�;%',+�9z�|��(�}~L�t�c�N�LV��蚪�Ph��:�P �������]��INO�?J��z�|����&��Z|Ƽo��S%Ոb!2��Dzp	p�/R��̖��0�m��2��ȹU0��f�kY�K��Βxn���(�o��x;V[Ů� ��������`|��5�nyQ�M�d��������K7�Lu��5��=�>�f����LKA͛!�\'df� �^K�:��
J�M��)�	\} ���gG���S����m��u�'bc��['W��5��B�u�O�`���i���;Y���^�M��Rd�yop�~�K(Vf��������ym.�@'��5}�L���
!�F�=����9��9�3EK!猺:�kK1%��d��%���3��&�&���t�l��/&s/i�"OsX|�Ԯ!���t�|���$] k�`o�,��5_�-̔b����2�J�F�J%��00��u����汓C�`�qɩ��fn����Lms�Eꏜ���
J�����_lQ��޺������כ�
+c�b�����F�@k��6D����I�$�bW9���C���yࢯ��S}��+�}���Q$C��F�B�t���4�}�?I�
+r�:Yv茍3�,�J%>J�n8RG�d��Ğ>�������@㧀V�a�q��x��9<&�gUk;�D�=�'4&Q��Ԅ����U����(&{f�w���P#�z"��gi)��Sv��X_.zև��i�4��N$8�~H�Q~P�H#��8� .���4�}�� ��	�}��s�~�x�tY'��2�:
+6�am�{�Y��^�t�H�\Q�_����al�w�.��C����A����,�iO���h�{��)�-��w�9ž�}RT���|�-�
+�s����
+Be5��F,0#��G۷QLc��V!�	ݛYf����e��&���% ����_��2�]�T��o
Cr*�'������j۴K�#��w���a���›U҈3qE�������)᪫�6`�Q$��dJ
��ۂ��|�^�
+�	���f��i��S�|X�Qx�ʡ���&Ё�*��:���+�-vC{ ���l��(������N�z�]1P��6���X������-�����D��dXc�b��.ѩh����ؕEg�������3��!]הC�:r����V�����h�#�E7)[���_1�'پ7�~��2@�k�I֘�[L���%��΃��h�Do%��%�-����!���[l&4v/D��I�ذ���H���`��BG�;�?��Ln���E��|��m�����(y{��M���Ն���a������Y^��v�j=
+���d�Z�%��r�,צ�=�$����⼛G�*=RUw�X<>&ι�U�oN,��w-a�-�]�|��XM����9�z�������6��35l��A%�OlZ�5 �
�������[z��5����_&U_�8d�����G�g���V������F�x�k�����ɖ���9m1{�I(��b�����W�k�3=!o]����s~��Q�iŬ�g��Ch>3���g+���ʼ=9̆����-yy�^	����{���b{-���]C^M��S�����N|��&�!x�en�C�E�?¨l9�=�)��L"�lFV��]���K����F����ƍ���N �^��ь���;�T>�2�:�	�~�rI�lO���H�/gb��H��ѽ�@jt��5�Ve���Lj��)�:\LX�Q?�϶�J3$
!�����v�$	����l)�?r
+,�	�:�G&���C/1�^:�%�m��5q^B�)T�>w�H9@|��*=�l�_��P�z��;���������ZW�+�t��5*2���JSA��gm���}3�dM儏.@o�>ܔ��߹Qv��~�I���%s�'���K]��Y�4D��O���[+7�'I��wP�w
��˜'�B����ީC�A��Y��鼷��Ww[��Li��6�}��ez���
+�П
�Gw�
��#dg�|���۲V��N�	�HK�f0�9V`C�0T*d��y�5�[E�#�fl:C��f�����!q�*q~�$�8V6*z/ܲ�&����m�.��æO�5�2�c�R����orL����"�#J���o��pI�I%mr�BA��
+{��S��|���Cdw��@��λȞ��V��?�?Zd㯥�p����q���ҁ��P��lQx3aE�0��u_����|`�ME4���tN���qB��nj࿳����S�ы��XP��5���Q�t�y����mE��F��R�u���f� b��������?�;����F��
+}�c��W�;!r�����e�XL~�������*Ȓ����I��d���&�p��lZ�v-�Q�
�
+d�n�CP�!;]��V.%˭a.��&��׈:y����4V�ˆ��vj���|s�&�59���qyҖS�5�({+� G�����<a��<��,�ж��6��ZA��A��c�i"��q�6��i~�o����G�/��놔�?@���G��Mޣ�l����|n�@�p�
�<�:�#ErF���ᐻ���u���'a�޺~������ws=���V�i����s��9��;�����>}�mI�U����鼾3��"oA��Ek�bZ�>�H���
+�ӗ�v9n�>u���>�x-V>�ø����2�n����Hhw��i���	PE,wO왾\U��ę���k�y������XIV��Y������ܒ
����8�������å�S�9Si��)����=9B�Թ�#`g�}�"�Ϯ�598 �X2
ü)�:8���II�EtYW��|�d0sRйz�w�y�s���x��:O�v�w���C'-���'��ר
+�/���>��ۋbt��h:tDH��e�i�`ߤ�!���/n�ut4]L��z��x��#�+|5;
+�ם��[=��l���re������	a�
+�K5���v
�����躣����ҥ��Q�I ��J��g��u
+,U�W�Wfi�eֲ<�K(�4���T����s�<��?������Xm�l��v�W�i74�u�nV��x���*,�����ɹ	Z#�+��k/�!�r������`������T�V�9s���L�%�z�B��/�8�
+VQ^�c+���3`*G_|E;���%o�y$���G1M�$eQf�4�{��h��
+[!ꏧ8��Z�����k}^D�:a��s�
+�mo!�~*���L��]j�G���M\��<u3O+D�xdJ������?�p���*r9S��X�������=2��"�S���k@"�GW�����j^4%�:��W oc�a�v�lKȧm����T�K=��-v���)of_qN��;��7�rrМ8�1T�g@x��Ϭ�^�A��)��o�}����	�a�pZRZ!���8@KF޺��!�Qx�w�Bc<:y��d��s��g���h�q�bUo{	����Ov�g=�@w��H��	�Toif~�[d�P�0���� 7׾}���)s�js�xT
�*n�?����x��8v���^��q��ߠ�Թ<���ܪ#G��B,��bbv,�u�L�a\���I^־�g<���$��ȁ:���f�?jM���nrCövI��c#0���~�"Vjs��f���w>����_��|bݏ���'��[�L���菙�����I5hr&"�]1
+��j-��F�'cN«b�e#��1�yws�	�
��� ���@���]qs�k�c��G>�g��9&�3z��
ˈ�v�dž+����6
4����Ʉ[rw+ދ�m�xuԄu��;!�.3��E�y@t���i�������"/���^���-���������k�4����戒A6�w.�9�n	�u�/�޹��H�3��gy�Vo+�%6n�/,O�Q�>�12���p,LS~���� i"_�A�R��y�-Ѻ�B�k��h�.�j�"���.B�Asb�r��R��\D�H�܀�m���\�s)F)t&�'�i�紐(]�������)����_�Bxm��2�2d�#o)/܀�M''�'�k1��#�wnD2�Y���� ȩ��b0Q��p�{��cBp�6WRew�T]���
;�S�P5��Ŋ�qE]����Ik��)�B����K��9�Bi��ܩ�^E�/TOn<��1���j�m��A]H��7
�(ϋ��A%'W�
+��}D�Y���Θ��hT�֦u�3Gn�{J��*��dn�TI�
��8�&�PN���(Đ�_�=��<��%�{��?��\��R�ѷ�D{��&�f�����]���c��E������BDZ
+�]�u~?�)A��y,/;�:V~��N�?ʐ����g�ь������Q����:
+k�r���keA���:�ܑ��P2��v�
��>��\i�*�D����M��+�)���6�I��Z1s�F%�H�=�ʠ�BIO<���Yp�?��r�\�K������e%}^����q~ݲ�L�)��7q�k��i2�	�3K>Z?2�1 ��^���G1����}��DԾ���&OU�?b�@đ0ןO8L���b� ��񠝒�����(�n�z�Z���/Oxxq4n;,����/}���>���x��i��B�z��
+�W�H� ���e�1^
+ޝ���׵�
+M�u6z�����ڰS�]�\0ܮ��#x�l�w���M�}⾑����Dz�ض儦J��~�Z?�3ς]�l]h��p�)�t�l����P��%�x
Uͷ:?��
�1?g!ܺ?��%ISPii���o�>�Ԓq��=g
����SX�3g�������R��
���
+a��1Ă�bFS���,���g-��7��.~��ָ���v�#)��u)�4�|�{T��p3n`�Kr٨找b~��wv�k�5�Z��l�!�K������a6��u�rթw���10LtV��S���X>f��*͎�v�!�#QbO�8��'.����0S���`Hsp���t�B�Fk�yH����
�o1�pHh9�6b<�R�񨬠Ld���:�Nj�')������8f<NT�9�1�,�о�1��>��k�����n��s�.41��_���N���i4r>X?��9���.��ɞ"�?Uպ�{��џ�0%?��Vxq�^M��B�l�������_�뵆w|wΡ
+L��)8q
+��N4��Ez��XVw�}зN��TJ}&!Ɠò��J���o�e����F�cL�In�슉(�����.P����@�7P��e�e*@�2�F���	<�%,Åa��4NJ�7]���'N57S�3�-�r#��>K1��Pu���=$O`*N��jh����y	���}s;mec��29u�|}�9V�Y>�>�ֲ�s��ޓ�x,(�8핪���祻�{If��:�&c�s�V�A����i)O�3�Z>A����Dc������cD��i<�M�������xTsBi���[G�FL��s�l5=�kZ0>8�L�7)�|�C��=P�Jh�<�hի6��|䙐<�LO�Qi��	���>܇m=cmCe	��ob��7��!��
K*JM*��}R�#a'����-�K&�Q^"�M�azDzcn�#V���u��B����m��#
�GI�T�,cP��t�k��BwdN�lZi�CL
+�$Wr�T��W4&�!v��B�	HX�@�Kk3����<V��{�b��1���'d�2%C����Rb�;+z7�}��$7�TN3���T�l�B��n���`搧ճ0����c�!�C7�����}�֜~���578��|
���
+$IǏ@@�^z�X_ہІ`��7�q�Z����ȿCܡ���p
3���ٰl?���ˋ����ݲ�P�=�fP��$��϶g�9<y�f�A��Z��'Y�J��F�}��a�Q�
B���p�lb���k�������0r����8���Z�Z�X�ܑ�K�}�^���d�XXݜ�%����tHp�ti�Ee�a4%�n�CB2/�Ѫ�Cg5��<�@�\b�|�8����aO�ÈQ6o�����pI���B�b6��f�/��#Z��/�
+�
�dhJ!�C1�D�q�|�.��}]���Z
+��,{����@+:C�do3��:pl�3}�XR5c(�|�.;��+c��r��0�&��n^�8=qx,!�@������{Jn8\"� �*�*r �;j�M�u�x�����<IV�
��Q]Z��3�̳��~�ḑ~';,�RJ8�S�G�)�����i��vk���X���+��`�ꣷ?�x����|�!�A�M��X�p�IB��f��Sq{�,��^��Ҕ�-$���O������j	2ô�/�J�e����WVa�Fd�
��Z����m�����SK-G#`�4��~���*/iZ�2a���"QN�
+o�y���f�@�J@�;��H�ޖ�(?����'x0��煏��5�?���흆���'f���,�Z��ʵe���n�H��_���)+᧠~z&��2�᪶1�[G��V�I�R�?�J��8I�
ğ
+#v�鈲�wڨm4��=YP��F!m]|v!��p�+g����g-�Q��4z�֮d@1&��N�Q��Xm��t|�ha�睽�s;�
��	�mѐ3u��O�d�2:�/˄9��%j��t=\?��Ž6�|��Ȕ���ŪU�M�_���(�,���%p�8?EF�Fa}�\O!�\B�%�hߺǹ�h�~�9������W�yn����X��C���nBi'�-�F�h*T�џ"1���5�z���T�	ӌ��~��a}c�x����q���6?������_��g;��-�����,:�N�����~��Ö�~nl�n�GA,=s���?=`$����H�m�o��M����2�Nwj��I�U�q9��-7�_Y��?��5H���r��/��`��Q�c%���B��:�!{��c��5�yգ�=L�b�m��Yy>@��u�
+ͳN����Ǒ�-OQ���'^��������p�D������d�� �� ����=4BoiL�Z���
+���խ�)�J��O1�i4Hq�������z�Γ�X����"�]L�0����9r�0��J�9�Mт!$��!kൗ0ۍo�M0�
NC��\�������ŵ��s-=䰄����sU���r�$�Ţ˜�g��H�¹�O�m8B����������N�~y��F<}GB
+\�+���д.��d ���04�)��@m?�7ɯ2�������Sҕ�A��]����YO�$.�
.�f"�jp�Af1;m�sޤ�M�f7��!�'��h?�%Ң>C��F<�!�����\T3�u�(�CO_�QW=&�����汱	��'>��Hv�3��[�'�/���C�=����R�����K�Uv`�pw1�dҠI
��^���j8���	Rp�y0���9��yjH�e�]�w�<��[@��>�I�ć�*��E�̮2���%���\���U��ӣ�`�/<}p�74叒s"E!���CI�-�V�Z���$�9ӡ?�&��2�?P��#k,0}k��@פЪ��G�#*��R�+p�#��:;�ӽ�ʔ�Jv�����%�GȂ� �I"�Խ�KYY�\�[��Bv�����L��:�
+�O�(^М�FMR5#���I1�/�Ŵ3�M�<ҳ�%��̗�(��Mb5�,Uė_�IZ�֕��@��^B�s�~�/ﵷA4�`H��#S��6�D���<�^|��,zĵ=��\��?���<b��r���%�2���-4�z�h������G�-��p�*�q?M�~w��}
+���3�4j1B����.A/�a]JK7�>��D�I��i�m��$g�>b��� �1%K0ܬ qg���+OA��B?���%��N��ܤK��]�a�w�G�C�����������B���N,2Y����֎�k��2_�iہ�A��@!�����^��������|�n'l�T�=�d�������*�);���b&KԆZe_�7g���+).W컼��T�f�u�F��1�V����E�.P%6�@ϋav�=ț�s>�}��_���}M�m������N��e'8�p�̞{�����������)I8��7�6��B<
��W���Ť����y�j�G��B(j����d[T��F�n3��0�f���:Ш�u�.�:��)�\d�����0U��w)l)�nŤ��� �3�D��(䠗�hp��9�3&�"s?x��Kb��Xu1��{ҥ����]H4|͕�A�Az�F�[ߊn<��p�ڦ [�܃����'f���O��.t:b��~sf6��P4������vя��8`#�ł��&2�e�гa�l�0��ѢLt�/<9�W��k,��Es��CҊ�MJ��r�_��m�	�����[��o�ќ
�)���rO�*���I�e��1�	=�p*V�
+qK�N���͛c�m���ٸېA�1�){t���,ҝ�k@oదb%߼o[��x�3�y��E6D�[�q��7,�ݿn<��D�\Ͱfk?K0��U^M��!K�cwڟӼN*�|�J02�:���-F���y�y�B�N=n_��?0_����p����Z�G�Pt�0㟎`�b���
��D��#��S��
ar�4������fp�
B����_�'W�7wIT8>������2����,�F��^�3p@Y-"l;?.Z(R �F��]3�!C�?�
��(�9�&bxy�����0�\md��ֻ�t�! A�s��렚� �t�ުq�f���:�W���O{����J�uC�r̔N�-"�nFM�APg�Ѫ+Q�C
+��Va�[yp�Y������h4��Z�ӏ�2��7�Qx�^�2�rj�1J����<�o5�f9�3��g�&��ӥ�l���y>�(O�W���P��4�B�_)&�=��-2�A<�2����
+��P����u,���w�ȲK1q�"���I�F�
d{��[m�� �ތUǽ���
+=��Ӭ�x̸φX
+�w���Z��j�R�q���wha9��J	��`�t�qwCwo��=����٤������q�r��?p@�ΰ���..����ՙv���RD�#��ø��w�,�?�o�\�%���ӷ".X�z䘀���w
+�Z���ҫ������V�I��vp�.�*H����¯�(�Q@�A��aĘÉ��7�| 繭�	�lC6~^��5)�v<�[����4Ɔ��'����7��R�S���N[���i�����\MB�6��R��츒K��f�	��SnC,�U'��q�;���|K䏰]��/i��h�ɟ~<�G�h&��ː��?ܕdq���fpi��{Z�1Pf2�\?E�fVL�K�l������?�����բO�R��߀
+���~�#���9����Kk�����v B�/L�{:�u=�$��	Xœ�Xq(�����䟳����s���r�ɩ�W8�˚�Ү.��XaU���������EϽv6�w���Ա�v�F����;����þ5uS͛P���g<��:��I�	BW��w>8�l�4Yp�!�9�g�ް���]E>�����	������O��,"���&_A1˛���I�"�O�U+���%�3�d�1k�i��t��AƠORYNvy�PO�X���lz2��I�,Lt#�C_z���CV��D;��X(׸���i�*�r��5~�E��N�u����W����B�玏g_ܱG��o��H��i�g��u�z.$�l��k���Ƭ\w8��*9���N?�M�(R#!*�����}Hc-�.C&�+L9U�B�����0d>����s.�X�w��ӳp���C��?�W\���d�{`E�9��^���?��&ys)�5G2�f��_9�ћf4V[?��vIL¹�@��⼎rV���j�"������ق�i�K3��|	������ʬ,B
+�{eٳ3�'*��d���9�CE�����i:�;b�Bm�)�]�
��a랚ta�pA�m۶m�v?m�v�j۶m۶�ګm�w0�`ϼ�"�"3+2�K0��25�h��%_�1�J+���d�f�l��Q�ƀ��[����}����JZ�Q�M@�r͂m��b��v#`Bb�UsdˑNf�Q{�K��f��"��"��Ia��c )V�̷<�,�����uMJ�k�@ʔ���9�Pj�TO�+��(-�}z�qv��D�%�o�cTg)
3R`7�\�H�F�4��ebh��r�
+��f������*�I�AҼ��>�_p���Gz���;od?��@<"��J�̒�o�.�u�f�r����a��H������˯O(�Y)W���
0���1e�b�]5� �h��q?s�Q���SZ=0�w/�c!P��X����:�Z�I���� q
G�ZxufP�k%��e���
+𾴕gY����<!�>2��v��Z\�����#HX����}�򋮖���DF&�m��J}+�����*�1���2�у�:q��6�
+�AҼu�P(�43�o�f1],�?��%S�z�t�Є+��r�akC��ʺf�Ҿ����9_U^����@!���9q[���=?Փ�7&�O��n��h�XI��8���xT�bb፱��"��g�4�e_^��!M	S�3�89��~���r�2U�nZ�v屢:i�3�a$ R�	xh�v��\���W��AU�&���#�ҍh����)��;�+/�Y�
����N�=��}
+tw��y�v_�W
+|9|�Ԏ��Fރ*��jQLGTõx7�W�:˴Z��s=�a�����2\��?2�8���9��	�U���7|(W��JI��uA��e��uV<��uK�$A@蛏@��O5��h�����qp���r@��"���%C±���=����N�������O�7`hs=NY��u���f�I�I�$�A_�\<ԛ&��F�o.��E��{%���Ƶ�^+�����-��b��uL.~eVT4�O���Vtռ2�%d8K���G,{!�a�s̴��/���G��ij�mXەf)XKL�7����%�"03�x����P�zgxF^��]d�1���O2\J�&���r���NJ����#����nI�lH�Ջ�������_J����=h8�Ϝ
+�3�d�m�Mdd����ʉB�%ө�K(pWH�\�;I�F���&e�*`�/e5���u]�� ��l1�5qU��J���z���Y�S^�A[�;s4"K'�{�cP#<M�~4�J'��k�Y���1����,Nk��٩Hê>ec��+@Wt����V��C�/����;)V�
+��mg�!'���������B�K��M�i�h��q�J�?q�߶�RH,���=�-2�[S_���V�����<��Bn�y��0�Fs�����b�𸯬M���,���I)�3K�5j��+�*�ʱ�^.$~�%:?�[]6_��+�P^‹=-�פ"�!oVP�Q�3�Ob�+����9���VQ�K��is�폣���`�{(��[-ǧ���G.��'A]\�I�I
Q{S�Uv/��K��B��K����~I
�ct�
�ȸ���!ȥj�!����`��IxG����A��+�jt� 80��sVp7p����T����	W��У�)�cV�qW�\v���{#9�jڢ���e��D�;�Qj��s+qLj?��}���
+���V~������r�T��D0�bt�)�q'.,ؤ�Ʈ_B
L/jI�;�(3Qڸ4xp���Q��SK�N�Jf8����%��(��,rw�Q9| �Z�V�ʦb�L�n��VOhE���=��%�,���oxIZ�
+–	��w{�D��i�`�O�.���핸�UQ�iZc0вC[��J����>;���A�&�ݑ���|�u�\��4=<=ba⁰�*�K�b�J���[��m�y:��L�<�LKI*[ ��'l5�W���_�f�>���kPV��i�x��#Zr#P�-�}�V�:�w��b��1>�M�j��:'��y��o����4rgTi�ǜd��l�X��xb��c�����2R��
k�qjKJ&Q)���.�'k��Kl���˂F-ڭ��uG4����"=H�^�K����<�R`�,�?V�+�Ɨ�?�dHS]�Ƨ�¹sY����t��-�O��᷺7�z�a���{y�4��BQ�*O��]L%)���o�Mg���a)_Έ�0q �#Cn�����y�A_�ݩ�l���U�����Q�4�����u�1�GO	�Ov����9Ѵ��.�sȊ��_ϰ��PC� �p�I�Cv�Y���~
+"�|�y����t/���n���P�s@��c��c�����w��_����˼����폧1�-�!*Y���g�_��t���ˢ\u#��gH/���/�EGY��x4iݪ�Q��Ƽ�	��v�xT�V��>�v�@A���־��Zc�',�7#�?�эϾ������r$�#�h�.�F�S9�A�	"��C[�F	��f����X��~ڈ���EZ�Y�O�'��57���	ݼz��}���b�S=K�������e=W�
+�-k�K�9�B�+�����wd�#+�Ħ�t�'9
+�����b�IǛ�H&�-2��qZ���0<���F�W_�'\���T��ͶW������a�������ςZ�`�9�]�g��Q����V��V��9;����� ߑ�8�'���wS 
��׻���*oU���zj\���P�X/�k*>n���E��r�M�#<�sXS��M�k.�fWM/��S���ē��D����_�.�悖��������R}W8��զ# �e���A� �<�h�ʬJ��_)�z~�ژQm_�1���M�{t��%q�b�l�ۙ˼g�T�_���[a@�\�Њ0�>���pbZ�N��e|�/Y���\�K���w<U��o�j&E�Ď���y�����7�{��23P��ئ�+l��ߤ�չRx�ԍ��$&��JC0�Xx6�I��R�oTt������8���Ѧφ�:��Q��[��[����5�D�
Yܿ���uŠ�.��$Q[(�
+�&P�%��_գ�!r�s��Ȩ&�.������~u#�Gb��bDM�W�Fw�<���.�\ZH_I���\���y�I*;�����F�<�U�c�F��hM�?����/���!��6@i�c�Hܷ�in��Ri.��#���+����L���k���wp�@,O���O4:D�ײ�O�g<L����[M,n�g_!���7-*=�����o�����-�,�Vq:E�I!�u����NV�����!s}ؗ�d���(�'���OX!��?�v�m�b�}>d3D���,�N��}���Z�M�'S|<$�s]�WS��m�~'܆�q�Pޖ�~>�Y��2sd�;8y��h��]����������
+�Ƣe4
+�#f�5��P��3���C�]S��CoU#aM{‰��t��/k���pj���F[����mB��N8�y�ga�XD�+����@WX�V���� ����Jr�P���VNT��CxWaw3��De��)��q�"Z\�+�jh%'���@z��\�8!�	�]3�IR�'���e� ��Ag#�C��1��-���;u^�*��Kiߔ����zd�.95:]M�D��#V�K�������z�h�N5�Di�‡���Ɋ݄��\vr肀4Қ��4���R��
+���\�j��,��朵n���?ˇ��ں��� �D�����=��A��еX�]�D�B|���nkRue�s��x�	��l��}��2=�BT�-�M9��6n	�h�7A������M�Bjʀ�Y��	6	H���Y�u/73�T i
�����!9)P�vC�h��X�$���
Hȝ�Bj�ݜ4�y٦a�*���U)HACP����|��kL�:;V+���ˉ{.T��� YQ!����~�͵cȂ;
+=�(�M��vSDz�mux5|��Q����9�&ð����-H���?fϤ(Wo�B󅈧�^��L�Er���ڇXIGܤf����rmԷ@�k�+NP)�t��.	������C={�m��H���:7�3h#��d)�S����d8~P�~O��n`m"�eRfm�"��o���\oZ5�Q�W��x��M��:�*�r�M�m�r%�t����{�U���5��4R��-b���@W|ӊ\��'5kD]`��P<޺�l��,��Ocԩv�4��[�`��`t�����\!���G�xO������҃�~T7�U(h�W_oծ�_)�Yˏ��h����˺�Ixچ��Efa���{`�޼C��zcX�ca�Ѫ	���U�%��}�
+��Б�C�AD�,��b�7}�������q��]�����ֳ�t��jr���]����9J�17ڼ�3���%/�)�F��i�H�	ur:���
�!䯏�^�}k9.�	�&6vU�.X/{!�m�+U@�n�����6U3������w��'�V����ptEPHs��)C�*f1��nO]��VS�V2�˕/�������#�:�j�ᲄ�Sִ[9�E��U��j��
բR�_�՛�n���`LQ��?1L�Ǵ�C�=����ju�c�=;�Y��v,���:���;}_���Ex����J�_�{���������,=�i���~~5�61\�����F߶	zg��$Ex^����g}r�2�?�x�a�����Y��` �%�s���`����Q��4x8X�8��i�1��Ъ�	3�H�"�)���p1k
+dϘ�,FL_U,�����䛳��m�!gl�%8k��KWI�Ƒ���z/��)��ʐ�?�A�Zr(DO�������FA�t�{l�h�ɐm�/�c�1�Ϛ{]�m���Su�HTchBE���(O�]M��u
�qU[�tu_����M�Xt&��44�xi�g��X�����#cZ�NS'D�6�7�i��#�,1d��'�����a���{4����>v�})�j%��l�	����9��
z(��Z��݋0,(V�Ee ���"]�2XՕ������r)��2�q�E�2hƪ���qme����T�ʡMT\Fr臱y��f����*:yޭWZ�\y�l���d<��x����{_F��c�Щ�Q:5e�M��ł�_�E��S�/�Dޣ.����h�7��c�a����x�/�ݒ��X�5oʂ���s{��Wx��{�����&�
+�'ןs���4�e�,�rb�Kcq���ͮ��f��Fd%	H�h��_J���MS���]v "�W����Ce�`�=y�C���X�q?^4N��''���͞}lB�8�EJ��lt=eA}尵Bp��n���D�uy��hqxR����K[$E�/:��6�3EР�iT�؃�]�ז�qs��!�;��
+��~�@�s�y��蛹6ca�-i%+��܏ؔ�u�s��%��L���w�ߎR��M-c�m᤺�Di�$j�M	S
+�u���g���-�D�X;��+`�����_�Y�"�WW��D`?L�9��/eY����?$<v�k�uD���Ǿ��E�`�	�g=I�[�.�U)O{��a\���w�8,Kr٘35��^g5��.^l�oyU�R��� Lb�X�AV=��Y|�Y)6�컬ʘo��O��m�^�>I��ê�X���(�_��q�
��X��g*oO �a����0~DjF��>}���(WC�Qu�M��(�z�&fh�Q������������\s���\�
Ocs/��{^�Y���/���ł�I�Äb��&�c���J�!��(�� I�z�;�!TB����D�
+��Ӫ�f������U:�Ή�o�qYu�����V{���X��HR#�v�_�e؀��=������4�	�ꘞ6�^jhLG�Ig�u3n��~F1�ҩ<�#J�2�ߐӏ�����L��:U��u�8��R�]`{�#mP�@��&R=ߵ*����ש�����]���L�P�x5c���W�GY�pq���������j�ېђߥnniU�yx�f�4Oa�	L�膑�U���2�Y�*}Vk��q�UR[��V�v�y����Ɨn'>Bwuz�)�JۣQ{��U���*��	mCI�@prX���������N�ʢ%�we���A�)er���c��r{���@i�\�vT�:���� �~�`/�߿��sP0���kJ���T3�%���򭷸��YJ��~���B�+E�t�*��i�]y�������k�	`C�~�w4VG�[��(����C<
+6F��zo9��0f�H������
+�p��	"�Tϐ�u�_�[	O�+��r�=h�'�;8x
+�[�:Sx�3�fULx��&�)�{�gY�ݜ��6�?2p�-�)����m��	�
1£��ej�)}5T���pc��
+�EH�~Qn�(͐��0H��2�V�:bּ����W9���3 H;�����݄�+R�&�L �B�����ٞ!J����#�u]wr���
S��Z��~`��M�t��hĊ����iL��K�	����������]�ug��
[>�ƶ�rl�x
G�
�����\Q�V=ϰ�
+�)�x��N�\�ׁP��m	�s�6��̎Q�p����Z�����������%�+[׉� ���V��}��g1d�J%��o��&����yx��Y�UƵJ�LH����$ �1�+�b�MP�M���f�rOwy���!>��#�x	I�>���g��k�G�
ū��W�P��@Lۭ)ޑ�zQ�����ox��ܮ��JT~.�ʼnQ�����;W=�/��i��٭UnA��(�Y�P��=��֥J�F9l��qMRy�]�YV�솽�t†�+�'Gl�B~H�?�#tw�D�R'�n׹��#	��nl�E_d}j��ӭ���7�i��q�%�Z�<V�uP�Ƞ�I:�F٦
���[{�?Y]�b�7����T�S��g͕�Q���$OB�A`�Q,2?�A^���~�칞�u�ƭ[��u���d���E�$t�´X�g�|��=:�w���}q#H~���&�.#��ʃ�|�<u� �ˠ� #+��d;���y#B��t�����"���I�'Z$�V<i�2ʹ�1^���r����ߖ��^Z�+���Ђ+��(2����f;�e�Ŷq���^�����[>#�F*\s,��7�4'UH�
N��yݦ%��'�ή7t�'�N��(o%Wۗ�<loCd���1���
+�~%�=6�`<�Q_!���'��iRb����g�@M�!�
+$f:�N��H�@X���.%�ʺmRי�
+L2��.��7�G�T����Up
+�ߓJ,H�Oh���a�M���.�ރ6��Bf�L!(.�Yг	l�E#.xY����������yW�5F�żf�h�ߚ庣 dS���{>�� ƶ	']ɺd�Q�f[�L�`Bƽ�F���R_�W�mX�i^�Э��pًg��[R�I-c#v�L�̕�Z�fO,<ֽ�_k.y/�P�1W����.r�\�<�����Pw�W�����H�r머�L��wҲ�^3�j�ZB�Iq���KF��?ҟL&_���!�ӌ1mAdxZ<�Hd�0ղ�b�p� ���v81����}0Ѣ����L��o���Y��ew����Y���0FV��q����vM��b�8	u�$�!�z��l���:á�H
+����R��#�q���(�k��m^�䊭�x��f�Od���v��N��?\R�S����d5����.�sv�C�LO�î��Ո�m[�zd�	؃���RY�>��42�g*�^D�1���g�C�����A����������r��1�ƐX�%s<��j�W�j�\��I�'vO��f�x���S-��R���̄���k��.��w���S��00t�U+G�H/[���)1k������N���	�?����:(+�	�%���J4�.��_	�-	�Ё��I��m�#^4[�E���o��S�N�-$��@��=�N6���xt�2Y�b �@0�1 \e���tl�G唖L^�B=�n#�2�v��
+����|V���9ПNc�z��;�[<��,
ݲ�qe��(ǽ*Ike��:��3�('�eq3���E���Ш�q/��5���Y�V{{W#bK�Z�/fK��4��Q�:��P��	
+��K��KZf<������+���F���+�D�t�@�I6���P��7���E3�H�\ܽ{%���ֻ���f&o���L҄��R���8(��{ڟ�;Q�H���B�������̦�YA�T���l���t������d�@��]�����"
��4G��ٖ8qT(�НDN9*ywU���1�EŮw"������VY����,u&�ȼ�$W\HH,®l�G�:U�턛��������Y8ы񦪔�����"`����ɞt����.�S���֍�*���\�
+��@r�y
��p�
$��X�%��6v�줤\��wR�pN�4#��hV�Vt�C���˗e_�$~Ҳ�:�T�W��+���@*N���Y���E)aU���&��Cf�硴�\]f@�$�HѸm��XJ��)0��|�����1�"QQ\ �n�'J�c�;a�~/'��U/7�w���,SF�^3�0���
q%�
+b����>��϶O�����!�C�
xI���Lv�����o���<���FJgjF���H"����[�E%_����.����	L�a�vG�;��!�T*��5�<k�P=��C�n_7��J��m�\���h�~�֓WL�x��i����C	A�I%!M��]�@!�����O�^��������3{B�|�gD���%��2���.���3$I_|����NJkT=����C=��7���� ��q�����&
\ĝ�' qi���	�:�����&��>l�i��9�-R�^{�� �;zF�K�:dϣsm?2x���=V����m>�XP�h���p����*'�uš�v��YQ�~=�W���X*��C9���
-/-wN���������/��I���\/�;nK���P�5xN��X����Y]��j�[�-S��/�>~��ٔ_�_�m�������m^VvG��s�5|/���l��N�G ����
+��*������Ε��<���E�c֤�,>���>J�
+%�����4| 0���k�{n�nX�Gw����&���_� l].��j̜�ˊ���R�3<��Vn��.�AX! \��ZY�c�Es��#r�Y�o����qJ�z?�f,���W�:�{�c�"�0x$�Ч�E4d��o=«���]��Sr�Mݍ~���R�{*
+�I�!��C����Y�??�O4�:C�E�e9�§C{���C�
��e5.��g��	6<�n��$��.:�ulߪQ�lԖ7���V�&�J��\�a�̗�=�B�߂�:3�j]w�ہ��Ȃ�
�|�z�h��z��&�PI����~.�@lF�G	���e�d>=ߧ�|�==������+�hq���6R���3�^������ᾩ��<QH4�Ά��v����ݕdJ���L�X�tN^�e�^�#�t�OCL�����u�i�}��	�ۙ��C	
+����%jb�X�q�J鐶�%�N���6��*���Jd�W��׹_���
+��obǑ�z�ƾ�?��{;��E��y��8�P���VFg�x�1k�b�6�#u3�8s�W�g��;ɔ�ZK�ٟ��1��*;k��ԃU�5�f�X�SmR��))�aݺ*�X��Z%~�8u�(�~�Q���S����k��@�T)����h���Jz�il�j1gMք/j��ò��b6�mJr�+��J�U����z���Ai����S��.P���̒�k�Z�u)g��.�.VF%UHy��̭�
+6d{�ur<ZI$+J���N�#�o\�1cn
+I��Ym������=�C�`��?���!1�#�mb弆���-s�����e� ���jt2�<l^jzW#cB�ޗ�Y.���X�<>
y��
�|f�}��?��#� X��."�P��mps�rg���`)��__A4L�:p�Ko���+�T�͇�
	�
+y���=�#l��9nS|5�8$<YEBJ�N�r�?�5}�ۣ آ�N�����<JɎQ��awt�|c?��9���S�%P�Z�~@���Mf�O�k��#��gO��}�`ev�i뎟t ׋�,;!�E�ZY����qo�7�*$�Ӑ���~l��a�>@����m�CI�8@H�T|�4�~�~<�&�R�/�Ě�Soฅ�.�
�%U��:v,��#�82n�m����߈]���fo�A������Y���7��j��W��ɶ���Ljƌ�
eǕ���@�MV*�t�:�'U�9��tU
+�����.��{i�nn�H�P/p��9,&4�!F�����C���l��$*а~HLS��2t"��(��iV��j�Cc�&���;��[3��1Nޯ�ƻ�z�9�ҫT)�:��ɔ��Le���j����폣߂��8���5@7Ԅ�RW[�ȹ@2(��L5l�M�����r�C�����S-�\��岊q�/�-ސ��EG(�>���i/�����>�@��P��*�����;7�j-l8!�����<RZ��}g7U����}
`��ʅ�ʑ*+h^�#�X��|/�!��knI��_��j�X��#�'�b��>�fX��b�W�h��m���j�?=0���"=k�j,�����R�ĽE����6�(�8�����O.���I�9,ѱ�Kՠ��s��E4��ZZ}��<�q/��G�_�`J�����ӯ������y5��Nj$
+�iB�o(�Ώ/'�z�)�c}��[5RL���e4�\rǤ�s�*]����=O\���lY�ivK;�˟�jԶ-�sV��BÐ�y.l��Z�H��J�5�~�l�B��9�^h�KSUaSgkF�M=
<|�����G.e%�ss].�~B+i�N�����y��?&Lm���/fǩ�>��w�4W�>@�*�M��ADj�KZ5��=i&�Um�g�2�H��'��	�����2��`Q��w�xeo�}���:�>}�|�Py��R�O��]ETIb�dJ�J���~CrQ�㡢&w����"�}����Xa���fq3�ƏKO6/����I������M�_�J���s�Pޓ‚�O�א�=����N�����sܟ�SZ���r��3�Q�m�s���ƌ�(���ya5�a�D�����H����^�����|zW��r,����
+�v��a4V�r���jdnp����)ȃH��02~q�E������E��v�8+s��ш��:+��v��;�=��#	?�f�rN�_��+�}��d�zbfr�g�bRG���H9����6'F�-Uc
+�����4��m{�U�r:��W;�)�zN�ؔB`x����.z����0=`ob�Xu��]���^T�	)�<G@:��L�Oɱ��x��\68�wBg����xt��e���F�efXE��q �+摎��0=��_Α�m�)ь�e`��[��w���X����o�)�������N|���ĜH��D�5�z|0���p��@���oN����x��D�c�4��@����}M��m��n3��:�f���I]�˸����eO��6�M梿��\̯�Q]��G2�&�t���Z�}���Y�4e�
+&��n]���ZoD`�PvR�αǖzAh`�<�Y����Y�f�<�Xq�<?�^�Khd�TW�lId4.���¿���E���a�m�hš)ڲ�!����~����es�~��E�Ÿ	�s۔��ba�]��j����={yw�Ӓ=Y> ���[ni�.ǐn�(V��V0zɛ�!y��Jp�I�����ʃ�Ȇ�ҍ�<5��bn��Ծ�_#�$u(a��uw�}�@u	Z�>�=�N�B�=�V<s��BM���s��}t�a�9�_
+o$JeQ~v�"E�|~�m}�k���>o]��x���
+�75��ZD�f�I���;�-5��m�e��T|eRu�jZ�v5X���}��"i��̞篋O�&P�\�I��dbԇ̀���H3��H��%���w!���Y�ݐM�̙^�_�:�t��,8�]0�|F�b-�Z�ށ�zYShl�A���t�VKDp�x���$ov5v��oB��Y���Ҫ�NH��$�W��Q�#��02�2�5�~�@�N�Fj`�9w��N�����31�����r�R���;�P�g%��H/�'��#W4�+H���}�&���r��P�^L{�#�i���]�����[�aۜM�W=�:�;2��`�o�*����#tT�P���?�����||����΃�u����.����ΪųF��%�.'F;ڤ<b���絋@­�)���ʹj�2T�{�v��b�z��Ȼ���1�P <�-�ۏ�U��Ce�P��E��Vd�A�(:���f+8҅)���{���=� ���AĀi���q�1m�_��Pڦ��`����N�]�6z���Mm:���I�$
�����`�����*h!��L�v`_q�!��Ŋ�q��gB%
�_�gY6��V���q��7.���l��Yt{f[	�=!nU����}pP5^�U)w�LJi�Ū�������O��.X��;�Ӛ�����e�++0�����"�=Rdb�<_���w4_�,�o�:�z5R0�%� OM8BҺd5���?X��_��.ӻ9�cE��P&�����G�߮
+�Ө��b�5j�Z\�a��Q?�x���w`�	��i����� nI1�M���G;��J�>v�P�9�rZ�NN�0ox!�о�T���y����89����5��B9E��(�-��d�Ft��IϬ����`�\�;���p�MA�q�w�xa	$��X�F����c��|u��"Pes?CGq�*�Mk��8,�JE#�>�znLF(�Z�:��mH�Pc���19�f%������Z5�t:�
+�B�01—o��c�`T����O'J	Q�O��rRFyv7t���;�pS�s�W�IК��sf�6�`��:E�9�b����q߂%�#���ƒ���ȼ�;��uO��E`���A���JK,
QK��
�֥O�x�@@2&,o�4�m�ih��2k�_?��Y���1Э�,�c�넕�Ɓ��H	ؿ+!��UŲ�|�ln���USI�#�x��XY��G*ӄA\8Cм��k�C��o?0�r�N����K���V��WEO�/��# )3���ʄ_�/�_�ŷ���&�N�$�cm�#ئb����N���ix�z-�wݐt�``#QT���d,^�Ds�.M�3
=S�لw$`c�}��/@'�0�*�g��g��bD��3nSG�i~�3�Z����O�oM�������T�����m@�c��HJ�[��V}�¬�U���:��ѷ'��a�
C�͔VI3�����
�D[sʐ8�*�.d���v�Rն�r����a�[�ܾ�Y,��$\[i�"9m!HH���L��⾬��b�f`��K+m��շp��1yUH���z9���F��U�7��{8
+0���8t����sE��2�l�Z�e�S���V.m�{B@4�/:�Ap%l<#�Qa��/K�tbcz��	��Nu���z'`��U!�����֠{�e.M�doX���.�c��K��.��j�l=v#�����y�jYÇ
���Wa��B8�;ni���l#,Z���>o��KV��pd~���Bs�^�p������5P(s=
+��;�5&�O�.��x��	��(\���)a+e���DQ��L�h�iݔ��ezR�*���ٌg���o�[CJ�
+�h@�S��j�n.��ƿ�ػ�
+[�Dygb8X�.߱C�g�#�ŧHk&���*�Ykp���q\T��Q�/74\xyrL��k;ku�N���K�,��G}\��EC<~>�T��QT����t���
t�)�r��][ob����z�ݩ�R�P���N���&��43�aO-���v��Df:���O�]$/&N�ΘlLb�o�&�pt�r��Ĝ��7]SFt~��X��)���Zך�>%��bV����9��=8)����v�-���~Лe{� �M������A3W;Z�36�zu�;��Ƹ��l�K񸞝���ܽ^�`�v��J�R�9���1��c�
�E�ѩI���Z�aN쩶��}�3����ejY{��s����XKۀ�̅�D �M�ݕ��X�lj��
Izk"��W���u���B
��,hGI�
��\t�����q޿�)H. q�xG�Yb©�a:��;Xg�Ӛ��_�R4�����O�߷������9�$���s�Ǟ1He��\T�~�W(��P����.�-
O��P�03�2~�e�Ρ~��f1v�)z��<�	��Zc�K��6wb:+7��h�=���9����{�n�-�q:w�u����P�	��v~�Zt�V.����|$�&�������z샨 �a�����b�'�_���e���#��\"�6j��Z}Z���M�
+�<p�)~�
+U��t����i�|��i��FݴV�G�-Q�hĕ5��
�����{�AI��0L��~�����V|�[D�^���Ο��Q�ѧ��&�%�,��"��f�eH�Ʉ-]׹�g���4�E?�
�C�$©�8X,�C�#j�t�Ys�����l��#���)E	����cVWI����G��!V,��k��y�2�|J�_f��;�[��������uNM�9�`]��^s����w�)_��кES�
+Y�z�956{����!AI���㘞$Hlu:�Nϗ�6�': ꗟ��Y��B�0�(m��|�r�{�3�z>,��fvd[s����f�9�M�'7�بʽUTi
;�;�-:grp��Z~Gp֌��͟<�N��	Y&29(x����pL�wD�|���Ǭ���jZu<��P6��h�=��eW�a#Y�@<q��;�y~�L��-���ٵ��$>���7���à���g�%d��L�<&����5Y#�e��c�����b7m&ҭ7��-vb���hY�)�`�-~Q;7�8X4D�am�f�����drO7���^luX<9"�V�S19�*Ԭ�����@�G�A�����<.e��(����Sx��Ĝ�0KMz����K�#!b��D_���mT�S	;��ZU�:�m�ۆIB&��#���������\�����
�4���f����v��^�.$�pm�� �K|���qe�4�8d�w�k����:e{q�yί=#�&&<���<'=�)��h������$/����VN�f��/���7���!.u�����0�?L8����p����8�inPV���v2�q���(��C7��#䇞�l�b˶��l+���Z%ɝ��œ5ʶ��a�vN���oK^�=�9<y׌B��B�_P���*��$s�O����H*�058FbYv��o+�����H�Ic�,��k>{u]��JR�.�_��ʚ4��O!(�Ѵ��sj(��_[���##�
��"�ksKΣ���ₑ �̈́N%�����q�Y�o|`�0�ǝ��iWY�z��}xW}���:��w�M�Or24�u"_�k�{�1������y������B7Փ���369}�",
:72*�=��5Jշ_-�oH�S���W_���
á�xC�r齎ڵ��l��n�I��2�sִ[M����N���
+��n@�<�og������`f���i}Ir��������H�Nxw�,h_C��FH�6*�3:��>/�B�R
+-l�����:����x�\��n��D+����5��f�8��Uߐ�F:�c�,ϝ���c���c����6�R?(
+�����k��-��Kyy:֏��w�A�K�3B�غ�-��lN��Eh�	���s�z��x�Iс�}� 3�Û�<	$�*�mNW�ǽ�$s�L:��#�&qਦ�1S0��y�4n���Z�m>�q�xS�\�����IBJi�%�n�ѝ��K�e��Ai�7��
+���f�c�H�ȯ������U�W6�Z}��ܣ���FO��oX��ćZ�[�$��A`|��Ԋ�'������
�V�qSDH׺=������6������w��r��7�e�hz�A4Moi�����y��"H=�;ۃ
�',�z%��?7�
+��%�lTJǘ��������"=������T�a
+�P0&���R�"�ěq�@�H�Ea��Cwq���]2�AM��4�*���iIEI�m۶m۶m۶m۶m�ݻmۜ�>�**cE$�vv����6e���on*�d��'��k�����u��*>#a�u�Bd�<�0�Ǿ��Y�F��7��r�J�9m��R~�5����b
����_�vi�mU��oW	fဖ{�R�W��Wߢ�1���m�?c���{Z�q��p�E�+Z�!.'>b�%)���e����z�M3N��B��MK1Z�ֺp=JK8�n��N0-�=�M�s��^��Rg���>�+�bӵ s�G�٘�LF�=P1v�F��׉��������&�C�����R�%��B�ʛe�,��*��U�=�4vrE]��R�k*���0٩�f���t������ղ`!PZ��C�k4%���v*���� 5��;_��z01��#����T�,w�KY.�2o����û��ͦ
+��P8�Rm�Ԇ�QC�A4mr,�z��@����R��9�t>�
+��(o�:�R!�B����Hxa�j�N�?#0��a*����4���:�i��L������z�l�T����f+�F����npW�;#�K,��~!_l�Y<Q��-Dd~�W�vӚo�����{pK���S����Bo���CR��m�{�8����n�b�].��>~��kH��Χ��	���I�SWa6A#�8�#��d9�jITpZgZp~��~�$zW���j�BrZ���Co�tS��6e�W�
�L�/?2Jg<X0�Y��ͯ�0��W�`��V�=)ĚRY"l"I�%=����\�Eo#��q��x\��̭L���r�ʟc�D6|h=��Т�
+�B�o
+
�V{����z�f���a]���W3����q��g]�x����o��W%���U_ysI��M���Y��1�;���^�
+�zw��3"/j�Z���C��|�[?%ٶ9624�/[�O������~N�<7��iO���_��4�ò�����?)�@��f��
+�=@��+,@���i%��Pl����/�l��z�وݱK�i�Tu�B���y,p����<}�����/h��&�PzW��a�v'�\Ou�U��y~��v۷�b�s��R	tA&��$�0n$|D�ɥ<<��,�i��_2K}��U��[�A�,��$��_����‹<b��i�UY�{�EE��Xg|�h�Ö�	�t�͑�Z�X�Vˬ��5!���2��$���ֵU:�dD4f%��/S.�xϸ<'��?
+�}��)>���8����
+��δu�-���2����~M;��[���׏�Vw��m��^}/�E�c��ur�,-��|�����/��چ�**�F�/^��J�N̾�G�	�?b�&�Q�x<��p�������gs>�CGs��nE���>�^o:���,f;~�F�a��V;��x��f�'<��x�`$ۜ_������S�a^^�H]�Mcj-�����VF�����o���
+�90^�2ۮ����H������`��Bߔ9�(�@!������7�4�8(���|�.+�eI�9�e�U29f���ך%�9y��i�ْש�Vʭ�;B"Nv�������E�����0�w��j��u�LE��+��$�������i��U�KJ�s��,��C�VV�[7}�d�Ud�<3�$)�pM̋]�9�qiI,x�T�zXwp����[��~�;	���Ek���h3g�x�u3����G��TΡ�"���q��KO��f1/�Շ5���~T@_C�Q�(����ge$�G�9��#���:�Ϥ�'�����,��$W��R�A`�d�9������C4�X��B��'��8�-տ,W�y~c�Ȩ�I�Kt*E.������3)3#RCsX�GT�>1�Np��
<]0�7��+J�D��Q����ddiVI�����U_I�gd�q�0�	���ݨ�� ��D>r�"�&;���.n%�������y�b�4'�@�/���1���Դ%x[Xf���(��gZT���:��sIV��!��ѭq#5��T�DJ���v�#�zK7TK�!	Yz��-��ݏ�@a��&L�^�y�2=I��B$����Ղ�p���C���|I�<:V�R����~xa����/�L�qc�C�<o�n�o�7*%*ޣ^ �_������G"G$r��5V�J�����Lq��MZ�"�g�e'��Nþ�g�Y��W:$��3hi��?�n��)��Jp]xE��u�t��;�$Qb�
a8mՐ/��q�@��:/t��6��-�9�@�rvI��7v��eO�F:�����#-�MK^4�%��k��+���K"5::�����?�7Erp.m�7�n�����ơ���
+z��=�,����܂�Ǖ*8ޚ����u���\^���Z�	8�g��\B:���U�H�Ń+��t �`����Z���p_�wj�B�t`uTD�uI��@O<�a�j���](���ٸ6�TOD��[�ཉR=����2=�~��u
+%����AW@����躉��F�G�d�ǺdPi�ܩ8��ɵ��~8��g�|L*	�����y�� A�ED�}�|�7�1�j�(���AZ�Ѹ�]��VHT����P ��p<	Gu�qXk���;L�jK(��C�w��x+�����05����DMvߘ�R�\Z���y:3�Y�w�-���L=*��;9�H,T�ߩ��+�N�Sg��=6U�����
+r��	u�M�Ƽ��p�CS[)_4e۹B����&U��1���,�bX^գ���țƵ��,M�ڝ����eP�2�T��vU&UX�<����4�R�ҡ��7�-;�޹��-��
�*������|0��aH_xY�R���w/]�8.�\$'��`�Z���J�?0�-coy
���(@��z��6����Iz}~zvA^��8� {n9�Z�
+�
+�C�w�i���Kl��� ��&�>�S�儁ZD��-ˠ�Y��g$J�f5�ow�оL�l��ݠ.�m*GA��D=).ܓ�7�@H;Gv�f���e؂A
0���^w���e�ց�A����yY�2i���@d��к�?27���'���U�a��c�b,D�y�G��x�1w��_��?���q�յxBf�
���"T����0�̫a�������_�-��"U�@\yO��=�ݰ������a�C���fb�MX��Z�)趕��`3�y�_�vj8(���*�{Jkad'�?�jۼ%U��&�%3�R'���f����ɭA������:yX�˻5(�~!�Ye��)�&�����ͩOo7�?��
+`�Kip�{)�JId~eQ@~�}��N���-���"��uɺ�	u{+�AXz�$�h@M$´��n"�(�^���)5v<�0��ߡ1�3-�d��
/qQ"Dx����>�m�9�5(���v�.d���<��B�v������Tj���5�?�뵱�%����s��r�ZA;婃z��U#]�&Uˆ��FR�n�U�ꭰ��Jl�NR�����:a"�|
+@qꤗ�x~�N���p,�2��^��F����ΤoO.����ƾ����[�NG& ��Z��<�BR�Z��B)2;�F�������헶�A��8Q�d��'[h�p�Kv<�r���O���/2��.�eC����Z��
,�97?��cW�Ԟ�[�M�̔s�/�a�[@_���p
��P���ѭ�w���Ŭ[���E�.��q���+FT��N��`"�q'� b���_�Ql����
+��%IoX9�.w�l�!M�����^4.LS���9{��f�o�N���R��ƺ͑��8u�'��ş�~�y�{?Nq���x�fҳV>�s@1*�~��=�N�r��4�}��9$_�2��SD+Ecl����SB0�ǿ]��R����������ĽƃQnO^�0�����Jduڌz�)|͉o��#j�r����~�P�igA>?�m�����eHb���tkM�
+H�M-��{I��S��2Aćֽ0��p��y	
+U�韎~��EC�w	^{m�b�q�4��Þ�?�Ο�cUK<v�b=��TsϚ��GOs�#�O��T�}�d�����~#<4�q����|V7��oh �C�Q�}I�V���%��V�f�� ��@�/'���1�K����r�(S`�q��M7�������W4�~�w��K݌�No���$�\�<��\n���B#�We�Ɇ���S��؛>���t�ǯL-��)��0+Y�Ὰ++��2{�<�6;,kԖ��;�
�"qu\2��,,5z��C�]���xL�*��M��xހ�㡂2�љ=��a!o�!m�]��"]J�/��
+|ѓ��4v��gڕ�{��Ul�qFg2�A�D)���wO�����H�7�giUo��=}�"磬r"�7��o�M�0q}��6�Xh<����AgGY0~���r.2#��Tl�r�I�,�]�{�d��P�y?<�i䍽Z8�X��{��U�
�֟v����)IB�o��g���u%r�\�5�Ty�j�����o����^����'���,7���+:��F\�!Zw�뺯5���QL(i�FW�Y55�#g8ef�����{�s�/���ˀ�T/M?��6����'��1�8��&�c 3Z2�<\g�rt��l�K�E'��"�#������,%xIrVT�f����!�KS
���b��T|n!�w5��C}	0�Y;�_���@0Ãr9g�sz���P+�������l��̍K|C>�!�)��h~�y,k]S����U���dqe~J��A��{-��<@,��\貹eR&~$�7[%HI��*�E��z�PmV�ė_�����1�0����Ί΅G�u�|8E�*�� ��-�jNPə�
+_��<�e�1�`�k�fѴ��.h�Ek����SX��Bv4����o�2�'ԹX�bHi ���L~3E]��W��-V�����xa_=쥺]:��szAy�Q����0��n��#�B�W_�O�X�衝��_�7{K�qt;�c�O~D�=�����wgF�>��dۅv���A���+5z�����7ع}�v��
�Qn����sR���~'N��D�i��R��Ӄ(�;���HcKǬ^������1��V����W�� �C�3"�Տ��e
+�s�)��ZB��-A��z/�<���Q�3����^V~���&9�(��Dvz�!����ZR����ǭ�
��0�^ eL�^�ͩ]q��-�ܲܰĺ'�����0�u��P�=��R�n���.,,��hP��5S��Nv��C �ơ�ՅHL�բ���tp�a0��)H��ǻ#��dY�z�B�t�@�\�޿z��B�77úM��:M
����)r(�,lN�@��x�z�n���ٽĊ]������w?E�����t�,��-;�d���i�˶N4*l9(���~3ʭ#X���P�L���^�
W�S3^Vp�}�%韟�H
7;u��g(x�.*�נ��$މ�����游a�I���  ��eQ8����;9�H
+
+˴s�$�T�����zu
+;��n�G2ľ�R���;H~��vAe�Zpum*���0�5�e���A�~��}J��;X��yॳ�8�ˌ\��5�R�1��čH!
+�qC*a:T3!�."[��mԛ'�6���r�����dG���>��c>v}.[���?9Y�(�B/B@
+�E���?2{�3��׉�P�k<*x����(�艁�`��{�+�I����p�K�0������^�G���,�6�I��4R�����q?/�d��(cU��Z �V��C�"�,��*f����ʁ1՟8�E�ί6*a1�n���y懴V�a;b�:�jJ�淽�@
+���3�h'PͰ������t�¸*"��������O��-Z%�����aG�|X�V�=���@�IV�f�[��P�x�4n��-�^� ��Ҫ �$*jM����;�����d�DW��ZLYK�e�]�)qd��4X��J�(�l��|-B)��̈́ޒև��q�T�$&̧q$Q´��K�ı i~���&S|;9���jt�_�tF/B�����$N��/f�����
7��Ĩ�NpG��+�+�r;W��?`��}�F�dRҋ��y_}
+2����}c'	�Mdg;���QE�I���>�<#v�%h��M؉�� T�h,��M�t��'��E�pD�	܃���;��B�8�u��+�A]��I�Қ�����%��Х��fgЫ��A"N��R�e�u�W�{-�F��G�D���x�cĸ�xK���Fn��/iu;K��Y��=����* ,\?��^��+%�U9��O�za^X����ड����T���Xj���������ts����F~�
+��$!m��� ��SԹ��<(4".4�����s�XV&�8�M>����b���1O^U�z�:-��������ղ�_�X��s�{�TX߹{���n�M�b��>�!+����ԉ��Ս��$~�v6
�7H:���_�e`���y/9y�6�j�c@8&�w*[�yn=�c^�z���	螦)��ʀ6=Fh��M�Ĉ��؎0����z��Aݣ���@i:�J�	��
�P˜0�,�����PǶ[#-�
�D~�i_$F8+�!�Q�1��陶����0�p�p�zy�7�P�sT�='=�p˦p�
+��k�2�(�TL8�I���bI�EP�ҷ�������ֆ�T�~L�3�wP�4����H��,��ń��Ŋ���͇n�]�$i�i �����x֙`��8,J�z���GQ�eF|��١�Ш��f�)L��c�9ۤX�"��v8K�=O}�X|��9��r!��j�r�y�T����'Γ�]��oP����tB�q��\ )}���a��1�M�t�@ޣ�V�Ѻ�O�G�g��`�>��9�/I�鵯j;�*���z�"]���[��y����Q��}��q(�VU,0������|�Y�r�w���\p|\( \��g��L�9tL�_T�*}L<����N�+�xx�������CP�O��w��b�p!�sw�w�T�wG�1&2//���X��Y9�>m5����~&�!偝qJ�09�QN�� b��|��N�rr�^Ž
+i��|�����uװ��'��-p�ĥ���o�	�4���K	�qW�]ݢ��ד.29
+�jwymn���繅c+^�"����/F����;�u�,�终kܲy���Ʋ5���\�̪^�	�vп !HPP5�H���IfR������l�I�i�ЦX�TD��'�l����Z��jB�`��I���O��M�b���VvƙM;�T/���J��-?4�&����,���a�Tl�Y���/t��o;_~�0�AK�SHX9�v���X%G�ܧ�\X�q‚���������t
+�o>���e�~�Nb	�xO���l	^�=>e0Db��a�+;/�˄h�����gb'x@Ny��bX��+�Z�t$�:
+�|���U��
i��V|ٗi��r��q�!�QN�^��	
+��z��~�@��,�t]���a<7�6�Y���\ߘ�/wS��ԦP�M"����%ػN�)|��=����m�z��tc���	�,�'6�)͉�W�ڢ�H�^3
<C[�
+ ��7oc��|7�GU��k{�����0|��`���}0>�ӹ��1������Mw�E����-��y�̞T�R2�a9h�
+/��<<�n+�K�k+��?��K������h^bdh��f:`����s��j�>��i!	K6�TP��N��D##Ji��ٷ%
���A+���6=�o`�_��6o���/��?�����,!P���_^%A�_�%�z�!N�Fި�/��|�����BP�miAT�]dAȣ2�i�����FF���ԭ&Q3�K��jnĖ�G�$f�T�C��/.j���s��^�G�"��c��0��Jd1�`�1�U���.B�kB5%,H����}�`�Q�+k��>
+6i���Ѻc��u�DŽ���S 
�Y��L�">�~�=8Q��?&��cc��������L#��QX��� �^�m�i����й�l���AwL��%)�8��Z'�,߀�T�*v)���X�(����$� #��l�c�n��7�!�ݺm]���J�}�;n@�ш��mX�9�����g�v�k�c��њ�S-�F��`hN�p��{�1C,HPzy�vNs�l��w����ũ�8�x��f�o��I�]0�u�S���/��b5C�8��i�Y���
���\)w�^��x� !��N��M������>�T���=�.�:[h��L���N>2�:��"��"F����)�>�[��OAB��e�Ӽ�����y�/��'��>��5��Q+�����ɡ�:��m��6��Z"�9�4�@��'4�b	Y����Ed2�EI^SKu��]�S@_�I�?�0��A��]��{�C��̸����K�G����x�)(�[�l��B�&RlbU��E�r����&�MKy�ڕ��W`G�/ˋT���;O���e�s>�)���C��~͓	j��h9I@��/�fO@{����6$�儫�a^�ք�����ؕ�6iw���}���������}��O��T�=�k��*�f�<&�-�Ҭ��"a)��4�%�).�����	N��\LF�$(MbZ�D�'U�d?=+���Բ�HF�oJ����H�6ꁌ��Z1��j}s��h}����0-҂Gt�-g�ˢ����}�����x�1�"'.�}2�k��&��	S"(����k����q�%�����"�>���1+��D�G�*;����aa)-��Ӻ�2�#��N�����Mu6e������8����A��*mmm����N+��a ��}n�D�� #^v�G��D��޴U�(��B��O�-@m���&sm�b�LE3��^�H�#�=���.�7��iMq�309iA���^���*>�J5C�o�T9�����O����Y���2x�k�* �A~M�`�F� f���� �}���b$���;��;���>�)���_��l~��{��4;��g����H!�
��I�X��������/c����'�{/����� �D�=���r.sHѣ]�r_���B_O�����]+���(!լԜ�N2Mh��ǃ��4�W#�@��$�����U��f�4������M����S���R�Sr�:E��7Tv�~�NJ/��7n@x�;9+R��6�5�@C$�=��!ye�uu��I�Մ+:�����:�����bM�` ���Ń�����9�Dy���B+2�0�A�N�F�3��繶�|�A�(��4��]�ʋ���&xh�nT%��K�~��u$�B;-l�!���r�rW�3JL�/g$�8ݶQͻF�t����/�`q��<�1,��9�/,"�E9�:����Ⱦ!]�WH=(S�y���YRe�R,��n���e��p���2=�R���;���J�`����FB\��z� /��o\{J�y�qL�l�d`����8O�p<i�=�R��[}T�BB5�0v� �:F�b��-I3�@nnN��P7�bge�U�&u�,m��Z���JcӮ2:��ɗ��V��I�ܽ�Y.��DV���U�ޮI����|�RJ�tA�a"v�&�|I��v~�g�S��
�?N��u����z"Jo��&�-�mC˦	�8��O�P�(_��8c��9��ߒ���
+fj#�X»��96O��F�*s���Cכ��9ԁ��RQ��_q����Kmа��S�E���<�`	@]����|+*��L$$P��u��p"�q���'}�Y����<���d�Qg_O��^��
+	=��;�Tf:�ȡ�^7�e��r鬌Db�N��^C�rI[���W"�i��d�u������b<t�Jf��[�Z�Ӟ�k��5�u|2� �,S��`���%���S�5���>���!�q��Z�����앥�G�}|6#;̳����>�`�_��1�{f�������dȝ:G/�ʽ٪��~�܅���,���j��q�Go�\��߈���$�?���K�m+"�1�wl�D��Ժ-��¥�ʂG����ܕT.9�3�wn��?tM�NT(V����5�,��Ž�a�G�xba��x?�}HG�Q�7��V�PP��:�E�.��(�SlK�
�t��R7�x(��%7(o�bX~��%�B-��4+8���SO�c$�D�4#�,o��{��A�n����K>��=��>�[�8-0;��Ԍ���fO'G�q&s�uW��˿�҃t�����H���C��$u6� ��Q~��O&���amٔ�Vxž?%���h��6��QN��Ux�
+�S����U��R�צ���IL)N�JBx].vhD�ű�5��[ԥ���`�>���;���v�DY��f�X�>+�j@�-�	��ж��ح�i����O
+�n����+�Ѫ�B���N�~�a�i��r�V����j�;�Eh��2e�m�s�'sܚ��z���o����N�Y��)���4����a`�cī��|��wzb�
+KU
,�;��;N'ࡼX���񮢎��t�Ϙ��|������A�9*�����y�S�'tm��ߎ7�RX�͚�r�_�ी�g}�۱��{���0�{���.�i��w���@��~ ����+�He�z��,��l��N��������#�������0�I��
+~š_�߿H�,b���"����-��x,�{A��/^?|f�E$��i�!��[9�?�8}!oo2�W.BG����
5\l�w;SO3�!�h�k^������L���~�+a��z��,3�<
���
+�	��*N�[wT����D��N�#���-�<��xT}�k
+ʮ�<8*�.EՃA]�)Cf	S����^�3��$@k� x�p(=5Pz�q��S�}�P���)�H��	��Ю4�~
+�所�H�ƛ�2���j.��o*F��F�w�����"g2/���8�d�밧�]�S�������[!�!�N�{��3��$�3Nd��4'Bւ���]x
+U�j����'������1�"�eғ�L;�TxQ��S3�~���j�/���Vzɐ}���ꗑpCݓ��
d��:@-G���D��@��-�����T�!����k�%K�j��B�)�����)IjΛ=E͘�~�J.�zEc�-����P��Kw�������ȉ5\����qs�G�>=h�|��4����l�@ޡ��iS�\@k��3�^��{�_L﨟=]����R��pgg������<0F7�Lͦ����dK1^j�{�Q�w��Vb~��d�-���t�����)�}�C�e
+��
+g:���c��(�K
+��M��kۉT��|й[��������%C�	�a>@�&��2���3�!6g�@�6 �	��̨�r^�$��o/y;�Q�MW�QH��E֎5���ӤB*/mV������`|U�",������Y�,�l4K[;_3����A�~%,�?v*-�T#*�'��X]��1�w��
#ӐOHr��Қ��V:˴�U|�;ur�˵���p����ހE���$ijv���7��tQ����d�\�q�Y��6^ ��g'kN�&�k��|2ޞs�����+����͗������ 歷�� ����u8��$U5�@���Ŭg7Bf+^���9���mE�W�Wbpd�?C��#���V�����5'����e��ORw�<1ݴi�f�*��Ʒ\�EZb�1{�Y���6��^W;x�y�����0bIr�G�<���dAb�E
�p��ߑ*�������`Db/Q�ܬ֓{��B��Aw��a�x�p��}=}��x!9@뺜{��%2�+�W;��;�v��ޟhj_�Tÿ�G7J=�ad�IG|!�N�w)�DALC��h�&F�%�7 |to��I$�&����g-��V{M�rc=�W�i��~�B�]({H�P��'����[.�:nKM��u��Y�a���Γ��5<�k��g����ۤ�1I�w�ik(���ފ���3�/i���x�� <NW$�I�S��Խ�ѷ�֛��U����ҵѪ�l�(�>�q�Z�4����B�ćI����J2���8���:�F��r]|(	�@��,ba;��bͱ�
+X.�	�v�m���)K��ۼ���x_U_��
+��|�p��ƿ��Ä �y)Z3��0
+_OD��D!,�
����x��Od7:s�@���ש�
s?')G���_֛�kO��?^����)k��1�ٞ�,2��b�N6e	(0�Iu�&MTQ%��Yyo�(��y��l	T�O��U+�n#XJT.,�)S�rM�y�/n���@�d)�E.�����h����΢�Gk��m��J:-�N��#�<����Fe�3��(�.�nYM��ϱ�?�-^i�({��l�s�A��P��I�$EoBV_;O�h��\�hߠ!]��X�/"=XOe>�A����u�䙏�ѿ���fL����觺h{�� �Lz5���+��9��6_����p�]��F�͎ (�И�Yag��T���(z��2.��o��\�& ���!m4���'����dB��{g�F�B���ⶾ�YA*_+��R��~��X0�&8�laɽQ��X9K ��Xҭll�u����Kږae�Ӕ2C�Y'C�ϚJ�|v�ןG��[%�e%���^��Zj�1�rCϖ*9z�F*�����
�G;�p���^='�M�DwcC�\�Ě������C�%zu�K�unw�[p� �FM~�����O��*���J����k��ӻ@��Ʈ������ͺ�G��ܬ�ƈ@�`6��{ټ`*_�w�2ޮ�vA,����Op�{qRo����=�M�Jy%!Xk�bAJ���́�E��]=�b��?~� �kkc�Լ��e<�FD�� ����:�WH-N�\��|Ϟ�w�s�Z�l���=�(�t��_`C.�*W��n�p\Fm\�F��"�W�!�`I�n��5v����[~o�8i�d���_�ad�7E���v���Eh⺮�6�B����f�Y�18� 9���)���,��W^���6M+�������O�TT��|p=i�J����z"�
+dÂ�wJ�Aq~����Duf���l�۶�f0����ދ�i�Fo+t�6���x��G#3����u������?��U��~��\�R�J�dE��ǹ:Q
+,8�F�U�aדB�`��9��3�v�sp�XJ�"S���ƇY~����L�t�kJ�m��x�7��CW�DߋW����b�M�	�ޙOJT	��༹IWĽ������썽
��� �¯I���(��N%�Af/��>����8��D�2r@��6�	܀��iKUx��0�dH��a�H7��=f{.�_8�Ō�v{/�UR"�ҩ�e�g���	vv��A���!ퟍř<���UtT�'b���}�Tf3��-��!H�y·5'�&~�7!�h�1��?.�65��9=�D��E�ry��Z����9��
+���6H���(��lc<<"�`�O�@*��j�0����r�P��=�D9i�ȣX%5�RHt����D�=���x[37-9�~�pV2��k�~�2>�j��n� k�ݜY�E�v�Cw�Y�P_�ٯwl��d4��H3��tY�� �M���X�a���\f��"n���=�-B�����s;�����CB	�f$lQ�}(���o�ϧ�t�I;s��^�,�>�-�</9�����V(�=s�S�\uʿ�IESx�Ot�ʿ|���BC����e���	�9���tn������~r��u�8��`��Q��֊�"ss��ӉJ&��7�8WƁM5��AfCu�v`9�x�As�"	o���`2Ƭ2q�/�o�eW���*W���BU�ݖ<c���>Q7���/���Y-4��
+Qd�i�~w�[�3b�J;�O�\����4���,D'x��F�&�"Q�r��Ϳ;08.�|ģ����=��Z���w�f��ٔ�2Dڈ���=�b�e�I��6��(6~�=Fߞ)A,U�Ճ�`�B��\乛C��r�g�`�iϼ�p2�[j'�"H:��]�&�3��:}�5�e�<���>^��eZ>��`r4��uz�PN	KK�>Q�����<Gx�U�Y~�kZ#�h���|�.����A5w�kC��9x��1nԙ~\���VO�8P��j�J�Qцb�-�_��*"a��W�I=!���V�'�ɫ��Q^P����{���36�:�x���2�,fg���d~�y�������Q�Q�P�0̱V��Z�𕀺g�*�lqo���9e��Y/��U�e��
o��;}���S,�>9P$k�~�!���[���ϔV%N�K�eFQ(z�IU����̎Ј�ޭ`)nxM�~��!xz
�1s�����cuDv��!wN�:%M=O�p�FZ�cFϸ=:��-������$=�f!Y����^��t��04X
���Wߤg ��B{R���kI���E������TCj��fVׂ9��㑨�,+�O
���}�P4a�\���}��׺�*��H4�ʚg8,)92���|PL��޼^�C���Co��5u!�eDG?��-ts�]<�dk��c�6ij}󕒡K��
4�n�B꧸�-SqO�X��x��焌6=�_$�"{��9VzoU(��x?�pN�v�ņ��e�_X~K��Ѷ��x�e��*�$�'�K���/�����A���S��(���YاǺ���NK�c��:_�ғ�*nlz��ӭ��	��m�%Y
ť���lح��Y��Z��I����X3���4�S㺞�w�������e?�cd��߫k_�����N�ʏR�ߡs��vt�4��h����&c�*�،
+lyY��TG�F��s��
+����7�?i��EP���נ�i(_F�I�p�V����5jC�m/��,9��`�S��1��X��-QY�
+[E"��j���4W��~aYဓ����K��0��r<'��0�IY���k���ƾ�t�?"v'���V��fʙ8F�e��'��~-���7� ++�ܡ�K/+�~��3y��~���o�zQ��ń\���@�p�p�rhߨ����>���rs� ���)1��=��^�&!\��ds$��Eاñ3��ev�1�/Q�������f�4�b�
i�	���y�7iO�ڍ�p5T�6t��mdI��7���`re�?��n:����_6�����\���B;;PW����g����f������[�/��N�G��/�����,ׅ���N`�sS����O��@z�m3T[ÿ2�ՓB�[WTeX����n����r/�a.��)���&$���Z�/��S������$pv���e1p4�"l(�����陏=3��;���~4�e
+<8�B���v����Q9�
+qw�m��ߣZ,�������g��UchFFga����{�ľۆ"®	��C��K���Qp�<��B�*�g;:�KGZ$�f���
+(j��z�J�J�C�ʙY��@���F=ѝGbJ5�}��\���me_��A���4�}�o��-������3������H��2�7�;R
[hJ{'���ӎ���jk=!����hV71��%O��������J��2ļﱐv��=X����·g*h�?6��YJ	V����4r��v՝�>+F���^�B�*�[�T����(E�8�| ��m���۪|L>#�"�"��w��Jv��2Z��6��0�شl�����EF.��?��������+M�(�kĒ�I/�h1���ʴ��]Zki��*"H�H�>����OIv#�_�^��"0���n&����V@���f@�#yP�Ā��qװ�԰m�V��.VBdP$�*��m7���"R�7���\2�*� C��S���.�~������G��ҍU���t���”�>L��V�ţ�,���Q�yq�F&���U{��}	؂��G�z�&�{�A~d{��\�ߞ9_�,P�����׆�c�lñQa�>`;�b�z��2��`��_2�Ჽ��*�˵"�6V~d%�5�ZF�A��LW�*Q�<����v+&����6s���~�g�lmܬ����Z��
���(`����^F��?��iAEW�m۶m۶m۶9۶m۶m��>�>����2���i�f�a@$��z%5E���hz:�ԇ.'r�=S'�
?H�pk��|t���i�ݺ{ni�.�G
<�Y��:#��V��!�"�	����&2j�EH�'�">�
+����+�%��d�j�E]T�Q���f���Dn5������1�G����H�:
+�u�ٞ:���E(-w��L�G�Ѩ�'Eܛ1�K	�����R���
+��N+a�I�&8�֎��Vk/�D��"��ɩa��M(�0�e�f�o'�,��+�ǣX6D~b�5�[��F���D�}c�7E3!s|J�/_��8�I�?���}����?)Ō��D�v�s�V�~��V7��e����(�,C��\�^-xjVN_P�=&�ԩ�-����� �������ݹk��jv��xeE��U�P�HsD�dd.&	u<`�r1Dm�`������:�
��Chjԇ�(�j�Q.�;Gm�R�50�ۚH+��t`ͳ}�Ä�����Pm!k��`(���o����^.ղ�1��s����r�S#@/R�&�"��bZ	s�dS�Ce�r1��4e�k"f�k���j��O:\�����Ξ�ݻ��]��+�����Ƌq�_���+K�8j+�2kj�C`}���aoe:*�����n�;�����|n��\4s�k���B"�S���mLӖ���ųV��Y��̓�H�1Z����Z��4I�Q�5�0���f��v9 a�D�J`�(�^%��=[��3��W�4�:��|�'��W1��~e
,�)�)���(��J���|�j��ϫ�*�ܐ��g�n,Uih^N�Пk�\+#ͤ��Ś�K�:tҭ�i_�L���I��Ӯ1��������mP>2�c&�#�BZs�SPg�o���f�%�%箬yz��e��q�W
+w��ʀ��*���=���4Y6��'�NX��C���R0������
+���[��d���翎W����ӈ�꿿�o���� �I,+� ?�&��=��w�v��5���Fd1�N�I�V��OBD+��B��QG$���=��F�0�տ����o2־c2�˘-=r��
\�E�Y�����-�Ǩu���G=�E��
��ѐ�S��b���0	Zo�`�Io�����+�O�ᕏsS~:$��K^F���0�!r��ˆo%�hp!�Z<�T��ꆫ��c��%+6�wo�@Fuȵ���zJӬ�~x4�΍@`Jߧ9�*,c�JԸ�:�
+�	l�:�����gFԅw�&����
Az��L���bS��l/^Y����ȥ�\�t&���Ħ}�G�'�`,"Lh~$Y���^���h�����m��Nv�LYQ��K�[���%6\vO���ej��t-���*���	aP<9e�
+
=�yU���`
=�3~�)��
+�?�e��l�@*+�o�|���ѩq��H�AN	?�8ٜ�g�WȤ?F?*h�%�]z���c�
���ըEͤVb#���t=&W�҉���BES"�z�U��uckI�Z�ڔ��F��&�0���3�'�F�kȶ�մ�iV����<(+mOY��
�����T��K��CBPxvQ-)�=� An��)ڷ�=�f����oVA����^��ᶘ����W��G[ܓiVE��d��Zȵ�,Y{���ܥ/��uO@����蔇v��;v�I�c�†W�ꃢs���'q :��}���i1q���F�'��>� ��C�~�v�r�IJpǒ^AV�g�[u�z��tx��a#3g%�&����|����5SL�p�oa\�tyy0bJM���ˏ�;������P	��D��Z9����ؾM�r�3/�yA�ШR
+�mc4�2ƹ��]׿����&��w}�����3�e�]A��R˶T.	(.:2��G��[)�?�
+��,p�Ǝw��ԉD-�|P�",��-n7s�y*L�Te\�5��|�u������B��@-�I��^?�����#6|�O�����`@�ɢ:�hbf+w����p�Mޔ���q�z>R��Ow����{e
u�1A�}�˟}Y�2�`����=�J�����"n��Rш���L����l�'x�역��Y���?v/�%�Rt����U�Q��SE_'��޽��TE�?�'����M��`���5�t�~��B����鰨.������V�8��D$�@�������
�h��؋���=���(�0c�2��(�U�B�}�Cak���I=Z�#nO�ur)�l2�k$��5�����L	Þ�.įK�R!�F[C'�����Q�d?Z��ҿ�]����.����X �&��I�A�`�������e3fRW$��놗`��Lu��
+�0>��3��PY,������&:�I�U/��~vRCmp��g�@���~��F�t��袚I���c�7'<�)������*`��@�¤pS��,C��U/F�-��[�S��?�����I'��2�t����Ƴ#��-Q]z�K���!ک�4�lfQ�lx�Ԏ�k�s
+t|�M'œ $!��J,N�KƎ���V���o��V
+�
�$c��
��R�!�E���nO����S���yY6m�ѠLOצ�o]
����L��3����L�eV앸��ٯ6��KYOW7�N�/���`�Y�m�I׻%s!�	��:�5���T����R�]�:�ɩ���raѮ�5�zD�6u�	�N�;Ҡ�"7Hn�+��V\>/4���
+����,���|��k���Q�鯓�ȸ��5Y"�`3�V6�	�QdE��Wz��}
����n�{٩���T��d\.����.�?��#�l����G���s��I��|�M����`L��9r�9cs�Ts�5���z�(I���a�Hm?泉B�O�i��ʿ��)o�)����yA�g3bv�H?TݝI����^瓮������q.I}���Z~|�,F^l���I�֑c�;��>Lֶ�,ϸ�������zN^1�DZ9�8pu�=�'2�'4B�	T}C�����1��ם%�X`΁�� cYؿXL|r1�C=�	_p2�w��,f����Q�h#��5��\ډw�&���\X����>J���>�z��Ғl�%�X�}f�*��k(=���:�-n�Y��t�_`��f�< �<DNC+o�>�ph,�6,���\�J�2p��/8(.������3	���r�_"���-5y�b�������6����a�ρUь�#����^i$H{,�����@?^��>0��>�K,ڲ�	���,���⏑�����m�k�jpG�P�
����GR��#�e�����j5'L��	��i=-������Ue�.�ιF�v�gyj�Ja��+	~4�i8W�2�	�'!,�6��m�Э��P
+j���he+<٦����_X�v�bv7�@T�\BJ٩)����H�%�W�8����~���Xj��`mz�¹����<�(pآ�N��
+]�8u���38��8푝an�JZ�}d@9�u@d��#���?i��䙒�W{^@�k"RFI֫�**>#���*��m��ȣsǶ�Č7�����o�
+�������)�I}����D�"�D,�>�-����|WV��j�Jnu@�S���F��aP������N�d �R>��\��ƍ2Pu܉�U��X��n�Uc��&��A
x�P�Yߋ*�3�H��q�Ac�u��xe�$w��6��;ԒG�c���/��D��eo@�W����t��(�že���մN�[-�d�y�����B���1��6g�OM���|T��1=��͚����
p۠�ɻi7�bg[Uc�2I���q������BЙ�Lk�}�3,�� 3�뫨"��?�I^�d�X�A�Y�x���ِ��/ݩc���Ra{���u0`&.}�=�U-
?�b��T�B7�҄�z��	7���^��I�����/Ad�����Y���H�NxWF;TZ���V�c��<ݪ���{�_3�],�������?Y���Yb�]Rץ�I>�83'���W�7���[�xڟ�<�g�K<M�e%��O7�	���v'8AO�����i�i�t�T�o��]#�H��[y�*=LJ
+���,�	����"`G�;�-��w��R�bY���0��;I�������@�~��T�u���o<�"���3�Ws�ԋ ����H'�	���⛉�ym����t�iC������#�a�
+�;��(x��������F�DLF�Z��a��!�N��:�q�%��Jլj�_��������d;�kȺ`�ꥩ�h�&A�P����Hr)p�+���H�L�{����`�|:Z����b�����aW�gu˼O��T-�w�A�3���j��n���2�}��E�4K�1�^�xiR�]�Q�h���d,����شV9M�"���ĉo@��@���uD�'�L�n{�֞�5Ӭ$�ԂQn�
J
+�x�
vU�W���Ӧ����A$���V��N��
+^l���
n�6�/o��$�-�=9���`Ɏ�c�L
J�o���_���g���p�Bg�m1��Xr��]1�֘Nԫښ*EU����V;�Dz�@U�+�MIT��a�Q*�Ps-?}R�21��b�`t�@i�6q}��s��xt���?e+3���EB� HF�r�}S�q^��/�҄��mj�ݏͺk�1'`Z���´������AE�y��p�TR8�����9\ҍ�>�Qx!�,o �V�>������?�����'�a�Q6��d��3��U��r[����Z��i���|��YW6��@'|&Wޛ�����>\oDH/�i�W-���M_S��0�h���<� ���u'��� �w�	�f��X>n�*���ED�������A�A��”_��6�k'ZE�A���3��xr�ALy)U���`�o������qx��/)����9��������QR��D�sTJI�mn�j�W��ǚ}�r"V�_����W.�G��h���w��a㪄��T^���Z��UiqB��R-��0˜�i�#�P�\em�-�D�^}�c��,}���hW@ļ�o��s�5�`/\КYy��Jr�b�t�[>��Y�ScALR��&l�E�Jv����^9�v?���D{?�N碘�̿�ï��osP{�9ѽEן|�6��:͆����%��$��j��#��^D��{8�&r����a���7��7�[4 ���NX=�V��d��g?�*�B�|�m�[�&�=\,ϨIO���L6Tl��G�2�ԝC%V�&���n}P�I%�	�rBb�eLX�I�/a�Z��h+{�6"���S$S⃱����1j7��|�+<��]�[(q&#���?�*:Þ0d>O���}���!m�fd��	�{��b]���"�ÉV��]���K��/����Ԥ��e���*<�0�z�w����H�ױs�(��^	�o釟�n�ظ��j2d�H�	T3�^�Gv�	�w�c�l�־��k
+\�
+@B�T�+cj4�Ro�3�1Ɂ�*ƙ^�m1�"$��P�y|f�/X	����TB#��]��b�C��<�5�x��
3��~v���o�GҚ��R��fS�2�?��B(t7�����2���D��1;H���ƅ��5*�� �(�����*�>h���M|>ؘ���
�,Aɋ�Xu�W�=mp���]��B�%�Y��6Zx�)��3y�Rm����X�b��`���	��f���rB.�[�e���9�57��҈�~�?x��c
����s]��y�	�E�U+�ޚ��ͧ��v^��S�Vz�-����t��t�)4lH!�n⣂�,��zڬ|+�����)�$F�0A)�NI�}|���yȁ�r:H���Z�f���q�/k�� ��h��]e��r
	�(�
�&‹kN
f��|iS���.d9X���K�Fw�!
hi_ꯦ��reb�5�M`�P�֐S��v�	��4>��1O;u�X��d�)P�a����*�Y����a�h�DFI�;�����>Ӻ�>�0�ϩ�&�O��tv��D�dIy�����;	�GFJW��_�7�Z�S��R'��"#r5z��{2����wؐ��T4�js��r��bLw�~��[�>���R��V���f���2��ʞB�
�>����LQ~A�p{��u�#�oB�A=ҴAM���.�	�q`�Z+�ꅺ������� �����.�o�PvB�[`�޴0a��87y26�z�$��#ꢜ��0\�1�;C�T�9�~��s*���C�dU���fA$Q3O�\��s]�@_kb�.#l��T��XD��Ȑ��X9����Y�
+7��Z�
+�t���B�I�	���MD?����n�g�QEՉ��m5r���M�ƭ�!B1X�n�z���*o�wrX�A��#��|�C��g�.��)���"c�)�.SzP�3�ʥ��r2W?�//Lg��mxQ�p���!�rd��Ȋ�M�;Ig[�N��r���?��aR�W��_G�l�Q<�Ni�������@�c�*���B�hsr
+�C6�	V03����,�ߌC0���7�R����9������-��X0(a2Q�r�y��dݚE��ԫ����f�\I��oC��HG؞�b�9n�u�R������8�<g>m'x�kV	`f�I3!�m�R� ����7�Tc����)�3����f[��w`(�݀�
����e����NK�$�1��i�E��(E��_��+\
�1�n�d�&#����3����a�`�d�
r��p�Q6��R�����[M��� ��ٯӔVq��/Xc�xC5^���qb���������)�?�a��e5ݼg�%]O2�=�W��p���R/�u�'v���Le�`N+�����Y���cյă��o�_����i�VҴ���ֲQħ3��^Qu���"��в���^�eR�ۺ7��ۯ]g0��?�>��,�R#G���vKM�ʣ�O+���T^�3�+H7�9���>Qy�\��Bz!����Z�n��	�)��'�[�_v�~Zd�?�[)�������uC&Z��0!W*�n^�Mޘn��	K�[A[A�R�|!�Phs�=�S"�Yr
kی���y�d. ��8��!�8�������MR�B�������@��4�f\��y�u�x��I�	��Nw(	yDZ!�M����̡�&�&����?�=�!��n7h����}�?��  �CE�f�IřL�*�����L@���^&�i����u�l�{<�֚5���@K��JRg�t\�i��Z�k��5��O��a�H��r3L��#���0G�}&gH M����<�_�f��F:=��L� �d֪T.^O��)S^��d��s���R`-�ϲל-��ա&�	��Ŕ�Ǐp����
��2�)��=H��r��� �p�J��>�]��"���c�o���W#�R�:���$���M�e?|
+�X��_<Zjb���wU�ޯq:pS���9U��tނ岤w����W�2)_������J�vf��*:IM9�=FO���}_z~�SoUM�LCz>�&r��6pkػ��1�>7��J�сo�X��g�G��	Ě%e��E^�ɟ[uCE��ԁ�����xZVK��=i}����awԕ���Jz3A�a�@f�ṫo�:W}�ğ�R�j�5TxJ�I�`q�Ò��,G¢�bq�p��wQ6���e}���b����1t�P/�P�2��]�3��81����ey�o�]Y� �����*���t'FP�d�~>�e ~�Cr„}!mխ��
+�1.sޒ�T��dЩ6a�;.N�n�mw�1Z���"��q _q?��z3�cK����LDĚ�����"g
�Aw���5z{�"����P���>s��/�N�s��eWeN���i0��4��o�1:���\��N�)Z���,���`Vnl��ft8��;���>N�]	0����d�����&�Z�C����<��YO]�#�d�8�d�n4O��M�Ʉ�Q�7����Y˞1E��N�+��_���L?0�r0X���&$f�i`Jė���6�+���\����D:3��(?;c�rh=�9�S3�z�vN����[+�����i4!�8���Ċ�X�qB�ap�O��`N��ӫ1s-��SR9�N�-������`-�%���3�*�$?%����~Z%R���>r+��6��]�i	U%�Nsɴ��y�0���r\����"��
+7�Z��yEf�Hh�K(�L�P��۽׿2�^R�~�RNZ�:x0�&�B6�~j�M"��Ou,�'\w;�}R@��=\I=3�Tؙ����,��_��=�We�����
KԮU�V���vJ\��^n;*$mb����st��.B�=E�H
p��������
+�Ug�(��}Eq�
+���E�".˽N�#w�: P��[_��n�i�Z���c�vo4���8G0c?h;�?�F��%�Zy��S�n�~B�ڪ{�������3��[���_��{vԅ;�+iw�`�|]��=�� �������������#��#uxY����}b�"5^�x�l}ìm��V�����ָ%�9D��_}��,�b���P3�I�W@r>]
+�8�b�6sW�Տn��
+��	�f�OQVK�9�"p��Ϳ�֦�=������=!�:Ā���*�O�w��4�Tgu������H�+1�WvbȐ�ٮ�'�T
+/�Z'eI�{eG0�p���vA 5��t	ɉ��h�'��Hͳ�+}�w(2` )_���v����ђ�>QPP\0zr+�����
+%������b��.�<�i�!����;\znv��}��D�WCo"D��pU���N1
+�s��DK����Os����&�NJ�!J�&U�Rc?�9`��3�᠊�A�����Y����/�U�Y���6y��"{6��}J�uk��
+�f��N����P����L��A�U��#b�*(�?��� ��4�9�V��L����F���v:DU��:ߨ1.d�R�E��h�O���޳�wv
�}�V��� [$��f����o�����+���qi6V��'4�6���Y�ɰ���jB_X&a71��̋���}v���K�fv�HG@t�:��Y	E���I*����$���[���a�ٓ}:�C6�&���0&@z�b���S�$�r:}Ӛ������B��6��<�QA�.�'y�6���D��6vbn<��F&k-�\?��SS���V%��j��f�dO��;"-��dQ��<$�x�_�6������Z0'��Q�s�c���U@����(��P����2�kGV-1S �t���y@�~)��{�njw~�q���-�5�ɦi�uc�>���>x;�G4��b�=�����Ć��
��,\ڒ�Yԁ%inh�p�"W�P2���2jc0�D_���9a�a_��S^�k�����]�P@��G����w�]B���"WɎ�j������%�A��E(-J��y���)'�{��<���}�����k���$F76�D�������k�-
��M��O���?)��ҙى(�H�S_��"��n=s���
��<����[��4�sY�Z�_����{=�\ZP����Nj[��JPB���s��{����w�͌��1v|�p�(���q�8q>��\\2��S,�$ ��~��p���_W��?���������tӡuݚ�C�fO�L|��b�	i]}ѓ��763A���$ �œoA,r"o'6U�A�=
+U�Ȑ���b���F�fa�0����F���V��w<0��������q
���Z��Ś��0Pr��-�F�"�s� �x�b�l�1��m����[�0Iՙ���v�[���r��y$�'q�V2�4q����]�=������ԡ"� iY�8X�6Q��/.Ua�!ɷ*k觯Z=JI��à��oLr�Q�0ibΡ�y!ӇWF��|��T��&���+p������n��H����"&�ћ	�뢈h��W�M=hI���SD��6�n
+a).:�������>B3b4n���c�ck�+�_��86��.@8����2m�k�!�6;B��G�|��I$ej2<�;&�8i>��q+tP�t�{=<�6b���<��� S���כ�N���	�«@�ǦG!=��f��v���=9�#�Hl��E>���/%���%5BQ��,5p4���E��4����(�[�����uxj���;
/�Eq�jε3=����hS����o!͂��s�=g��7;>�Dc U��w�2�Ϩ� v��t��V��,<�i�S�,ד�_n���pB�Yj��n�(e��t�JxHx�:[�f�KR����	'���PY*�8�2��$�UI�r�J5���D����E%����La�궈�����`���*�8�$��6�߱p�3p�־�������ݘ�Ȱ�����m�r@�w�T)�7�Q���+ƽM���T02����YD�I*����|$�i���	;�*ob�ؠ�&���S�)j]�9��S��U��?�	
-��2��T<e`%�,u)k~]��+/\~�i��'��C���?�QvH`0�w8�����%���2n
+�YT�R�sJݿ�;�,�Z1�Q^�	��,$������}qr�6�]�y:�,�-F?7Y	3����&�
+C�N,4�~�1�����N7�_�DvK��F�m�REPq�-e����}ީ�����#Z|)z����ky���߂I�^9��?�3I�JN2�I�3>�,0���k���;��1���r��Y�~d�>(5RHAm��z�5|B�e�6T����
��^=�/GYCǮs�N'��}��[l����+J")��5o�zB�P��S�;����-�?g�r�W:���Ћ����V �}�|�[�Վ�/��׹h��4*)0P+�|�f�j��u����ҝ�q`�՗IaoР�f��U EoUl�pk��@�p�TP�-G�`U%�i,�bG����/;�5^��_���~���gw�zо�����x�"EjS̿F�6����	0D=�{D�����啼JU�vF����W��ܧ*W��
+�\�[ɤde�%j��IJ:�;Ĵ��#r�V}^!6�pN[�ӚQ]��2�� ��v�ܿj����~X���ƶyd�
+Ӏ�1�4���1�)W�a�9@9�s�Wwe�kY��9C����_�F�7�p��D٠Bv?J��U�pB���>��pr��[���;O�?��'-�ްR�g����a�7>fs�O�
+	X|Hnb�^�6ҾB"�! ��*�Y��{�}a�~�)�R:��p&\P��|FF�8զ洞z��..��#^��KϽ��$P-��!˦�!x�M���/I�~D��	���e�h+�_�B���D���[�.��v	��C��hd݅0���Y05�6���+�����4��
=��\��pё��+u/�~�/�%U��"31g,0#�g�B(1n���eנ5�zO�>���w@�C�jd`���̤��R��M�j&<%���.-�h�����_B�'�+�>��͚��vG{�	CEϊ`�Ɵ��]G���t��׈?6�_�}�p0�)�aT�"��3�����)0 V'��(ޕ�P|����w��T
+,�$z�5Kg�R��(Y�I
jo<V�Rv���;m�yZҸJx�:���/"��op���Zm�ql)�M���uZ�B*����|p9h�i��O�s8�BR�+qxU�G��'���>Rאg�l�'��5{�.�~�����DQ�[�h�2�iD`�
d�t�WQʝN�-OK��OɎ�b�v9j\wн���}���5�Q[
+�R���z�����aRVĽ�+ӱg�.}nW)P�N�{U����+�6n}�9zHǽ��W~޷Nc��(Z-��1�Tl�K��6’������,U닶�(����P�N�>Bq/�x*_yN��W
+TVYX�8��-��-Q�E���}�FZ]h0�'���=��;�_��`���w�����*Y�#�f�7�m�~��s���ق�X���K�X/����UYy��`0y���]��rN�x����
'X�h�]J]�O[����x��9S��8��Z(
�<��ك-�N$��3B�97c���r�E�1�5��T�ϥ�����	��@'�L��6C��Ի(�;/��|���\_�H���J-��u����7Qt�+��00���_s�}�i#�)���U�^��;����ճ�USV{�W��l"����ω�s��7�w��D߆%��f�<�a��Q�����KG"�(��d�>�7�0�n9���:|?mf#�j���[eY\��䠜aԍ��͂��%����E�O*��b`�x�Q��P�|�>��H��d���~ë�sKxl�6��X��P��Z<d�U�K������KI���	������-"��}���=��_D�kp���Po���b!&��@W(�-����tŏ����@���Z#��U�j?Mr����7W}����Rd߃�G���6�- D_~h]dλ�R�	hu{��{)��s\�hb6!��Ex�`yF��a�
��$�Ū������{<�{D9�\ֺΟq�&��
�bsW���E"t�/��A��n��^��%� ����nd/��[�D�3����d���h�IY��F�=>��.R#P~�9�#��;ꭾ�|��K*R�X6������f��F�/��)� �n�������/�se�b%UW��um�լ��T��#ݑָ{!~�$l�$��Ř/�l��S��?���	o&�)'��;*�6�JNh��}�P�Y�����ڍ ��q��Ƕ����Nș�JXq�7yz�c�����i��>,<�<@1�t�u���H��6�Gf��?ǀQ����C]J���
��;]%'�*tȃ�Ob�]��;�5�h��B�����8�mѹ�W�i��_
+��?�3D�OQ��O+���`��p:��^�	;�IJ��%��:B.�p��Z޾�7���,���D���5����Ѽ�[��1�*.'4P��
x��7Hz\���O�j���]eg���8�_��>,R���L���sO}�����;n�;�HTR����Q\�	�!�F�#��H��E"��F�.��6���9*�N�׮׼��2D���_G^d�C���<ɦvb�>
+>[�Q(N���4�{�ҥRl�ȫ�a
s������~R�s%3�B��S��^�*��*¬d-��2}���%��j>ɛ�'ow����b�*d�U�'k_`��i�1��W�C�������}@��~y���X�4���"��3�:�r3t�v�K�#Ν��q�'E�{���f��cnf7EZ�7�a8f�.,SVbͫܒa�}�H��	���3�x4w1��MC�p5�����ڶ��M4��n�nŖ��Y��G
X�d�]|�@gK�O�+ع�4��:�plά�Ĩ�ø��=��s�cV�j�ƥjJ�u�`���
�s����k	̕�x(���!���Q�x����"{'/�m��Q��̴`'ǹ�
+ �E�S������!��@95�X��F��5�,O��u�Fx�@W�����*Q�Љ[���1���ٹv�g/���`��d7Q�T"G-m�KA�rV��IE��rd�]G�y��jD8�RG�H�#J���gg�z��'�-���L�	���q��<4�l�۱S�Zg���q���\B�ӣ���>��k���Q��	]�%?A�"N�R/,��7�1ځ���}�s�� `t���E�čpK�ـ�TL�L�!N߯��g�j��!�8B�9�޻��˜E��1�������髼�0[�9EPe�ݳ��D��&�}1nщdK���qX�`r�a:�\�R
��:v!%�襉�-C�0k����;���RS���h���g�J�E��	�����AT�D���٫�e�w�N{���-�4KQ���uv6�rfKx�.�"�U
+?H�*s���4H�<7��-��4�i/q���Z�<�f����Y���J�9��N%d8P�:����g��$��9؇t��Ւg������f*.ˆ����p��M�O���ۋ#C�odS���ꐿr��4����!2z5�F�����
+2��w�������:s��pu�{R�'	�����Ze�),
��o�R��?���zQ��X�顄-~o��}:�>30Q/�w���eg�Ɇ�t ۾������u#9�dES�~'�������q���kpi?�ס�.����η��lz�X\�ZRp�&Bk���լ���[�-�j��7����Xyj���W��t�U�	�"�H>p��G�<P����s+��$���Ax�
+�\N����wV��ꩌu�<��"4�d�m�(+R�/w�$��EK�̬?�X�؂�g�]�!���[:�
+��K����j���I�[1���
+q�n��P�K�>[���d�M9X�]gO�+�DV�_�͛d�9�*i��u���W�n�Ǣ�]�}�8H��r%������ɑ�3�cº;L�yn���a<��^R�a?'��Z*T0�cks�|�l=�W��n�y����Z���z�����d�V���j��kd��~���:"n�|����@)�T�̮��ֳ�����` Χ�3�7b�����)�s����.z� �B&9.}'0��B!|5�ߥ�nwO�7��#�3h�^q�`���vn�/��$M4	�tA�s	,�D��:هd7��1)��Ţ.�y	N��g}���$b:��Y�U���č��?��9P,���)�]�;
��O�@�������)Ff|�gOc:��r�x��y�C�	�=�3ʨ=�Ha��>K����Y0.AWC��R�sC�	i�¬F�
+I��T�#�j�m��	;۷��r&�S�á�T�*�^�48X:�
 �S�<��/ud��c�>J�С'�*�Q�ݵ�_�-2p8��c�ީ��#����Y��b��rzJ��*6_��JB�}2���6,�ff���V����j§W���1p�G���F���)n�_,N��w���|�Ptk��Oƚry���"�".q>[�%�uo���g]ȟ���1 /W���؎��Ewn��Vڲ�D���Z,�̵��O �iuz�P������Y�+]�]�b�d͝��5����/E[�e�]�tUb!b�ۥ>�����ɒ}

F�z�V�@�lᢰ�ē����������%�Pk6c)'G��͔L3*�Q��Jf��@#�);#�Q谄���Z���8����S��n�m�K�{Z�p�
�B�)j����Q?g\[��Lo���f��d�Eʮ���c��&������$:o��a ��yD)�7��\���?6g��G�7���Q���k�8����B��Wr����^����<Pq<�oL)����E�I�	�h���Wk�H�����p��6�e�,GJ�"%p���zT�ߺ�e�u{+��s�dt�P6@���U܃i�i�S��P5j�l��vrx{�(/�D� ›h�.�:wb��]�C������Bחm�z�t܅� ��bz>
��
+2�Gqn�)q��-�N�T�N|c�Q7�-=q��&
c�v��]kX���J���3CN&�#����d?dI��VIͭW�X�ՠ��q�A���z�<`�Ke���������^�<�>�!<�62��N��n��!�[�5��Ȓ��׷���l�&e�z#͊k!������ٓ��&U�JP�kG��aȏ�M_M��Tc�\N'�n�S�)Q�A�{��t�ޢ,�Wʕ��<�c���{mc�q�Ʉ��oy
�X"�k��2חR��*UN�2���&9)����9���uj}��̌7+�}��!�oC��7�s)��fK:u8C�Z��W�Wת�G���'�觗�U�]+�*�&����v"���Ϋ�����;ol��L�נ����n>�r�����<*����졯8�{� �q�����p����z����U� <������\�J�R�m�2������S�����c�Қ|�95X���*/��2W0+���}�%gL0Gx���¸�����;)��[�d;�TF*��l�6�6�;܎I3�O�5î��S{�$���:��J�[���9�m۶m۶m۶mkb�v&���sw��ݫj5;S����3�G�E�W]���F����Se|��������s8�w��rj��SӖ.侍����jc`?���;�(�s��)Bh=��_$�ʠ8^zu��J�g��$s_h
��:XἯ`���������p/���/�>0�+�
��w^�X��Z̗���o��H�.:�^]]è��M�C�i) #c�'0��8���'͑]�����/�S�;����ӧp�w��n?Z�q~�7���,�LnGH7	��T��(�����tXb%��F1Ÿ�Ќ@�����-mo�^CQeb�3@�͖�
+P�W��{��ie��S�!�Ph��7��o��ȪU
+�ma��:���ey���e�O6���
�	A"���K������#y��1z�Σ6\@P֡��
+x��܉�I�4d�gٟb�������E7P��ѷ�>��j�k�q��+zL|��>����g��2(��+��m,q����C�+&y�7+9��K�߉f�{$f���5�����쐛��S^0��,h
����sR�B�-W�n�����;����lĬ^Xx=���|q>C���|���3��r�ھ�ڇ4�(��e�Z�R/?���&�����F��d��m6o|5g�>��#�U���l��?E��WO�"px������ߨQ��^3���>�츈�Ja��i&�f�����}����ϱgT�.|�D3zҢ��!.	Z���n�j�V��0����rq��\�K����.?>�Lr�N����z.����lD���1	}�E0�b��)�k��apH�o�7�Q�E3L��f5c��F�݌]�2o)����=j�o�r����~N#�^�����l��EFؗ�eHӷ�hڬhO9��6܀S�T+���M��k�~�,������_�>7/3�GH��ith���f�*&}��i��e?qX�B��[K���Ag�gẹ1��l��+�����b2����qR�3�>W1I8��3�a^�	X�R��ѿ:y
w!��X�m}�4ӑD׉�ʼ/�͜��E$�@�:�S#��9}�<����1)�ⷹmG?�B�,���Vw�5�&g;�4LꕢgD.�@��n�n�1$$]Ѡ>��	�B���v7EJ������ȼ4d���7�ؾ�f*�q�%`h����ݴ�(:���
V�i$j�4��񈴓׫hq�$vt3�Q�7j	�	�,�S�'��H$���M�s���4�ڥ�BrP�E�}�r�1c$��ܢ���*��AsT|3�3��cңaqZ4
��G��W��D�ɪ���"������B*���ƾ\M�R�dy��q^�2/�Љ��^Fpy��5>=�u�l#J��ɲ�)Oy*�3W����V�GqQM�<�[������y��88{��� �+M�璃g�rq�z���˛2�qDg�7�La�bz�7�r��K6i�ع��
m8�<6�[�S��8�Z澒���+��/fޟ7��Ҭ�.�!��( n��&���"����S�8����0O:
[�؏�������ixM�w�`� �P3,v�ŀ�j�[~�V�K�� =���7
+��zJRLI�z��l����yVVx��<�Bu���TS��Y���C�����,	}�TK�ls㜅0���֪Ʃ2��I�m�g"{v��R9W�T��l�у�ť�b����/����T�MJ֢�s��?�
����Kb�;0?z`�{�d���f�(a�Sm쎖A�kO�{���4NՅ{BO��]Abf(�h���uf���k�;�Nd�R�C��RAD��k�������ds��e��<�m0��ž�i,�"��5
/�|���q��ԛ��v!I<�~h��4�2onc��u�'�����*ʏ�ks.
+K�\��4�S�n���烼�Y���Lj�s���
r�v	����+��T� �Z��N泚!�ffˈ�"�̑DZ閣���\�f5��Q�g�q��*5�$�ַ���%V{gl	H#!��]��Ѷ�I�"@ٗc�,�.��h\m��:]	%��},{�${��[T�1�s�>Cb?���v��UJh�A�H3���G���V�u/ϴ\q����_,J�L�2��}��-����[�?�m��l�u��;�f��z���ʖ���n���\�3���nxm�j��
+8H|���Ϗ�y�9�֊q���RA6���g�eY\�e�eL�	��6���$UR(�J���@�3ĕ�G:#�}N�8���ӝ��N� �*q_����r�h�	�0�P
+p\� Y�.ɑ�l�X]�R��*�P�
	�z�†Rm��[09-o�_Y�����b D��/����,�v΃� �fX����}��G[W_�F,���]'4Uhi��b�ӄ��]/�E�TC4N�a�?�z�9 Qֵ�b��!#����"c���\�NF0JȹAh�mZ��A�[b��q��sh:�;�r[����x�ٮ*���#3���<��^����
+��?Y��^*�F<4�)t���R�Vǿ�Ml�L8��r4�=��;ܽ���g��0��K�"z
+�P.�l���IW>O��7ط���~���Qs��4��F�̠��K��k�Y���[�Ű�dUp�zH�=h�$֜�{߫ԃ\�G�PE���ܓ�m�H�Ŝ�f�K�y�*�G��t`�*���I�I�k�z��4�I�?]��H9�a�{b�e�	؟��et�:TP��uP�j�`Q�T�zL������t���L�����Vխ�����k�u�"�dگ���ks`�6���C���({e����FWj}c
+���q�s]bp�'QV�b�av��i�"�_ɞ����"��.M!���!S%W%����O������vԯ)��(c�kY^넟�P1����l+w�~W�RQ���7[����S`>>L��p�_k�3X_�����6���z�/`��9����9.��ӳP��O"���z���pn���s�*���EP8եdw�o���iO�fl�0�@J4��J�33�n�+�,�V��-<&�)�nu�Qg�f�����E��kR�?y���6���6H�Q��lM��F† d8�
+w�\!�S݃��}���х�?Z����c�C��+c;.�E��C����%�X��?�)�ݘcjl�����D ���/�(f�O^;����S�x
+~��9����Z|���Ox��B�U�2	�sx÷��s(� ��Θ��{!�ۉb��W�yT�'�Y�2S�s
	�P
+zσ��q��ҋ/tZ�L�p{��u�+y��r_5w/���"""W$�)�x�=�4��_��6����W5�4�W��J�!��E�L+Z�}�UEH)������7$�������x\(]�N-��6��.=Bê3�)g������-���?ȳBjj8��&�����~��0�2� ��A?#̒�5*?1�"�M��|�y?v�-g�%P�2x�������U{���R��	w\������\e��Y,��䐿F� �%B<\3���X;{�$�4v{���l4/~��J�VM:�e8o��j�Z�ә��a��b�����GqS�@�4����#�n�q��\L�ˌ����M�>3����ω=A?b����j�xt{&\�0������7�&گ)i����`<?����:��f?�ʁ{�ͪo���ҕ�._���\�m��=�ѭ|,���1[q�̶�8��b7^�y#JimZ�H�4aA��K�Uc�y��j[Y�d穂邩�#8 �ۂ�����M:@눝���FCb����.���_'&`2V-o"c�(�c���0Ɩ.}�!�	&#NCt~���
�	o<$�׭���s�6�C� �/�<�k����HT�۝��%v�˂��R	�+�F�ԋ���ԘԾ��b{��,��L6�HZ�o3:4�~�N6pڝ�P&��[.��`�c�k��<�\�Q�C�|��&�䠊����|�9T<��f9P9$�@��H���3�� ���gdOE*��"'�&���zG~j�^ 2�5���O&Ȕ�+�J�!MrsN�5����z=v-[�jiQ�s��2h�nJ��[�r�	�\���v6
�BUzp���:��\I��X�*3���Zb),pY�ɜ���Q�rh#�T�R��@��ֳ��6�a9(L�N��i��[���rN���%���[&��ﲖ2�G�Ke���F/x]��T_�-R-��a��n�9��\������E����<��ٹ��?)��aҟ���B%���v�yx[�Y��][,��In������]q��ό���[L���O>�i�C����	��e���P��X�k����'�4ܯ�M�j^,����d@�^>k�ʆ�/�N� +q�������'�}���98<z��5��w�J��$Ev�l� #�y�Q(B.����L�\+�[����il���+EaDJ9����8�U�g4GW�n����m�v�ר�
+߁��zSu�P(cW�� ���#�}MA��&)�2�̇��;;2n�5
ފx��ΛjQ
+>G9v��v�_x4�H+�~����5W�Kt��Fu�Ÿ�W)�d9���CQ� Ҩ�9�?��D�:P��UB�����a�)ua���V:���� (�,��;sgE�pq-.8]���߰��[��Q��z7��'Q���Mm��=UB��E��gR����7B��HC���M�49�d�ڝ�8���H�����*��.Jp��t�
:w�)B5�Y�o��|P1�b��|��3NG�u���f�)�O�+-�7f`.9�����Sz�t���ߠ��u�w�}��cN��0��0�й��q`Kܺ�v�!TC���
+�qv�^ғ],������&�4V<Bi�I�a�,:M�8\^7k	�%�g"6�.J	�?�D7�ݾc���aTd����%?�{��j9�`�~gt���߷�#����I׳b̍�}��pBTջz�a��ܛ>OC��Y��G��Jm��R��
�dM0c~wEN�x�B�G�3�o��H�*�*���L>k<��u���<���|�Eb\��c�a���öҩ��Ms�������zE���S�!դ�����16*}��ׇd�cT��Q�vG舍:�d�WW=�f�ҋ���`�F�O��|�;��-��A�}�4;��q�)<`�����XBT/�lF���Ey���>U��϶4뒾�/���}%�"|	m�<2rN��M�yi) _�L�6����A�ff
T���O�?��N���Y��g����n��Y�J'2잫eҡ��0гN?{Վ��:����G�����o�0����n�he3���������<�U��� a�s�c���+���
+���
�(��G�zk]/B�����>�IF;�C�B��+pdP���
�] m�MN6E���ǃpʋ!�bk�G'��/Ο�ZW�
�6��o�WҦ�٨����%�ּA�
+����g
+~�����E��W�r���k-������l'f�������t���rR�Q�?���C
^�G(��*����QK���EV��ke/GL�l=�ė�<n�_D �����h�����O���}^	��Ku��rY��&���3ƻے3�ѭof}��ј�
_-�����E�K^|t�/��G�:w
+k�g#�غ_�1�^���k���ҕ�����?Fl�f�O�I�?'���k�<WHt&P~e����0w}���`D�����?i9,�{�l������{��	�������-�L���g��mrzH�����]L��&M�"��"�U��L$|S��:��:�CA�)����[���\"�	'
+s���[7(ȡ�ꔁؕ�_&U+ٌc��_�d��i0����LI��jH�B	-��ŏ�HQq�*#����`QW<�)vr�?��D�2
�$]���s�:R�ֻ�K*����r�����(ѵ�Ϗ�g�q›!ĵ�w
�� ���G�Em��0U�ʿTIL<{%MGѕ��6�4�YѬ��+�V�QLF&�s�oR�?��T-h�%�%��5��R3S>�C͋��)���|(S5��Y�MM���3W���cnV�Z$��)/�3��N0w��5���Oί�)U	n�L�����V�t�R�ꖾ��N��QRoz�ſF�7»�� �{=��-6�?9x����L�7/9:Ӹ�1KO40���oj���T���D(�h����)��n��<�.�f�Q��5��竈*���=gFN$O#���wm-fT��㩞⧹�QJ���C널�Zy���'�\�Jᴊ:��u�B��f��~� �K����k'z�&�YA!*K^/<1-�����v�i�Q���iiy�g�r���>$�̋������G��ybLP:�{�9ލT���X�AV��Q����5L��7���x����;��7�~�(钂"bvF ��~R�4��]Bؒ�6_vÞK�}7VU�4{Q�V�6��)�!~KtGh�K^����߶A�o���T �9��`�%�o�pLt�
�_Qy��C�p?5qoӰ�_������C)���mkb��������F=p�CܦX&�s��a��^� T�	C�:;�@�e�^u�tX��>3�S7��1��s�;�"�G�4��1G�\�4>����}�(���]��X�sw��lo)~�n*� 8����N~NDR�)��l-�����X�"����@�	�%Ʃ�o���:P�uz��&��w<O�����?,�'�˭����3�أVrɌ�_¾a�*M��q��I��jN�����E?m֢����Kh�Ʌ���M�•6�3��+��Z��I�$Sd�
+�Z�\*Q۾� ?\~�@��B� ��ⶲ�tw���mE�[�"�s��Bc�ʎE�.~��s7�:G�}���w�o��
+�x,O�A��]��K H�Q�������Ͳ��e������o�*dc�Cċ|�.�^�7R��n��O�]Tob÷.���܊�
+ԮX����`�	��PW���I���cc��@@t��w*��xtJNZ�A
+c��;[�u;:rc��M��g����HP{�Y�����M�;���'|?�ԅ
+~+�&_
ɔ��TG�r�w�V��%�]	7���7d���IVbt�z�޼�K,���߳�^�h��oR�����������p~S���A��Ѧ�DF���Cf�����ъ2���7DGCm�&��d��{���{��H}�ӝ����E�i�/M�,��g���;������O$�0�>q$������K� ^_�q�(5۽Gkeas�EE�>S*azF�Gb��q�<����⺿������7�P�觪�lkr6�x�j��!�c1�6��-�T+�M%y�
8�,���9k������AMm$�)�RH�J12���j�-w��P��M�RB��^�~�M`2�./�h��Q�����Z�/��[��g�7���bŝ�%����h��@�\���/&n�X���?��J�AN}�4�=�i`b1�0�u蹙��[
#ނ�Q�1[��nݕ�4m��뙱0������<�..���d��cvf���=�%'S9����{�ǎ�!�4W9�����ΘZUs~6g�������y�Z-���$�}��s��)�98w,�$�ᦗ�e���.�;l�#�f�^�.JʤN����
+w�n�a	Ɖ��s:������=K	�c=�@LN�"2��`|�ϘN{<q�5�d�W^�"G�s�//�]^�]�n�EÔ��e�-J�$���$R]������9Y��uv"-�=� ^����3�ɞ����Y}��e	���I�r&�`]���w�;�&����`��Y�{
+�T�th��<l��^� ܵz<2�J����T�"��eȪ��h�����Ҭ�y%��
+�E�~���2r��.�t6�PY���`�O�<s����k�V��Ź����{�Ipʹ���*�e���pXr��қ����-q�SF��f���qo��v��!�;w��Gk��)��]i~��A�QQ�R㇨c�jHrU��,J��B��0�W^c'5�%����"��!�.�4#
+�F?�"���7.�Ù�@C;?"t�?t�8�r,5������ӆ�}�����O�2�p���1�j@:t�/�= �8�%�~��B8��&$� �i��)I���� ~3�x:ˣq���xX}*W�8�YҀ�<h���Ѵ�ad�Y����ޮz�/�|������M�u�P'���eܨ�+�JĽI��
+�'�/1g����e~�h:�&�X��k �o\b�Λ
+T�([��j%��݉(�\��_N����>�:��}Ɏ�.�۪�=�a��WGЮ��ȧ�<I�+��3I��gh���y��]����cY�Ḵ���Vw兺�_S;ڛ��%��I�l�7ʯF&b�ž��m�EK��d�=Ő���L{�D1�Y��&��8��6rl\A�*����xEҀ���1b/��
�n6�J9`���ł,r,�Z�� �5���� k�."4�'���}��V#z���a���������G���@�����!����>�L|gy�<!��Yd�����hD���r7�o4G?v�>�Ce�Y��:�ʞ����a%��{�S(�%�+57�����Tl܅����a(��y��=fv�,�0�B�Tv��3�PZ>�'S��t�r��d����wܗ�GW�yZ�N%����ޥ
+}=m�$T#b�zRz�j����Au�n��{�İΔu�3�]�eE�'g�D!)�R�J�cY$;M�������
p�r��Ȍ���HY��Y�Q��Y�N[o�S� <k��9y������]��'�B�nqV!**��}�9ڗ=�>;U9�[���JA��5�?T��T3��o#/�K=�
+�T�8�$�d�N�B_����V)
�W^G�t��c�)�dtl���0�q�Z>�ꍆ�����"Ț5d���m
������W�(oy9"��ֲ��h�}՝�����S����A"���K2ϕșZ`@�X&b�zbJ�C.�fSi�_r��53�y���j�T[��=�
��
�VY��y�ѯ4_�X;R���`U����Y�����5���z��s~��W���{��|�Y����e����e{ �����W<0�Ǔ���[Eq��@�1�m}���<��/�׊�:"*�$�V��n�A��j�hq�@g��R�F�����w�ؑ(���#1�
+�����i�XF��M�$zR:_�z���!�cy���B@֯&Uqc,C�&��c+���A�ˮ���_��7����O�a� KL~���R{M�aMQG�<����1B�^\��5V��g�u4c�pxt�p�
�Æ��"9�>v�Å����H�0ɾX��}���{��pQ���l����::E��/'��ϸ%�Ax"�z�@I5!Iq�,�譧�S����c��Z�|2����E��cs	�L�Hk��ߧ<9�v�\��&��DS4O
��@/���}��?�S�&��a��4����K�ŕ�%%��i22?��{�i��"�jdžݩ5L���p�.��?���c'�4}kY\��+$�5��$�H�{,��U��5�+�I�$�/���R���v�ﵡd=9������"��}>�=a��փG��T�����
+e��&��\R]G�O�C?�`��Ըٽl�G\y@\��Q9�!/|���ڝ_d/	NIS�0���'���a����W.+^8���sQhۅxq����i[�U7�*h�����L^�a�7��s�D��ඞ��{:\(����$h�� �z�>v�/�;_Ϧa����,�F$4��!di{k
�hA�I
+IF�
���P%Re��=`����r��M�7�g2�

��5;Mevd[�`&�e�<�9�KM-|Q��Ž��g\���įnE�'n���f�:b���>s�d{_���@�\'a���q�}�����DN�g���5����eg]�J�0�KP��C���#�A����%����n��t(�ʧr�D4�ťj
+��Lӏ�
+$ڑ�-G�S��Xacc{@v�͆�*�+�u�p�V2 �C�L˚��,��|�#���Tq)�=J�Գ�ƃ�4Լi*e����[*�*2Y=B�3��G��R�C+<(���#e'k6�4�DC������t�|�k���$07N'�u:$̐�dR��6�j]���R�����ɒ��,���<�<<�ck�ʔ��ŎD,��������l��/B��b��"#!���R���j:�[X౨N� �
+_,A�l�B�����3t�+mi���h��.b�9'�2�ȟ\5\H%�b5&Pt��F�h52
������=���E�8p�q1��`pQ��k[�r�i����8�9�g�OT$C��LYvP/��H��uĀ���ht�t�N�������G�aͦ�N�Am�fkm��p�{�9�]U�q��3x��:�P��� `}7�<q����S�u�L��B�p�w+����Q��QŽ�Na��|��(�f5���m��'�1��>���UlDJ7:Ni���B@�9\�lS0�)������K�����qWh����a2۲gH�a#G�Ƈ�XO�`*qC9�;Ǔ�����
+%�a�9���\U?��n}�F\�����_��.�(�s(�E_�Bc%4I����g�$�x)�.�s)�����q.3���U(�^������6�+�C�m4�-D�p%���-j�|��s�p�I8>q�]�ѓ$F\N��
+�W������\�i��t}WmO�<�2S>K�Cyq-oHQ�avQ6�
+[���C�z_^����\���E�g�$��B$�\��|�C���k��;�|̤
+���gYc����Z�������|p	�Z���c����r�2ł�M��?�-Yo���ѯUu����.Q��g�����+��sFt�ԝ�� �3��N7�p)���eb�<J~<�<q���]��

�?��'����̴��/�#��p(�(�GRt˽�����{)i��m
+������ض�]t�O���#�������[z=����:@���)�JK����~Y�6C	3H/�z,�Z�R|��̊�1d��4�x�;\SV�8���_��N��LV��R��N�ݼ.�l���d��������C��z�;K1���P�U0��K�\�{����;��m�q�`��I�BJ���m�[\�_��rA�IM
�=�T�ݙ�}$*�pj��@1-~>4FO;Lv:��'�%/�~_C��K����>䎋�M`�S��ᮥ��H���!fx�8�
+�_f�)�������=��X�L�H���[]9J�Ѿ�/1ԉ�
'�vʋA(� ��ɘ,���:�8��t��ᖃ׷�T�m���{!��EE�f�5t�\�͝�����NHx��z>Lo�e1���E��d������[�F/|��ۧ~�H�[\^&��)�	��Z�X[���Դl��+�ȓ�៌������:�=�����qЛ�GĪL�B"�S6:}���׻����'��ҧ���?������xV��̏wM��_�T.�zc(�Y�{��:Ȁ{&"'���V_�e��ύ�7��r86^��nb���S�A��{9��X�w��.���Zv��A��۹�×�&�F�W���7-�1#�[Ǐ-�04����R���Ŏn��
+�H�]��ez��W���lt8E��S�����G_2	�-�	��ә��i>�"8�	ٔ9��$s��ބ����z��
+ct��t�@O/�9���_���ˌ�PF�_ɯ���ş.ه1+� �H�CMޱ�EKF���_}l U6"f��ɳ-��L��1�,����Yj,F���ڻL{!�3>�(��O:I��*g�R�d�ߖ���^c�\N�2`H�t1L<q�A�t�'ɂۥ���V�n#z�ں����-�'�����
+endstream
+endobj
+1564 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GYDQSB+BoschOfficeSans-Italic
+/Flags 4
+/FontBBox [-176 -300 1375 1139]
+/Ascent 766
+/CapHeight 728
+/Descent -198
+/ItalicAngle -11
+/StemV 93
+/XHeight 523
+/CharSet (/A/B/C/E/H/I/M/O/P/S/T/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/ff/fi/five/g/h/hyphen/i/j/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/slash/t/three/u/underscore/v/w/x/y/z/zero)
+/FontFile 1563 0 R
+>>
+endobj
+1565 0 obj
+<<
+/Length1 1199
+/Length2 806
+/Length3 0
+/Length 1564      
+/Filter /FlateDecode
+>>
+stream
+xڕT{TMY�0�+�dH�ͪd��=���e<���T�(�{ξ��sϹ���5ɔA&�u���(Y�L2c��1�i����`E�<fߛX����c����{������?X��:�xD*�H0��	�v�s�XL�*|�8	P""� %A�y���C0�y���X�A���D��x5R�x@��X�(�3�@:B�H��j�*��h$�QAF"�!��j��| �}0|�g1$�Pf�#1P��-B��8
+A\$&e6�R
��Ȑ�Ȑp�"HR��SC�8� �W�	�!��a<J4H� H���F8�x���F�#IF����蠁�eJ�,N� ���1�ڠ�*��$8�M ���rq��Kk' �؋����H�h��>!r�A�
�
���쀁z�2^@�' �����М�ay�$+a��`�,XY���$��$�H�1� l��(^!��)àl�=M����)c+��l��.�����YC:�S���Qb{8QKG�BA��V��4�
2Z��@Oq�J�}�S��V�Xא퀤t���$�E ��v�`�\u(Sb�S��W��R,���&�:�BLa\+�>�˄|�L!���Y�BHlH�w���Vc�
+6��S� �	�D��Y�H��i�5'*u(�����M�V�L8_�
@G���]�Ɍ�����s���`��VJd���?�i�(���z!X�����}��i��j��x^�:�o�o��*W�>ڀ������S��|t�!��3��M�2S7&�����W'G-�^�9]7|��g
'��{�ҭ~��sb��>ג�tu<{c�2;�Ybַ8��Rɺr�A^���|Sy�cqrJJ̙��W.v3}z7�A۲;biuݞm�5~!Y��z|ֳ��u�&�,�~,����{�����mm��I�$�O2�I4�g�i�hͲ��£�O����ބ��c�fpsƝ=�a�����E����7Fn�iS���$tU*�Y'.���#���̽�b���������n�ŦI'�u.����6{#||aWUNo�ǑK.�"��Sbbmv/\��$n�������E������j=+�:��TEB�ܢf^U�е"�U2��Ɋ]�F6���VR;���Ƨ�׳����8������n>�K�ј�o�/6�(S��H�ڶNk�-�"�o4/�Q�lp�W5l�^R{;��������c�S	�--/N:�����"��֏������˓�]Ą+#��.��x�޸q�;<{y��-�����d���|E>y(N�u������6�N��yRn�շ����q�G���}90�������k�Wzg��h�_b-��ϞB����+�D�G��j����_��E_4���#u�Ɣ7�Qu.[r,P�(��lQ�f��;]s�-TU�9��:#��%~]N��W6{���T}V�2]��*��M���:��~������|�Gs�ٱw�\���{o��>�k�u��{.�
^>�Q��<���^��[����<�<�����הn"�����!k�'r�sr��m웨��<�Z%�x0
+endstream
+endobj
+1566 0 obj
+<<
+/Type /FontDescriptor
+/FontName /WJPRUX+MarVoSym
+/Flags 4
+/FontBBox [-572 -214 3014 925]
+/Ascent 733
+/CapHeight 733
+/Descent 0
+/ItalicAngle 0
+/StemV 16
+/XHeight 400
+/CharSet (/Forward)
+/FontFile 1565 0 R
+>>
+endobj
+1567 0 obj
+<<
+/Length1 2139
+/Length2 9316
+/Length3 0
+/Length 10476     
+/Filter /FlateDecode
+>>
+stream
+x�}uuT�k�6  ݝCJ�� �)ݒ2��0��ݒ�4"�R��!���ݩ��x��<�o�o=�<׮k�}FM�]�b
+��8@ف\��(�
+�pp�10H9�APk��4
+��9����\\\���a?j�03eW��o.n^����//7���
+0[Z;�q����`������:�W�vv����`����9���`�����٩��������?j�������@lmi0)�ͭ]��W���Y�I8Xځ\��]d�=��j�P3+�����X���lg��V��X�n	����?:-+k3[����?*�����J�U��SS��D�����7��������p�G�v0��6���W8%UUueY��_:3����%����rvy�q�0���a�{���b99 P������8���?�S��o��xD�N�G$��~DB�N����S��r���)��x��
+�Ʈ��`�J�Ʈ��`�*�Ʈ����="��#��k<"��#�pj="X.ڏƮ��`��]�$c�D0?�?���w��l�����r�@���.���0S�G31�ٺ؁\���a�&v�C�+��d�[@���G�����'*�o�-�/{!���������K�b;��T��[bo�X��[�i��Q�#�&��o��+��X��.��,�����[
q��	\0�Lj0��������cya���t�;�a�Y�a���ac���:�1?�d��k�Q��#���`�`�����\�M/�?R�zyL�+��Q
�p9��5Y^����+,ة�k��c������A�5�����€0��cXW�\!P���c7x��#�7%3�c"@Xя��`N.`{�/��6`�?���b��!����#�������3���k��,��㑇q����.f�?�
�������c���&���3,��������@�P-O���ߛ�/�kB�!�`]ks�՟&� ���0�����7�������K")	��f烽p�u��	rs������vf�����������`3��i����ʐ�_���C�˫-qz]o���3Y�VJO��Ɲ$M�KIR�f��Ʀ}�Y�~
{�g.%����t�K��g�]��[���!d�#)�����&��t�oC:x�˶r�Z\�������84����̖}�(=�Uh��!N,��A������B��ݝ�^�a�p�Qh��͏	.3�Nt���o���O�r_�����×h
+3g�!Ɍ�,'9%E��q�NΨ�"��E,MM�;�]*�r����gG�p�R �W&���]����΋k��:
+�r􄦌;�'P�Vx՞B�'�!��{�b��𯶿�T�1|��b�|����dH�t-���=�Ŵ]n�\cd֥�x"ת���:9�^3'�s(���ܭ$xMx>f�f��2�%�&q�H�������I`j �����\}\sP�e��Y�>�W�
+�;��2*���P�_7��м�g���٥�����*>x��������R%棹��tC��}��w�ǚ�����.�;w�wıYD[�?.S6Lky�w�K�I��Oa&����Aw�m��{��8�wX�t
{'�)^�G̎�|IbQ<+��H���k9��{u�����XŽ%�n��+���{�}�k��-�~�B���`�faQ`�e�\�M!��|��
��(Q��{��׻�I�J�NZ
+Q0D���e��7�[8��DNn��K]8)��h�ž.��
+���"��6�"���Mޟnv;h��}�������d�-k���O�(�WC@�J�����^}(HCx�l�LK�KîJ�P�2j5��eB���c^����d����=����m;ƀ'chZxh�����DFmG����8?ݟ�":Cr���e2""�%:��~����VB)�zm^��Jmz�G�:[��:��`��hs\���=PwC�8�b�:Q��H�_ ,A�1�����Wb�11x#q���f�cz:�j���R�njGW��ҩ���1�gQ>�\�Y�(cX���<X�4E�򽀬�6�ҭ^�C������/�CQ��	�s_t������:m"|��o�5Z@��R}�©�G2�38;D
��R��o7w��x��nv��r;��5\A\��,F�ĭ��로4G*~�3^�pl}�^��M�~��L�_��"������zϏ�Ϡ��(r��������ŝ�����[��K�|ۂQ�pn[L`�EC�������R	#m��x�W��_�b�虲�~��skH(\Ƹ�Ɯ�-�ПQ?�W���C�vk�즓$_p�8a�&��'0Sg{��H���̾��F��2k�Q,/Z��,�a��e�pAS>���W�V��0Y���4ؖ�j1_q�g��ݒ2�|�z�r^p�NiHU/��!@��o�==�|�^�6m�ֺ�+crofPB��R߃A�� a�O�u�:2�!��dX����;�7���� ����1��9��C/$w���8!Z��|�<���CՎoW��i��ߏ��Ǣ�Zȿ�|j
+�jo��g��CBސHD�b�אӼ�аe�����:"3����,�wg���=1s�A۾�]FO�=���I	!�*�Y�K�i<����wr�;<o!�ZF>����������j�ߍ�A�����[����m-���%�&�I�ˤw�3>)Ӵ�ldo=�>�M.����`8)�\��&-Ƥa�p�@��gr1��8
+a��g��@�q�
6S�jk�=�Ϣ�9�l��N;�	]������=F��������M��k��Ձ�$��IR2wA]�I�ώ��rrg������p�=���l����5)�N7uMg������gJ�)��تf�S�9Y5���nu�m�QR���R!��};�3�Φ�8��6�����6>b~j����I�Nd	�xrU�]N�0y3
+��(/�׸1<ɡ�^�3���G�,h�B�Ls�l8����h0�m������1������c�C%��'�B饝K#�4?�`si;Ȩ�����#R��G���6)Y8$%�S٬a@�1n���],��Cl�)\�jWtTkn=Lkp}|]�bV\�$j�w���V�.6��8�0,�t1���Z�e�纻�Ue��ȼ���xM���D����ns�dc��ޡ�Ʒy�}SR2�7"��!Q1�|���� o���Q�w?�TRE`�b�}*%Ok\@p�}���H5�=[���u�����٧/�f�N�IY��pB�9�.[����h�^��,�$5�/*$!~\=�W||dڢ�gN�P���7�Q��,Ay��_�!��o<J�V�� w�]�5=˜Si�7C?.�\��O�1�mO���ʛ.����(fSH�T�ZSޜ�	Q2���~�:Q�3��9�crj㺂��=S[ײͬ�ec�$�Չg�_�i\?<�~�����J���Mj�� {��D!Y����XZa�=���V�kP\J�t&��W�T���38��sKyȰI%�Wp����n�70�c t���&|�I�2=�����3�����Q�V-/2ha`��ryV�����B<|���u�n�5ݠ6ݷW�?+ե��O�ɸ����Im��d]q�c=��Y��r.J&\)b��r����zd�֪��S����,dy�aUQ�'&��BZ�Pށ5�Ԝ��Z�3Zݟ�"lS,^6�����~�69'����ɀ.�:�(�;�lF���jӹ��\8�c��#i�]ӊ����v�7M���:q
+:�G8��i�I�@�V�P�L�*����ן�>��0��G~8��U��!v��.{\F��N3��~�c'�b���V2#�+�>��:�K�g�(�%��ǩ�GGr�������s�����Ϋ��p��[	�-|��K:��%xВ��m�	����:6�	��1�s��t�k��:&�n� ��}߼�k�O������;���e���3���uϛ���Cwr����O��.:���(cۆ˝�
+��=]b4��ͤ����\?��h��9Li|�e��ě�>~�H��n�H��3����@�G�82vE퓉�"���hl�o��IVO�M�5u�m���h���̪��Hk_>���R`e\a匠����Z�����+@WpS���FNuFƈ�d`�Ή�߂t�2��,+��q1r��0���F��S���r�� U����A�t�ᵱ������i��wV
+�B�6N�7�Ve������U#f�ퟰ}g/���F�x)0����JI��Gx�z?2�\	'K��z�4Ή.�g��O�Rt���q���*���3����*t�H��,-Dv�$继�~ݴW�;�L��=Cj�5��6%i�u��s>�H�;������ו�Ϝ�r^J�Μ�Q�N�
+�
l���Vp˖��چ�	�����{=+��.��8�lds��07=��[���W�n3Vi(i����-"
+n������ү��m�Mo��X"]ۄf�27�%�GO\E��㷤jy��q��	��f�Pm��[2��˛gZZ�f*�2���O�[
+�O��7�ӯ|���9
+���
*ñ��;t�phj���#^S|U2��k$� 1�._1�s-j	�u<�1"v�%h��A�����F���O�^�dS�/rF�6hn�VIH���؉�����2?�p���g��^�Y,)h�V]����+{l��:��Dpa��>����X��l�r�a�ˊ=5���b>�cQ�����P֋,��G|wPC>��Q�����iݸG����H���7?K#Y�����5B�.y�j5��+#S�rdmi5��G]
+Q~|�%u�{��^w��I\�����wm�pSʗ���
+j�e���g�
+��TE���*l����wj6�5_��Q��3��8�Q+��z�B��.��e*t��	�0�>��_�0��ro��ѾԴ�=��7wb���=C�m�{�%QI���k�f�����l�uP"UÂ&ջ�ےT�yu^Y�\�?]���T�28�ە�^�?�]�w�mpnl��|E7�8j�)�,���p����u^�Ǚq� :�z���ٕ��ٵ����Mc�
+�F9r����Q<̔�����C�i	k)�L��R��G�9���o$rs�[�>���᮲q'<_i$ޛ��=:��G��~h�E �G�η�1�!�aT���G5�������|i��p�Ⱥ8=����Q��r����V�._�,��2픷���/+�V���쩽�\�}0!p�C�N�Wd�N�(5v1V�JHZ��w�}��[Y�@��G�ڨd�~iS����g��y���6y=pq���m���+���t��*B��J!��kC�J��ϴ����"}�����f����`�8~Y�IZ*�i��ޯ�3x�F��l�t��/�V]��$]�Ѹ�X/H��@�mb�7m)���с��ZE�M��y�>	GVmj��v.�o@r<}̉C����Q��%q����!�>�K1Q܇�O�OVwP��/���|Ԫ�ی�V��5���s���[1��ϡ�']�-}� �%�zӌN0�j|&VKZ;�������3.5�J�D�������QH(�_�\���	�|v����^W�+��:\�àN�]P�gO@�$�����F�s��P���d���mDE�`*��:e�D�Sɼ�0E�5]����?T��f9L6�犂{2�%w�J����tc�Db$�_$y[ԧ���P�rYe�{I��w�N���y��e���#�៺ѯr_b�ʔ�fm����2b�K�4E�$�)�Pg�7?7��v�>Ʊ`���μ�Hs���*�e�ԑ��������:��V���*<<��`Q��Su�P��)��T�DK����D����^�6f��OT���2��]ru�3�|�p��^�n���nD�ؚ�w�թ����ɟm�?+���a:�`kT�{ѷ�s��Q��[���f떀�0�Ӏ+���E�ˌ�쉥w<5�>��/2�5R��w���z ah�1����b�.�j�0��������HK���5ާ�x�u6I�mM#u��ي�D��;7��c��7r
+�c9[Cз�I����{����8��h'b�/?�/0\Y���l�s�D��;���B�"!-�x�o�P�2%�U0����ș�
��M�ǣ���l��c�јڌݤ#�'�'���%��z�ء�-g�F�ڽ���Q�����/�+
�Z@ȯ���Pޞ^L8��L��5������*��_ET򧞋A�XDӱ��mS~+%4#�ɷ�����\�/a����&(��r��W|F��8��V�'d*z˳���p=��*����4�t��ӏ�.�������y�$���"i����%��Hk������fr�ݷ�V�#z�|����O	p�X�ɂ����ޔ_�M��$�H*K�+�����q��~�g}�<�]��uA�R][a�B�H0���z�o	�[�F
�wT�F6��O��G��ܾ���ޓ ���
+�ۍ�"w�;پ��<P,�u����?�(�z��6^F>f��ѬAv��!f*ql�X�BQ��7c�ȅfq�\A)�Ya�F�'=�`xヌ�F-��06��V�P��w��L���=ot�L�r��y��"�Tԕ;��j$3/r+�N��4�]Kl�=�'���n�V~������V�� h��O�]���""���2�5�
+���q�o�6��&�3��qK�yT�������8
+mnF�z��[��-\��
+v~��]��,I	�eıAlt�
+}������Y�����|���E7���"��w�ߗ��"��s�"jf�ُlQ/觚^BE�0��\C�%�f+�t����n�z8�a"���}�*yQ�Ϟ�t���wU"�/C�mݩኳ��|zXs�4тއUW\3�4�W�w`�( yɴ�m7<O&���lnU��3�+��YqC���qؽ>#:eEKbr�4{ˮ�1T�0�IH�ɮ0"M��'���չ�l�{��l��Q�5��$��b@�Y'/�����"6�3�֝�ղ��k�)~�.�-,(C�tE������N��b�ԣTMg���
+ЩW�?G'*^߇{j�ozul�����]2Q�
��k���_�+ܿGp:�!�"�	�z�~��E1���U�TQ�z׃��U��L�}�<m<����rCA
+;&�V�_8�C�pȼ\�sR���	׶���x��k�W���ۈU­�{�T;P��'�s���j��e�{���;z{z�Y�H�nʠ�S�n�zG��Yv�š�%9���xM�:)Ǟ2��zRo��������~
+��D������KEK�(R�z��o��EgKn��w�bXQ�u]��2v��+����}���V2��ږ}�aB�Oڋ��q�wU�!��v���T���8D~�^�/�e���5�G�-4��-�T�����
�P���`���F�����<r
+h���
+G�d꠱�승x��(s�=}���!�j3�d��נEWRT��%���]�ɤ�m&�Tk^���~���bT֔ *Ii8��ȁAc3��mi!��� �7��A�X荎ʵ��L���g��c�nKt�@�r<r��=����٫gʡ�5�[6�49�r��{!��I��]��?��-.�HM�D�k�O�O�ޗ*�z6�jU	`6F`$/a���́V����k��df^��P<�Kʘ�,�P?i�KyMya��8�f!�ަ+*�;��Ѿ�G�5��/]yS�(��)j�Qj�p�������B�t���*���D)oX��w�YV⟓���͇G�e7	&���f2��"_[H���2Ԑ�Ȇ\��&{���T����_,*ND�h$�6��4���VL
+��Rɐ��e��E+�) ���O#J�P2�(H����'!�jf�r�K��m����"d!�N�A�mԒI�Ԫ�o��գ�.�|1Q�o��b$���bOwh�Rf?����	�1��Y�!Z|�ST��\�������N�\���,��hb<
5�9r'��[��g�ޚ�I=��81|[[�/YZ�o�d�;�OD����wc��K���i&?��f��8|^v�3M��������@b�ן�
+D����|���0�WB�!�
~���֠�N�!��Jc���z� _y�?��-Os7�i�T��/"{H9{��O�J�����tϓ�h"����.�-����R�1Zu�;ҋLl���M�(��9�CS���HvG?�H~V�J?8�Ρ��f̒�*���Q���I�U���;�2�.�KU��Q�u������q�����`}��<�YYz+�lr���m�C�y�Uc�}�иi�V8�;��x�cy��5���U�d��׏�����&~A��%�i�k���`���E~�
c2�ae�l���Mf�C�BFڻ
D}QgN��e%�Z�Dv�'m��t�oHne�+���T*}�Џ��$g҅p��k�`�O�D�e8T2r�ێ-��Ye_����:�;"����kh��d0j�w���3=5����PF���
+���]ɕ�!2�֘Mo`B'�j����ʢH���D�,���a�o�^���c+>Q��^�樍J�َ���T�OPH���J	���s`����T�|���G�c��B�g��#�$@\�sd�����w[2j�J�\��^�f���EJ.rN��.�o�A@/�)G��=Kn��P
+�R�~M��Vv�͉��U��G7��3�J� ��&"����>���s=�C��8Y岁~�sO^~ �Ҏ�f���ib�EhK6\ČWL-j\���4Q���&��,�l�R���I$˷��_<tL�2X�5M��+,�7�"A�,�I*�4�h|��o��OW�Y�t�O���5I/�.��=Z�::���:�Dz~�>���*���:����p(M�4)Ȝ�;Q.�a'����� 5�����/G�`q6��0�Ml��A��<o���85z�T$a���i]�
��g%���>M�	,-�u��P����I����u�W_Q�S�]%��F�LlU��yE�����Ż��,/���[o���s}�������8xv*!�w�m���u1e�M�W��cJ���Tj㯨�-�Zgا�9���#��Z�x��H!U�Kb+��.Y��(�l���RF��[gi�̛'쨅�I���Xa�R�Yj����
+!�+�=���/
iN�S�S�^�@�ZH5U�pqe�u��5��W�D�GD�;ul�K��0�H)0
+�.� ��̎�D�f�$������zxݹE�>�'���AN…NU
+P&>1<�VI�e�V��W����K�L� L� ޡO7���
+��}w+�%�,	 &/9e�[;-Ͱ�I�~��0��Z��1&+k��ܹ%�\��4��1GVt�͘�ƚw)bI��E=�8���/R(,��i�i�ʽph���Ӟoi�\����V��Od>_���V'C����O����tR�Vl��:�rHyzB���]��|�KS�R*�����33i�g�(�T38��lD���u�}b���˟���?�Lp7Lo��R��̎ё�b`�#�ȎI��u�f��OG<�F!4��S���to�MxN/{I�X����1�h^�n;�:����C�iFq��i?氃'���\���|���/�PZ(qL�?ڌ��ʉ#w��&LW.�v�*.�3"��K��^�o�M�i�J����Al��Q���z�#��G���'���n�~�4�kXjZ-�dk)v
�`I�[?�o!?�
+�zjeF�}iyi�4�;�\���d�HMm&��IAn`f��v�pZ�����h�'���)�
+�Wm2v[��zHb�f|>[�{�,F�f��Q'��(4�S��W�(˽��N���$���(w�Ƨ��v���;Uͷ��A�|,X���6[Y9��%΁�d��uNZ��RYv%J�'�)�;��BK�H�J����o��VH=o(��(~��_�n>��\�R�T3�E]�kl�+x��0��F>w���ó!N��?����}#�����?$ah'cn��0X����
+w'J����
+�*X���2)���5Iz˝O��nmn����~�2�������X�i$�~י5[�6=9���,�-���dV��SD2��?S�}�����Ά0��o������D�sfy�>Ӏ馴�b��6=I�)1�lu�$�oU�v��\	�L�5��)wu12�>�s��N{���N��$0y���Y�������@Ԓ9��4�_
+�ٜ}O��]��X���S�tvj�JY��|����T��S�ь�|���Q����܋�Ӥ�hJ�����zRZu��4%e1�ƞլN��L3ϤʭS|�k~�#r�~�ŝ���9�V
+endstream
+endobj
+1568 0 obj
+<<
+/Type /FontDescriptor
+/FontName /BOOWFK+t1xtt
+/Flags 4
+/FontBBox [-5 -183 1501 822]
+/Ascent 676
+/CapHeight 618
+/Descent -167
+/ItalicAngle 0
+/StemV 84
+/XHeight 461
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/W/X/Y/Z/a/ampersand/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1567 0 R
+>>
+endobj
+1569 0 obj
+<<
+/Length1 1134
+/Length2 3354
+/Length3 0
+/Length 4068      
+/Filter /FlateDecode
+>>
+stream
+x�}�y<�}��m)�,uY"یcW��o�2�`2c&[d��G��<
+�PI�-al	Q�E�lE��Mu�O��y�~]���s]�s>��=-dn%��"8�u	x�,����$ ��8}Z��F�0�6��V�0����H�T�/�&�2[�7��g�,��p�,�¸��g�����+�*���Ȟ箢���&�zS	��E�c��ڕ��5E����_��'��a�~�O���NΘ�Q2��Y�q�Ļaр�2�$��;������Q���;@"�ѿ�6x������o�Oc�(݄��1.x��7 �Wʔ@¸���5(}Ni@����r�8�����Ɠ�������@�Q�6���/+ Vz��+�_��Xa�x�e����*����0y�I$"�8d(���(��O��}�cC�x��	�I&�"��3SV ȟ�ߤ@���2�q�/��t"�p�zA�A(�A�A�q݃r��m�����؃t!�=HW���Pz_���%�Az_�=H���c� ]��T� �=HWE�����s-�]�=�B�b��A�X�?H�9�=HW���y��H�d��d��/��f+����àH�{KL�$"���,X�n�,��)�s9��.��Z!��y��+�Pyz���:2�H��_�����+�~��h_�����E5�JEx�z�&���T'��x]t�ë(y�ػ���lz�^'T�q*�|�(���5~Ʌ�._dž���4�;$�W�K2�m�
n�(�[�"%����DA.�,�#�~.�Q�=}^��
+W����Iq�9u_�b�D�I���� �t���M��pE���)ݎ�
+*�#j	2�A'xFr���f�w���F���I�z�5G���.D�ND��]/=c#��^�fHl�Z��"��Z��C;�]f�PBo\(c��B��Z��4��ʴΏ��	β�F!^���_�����/��$��S���l��o���H�l�zJ���t����c����rO��"�E��̥����� C�y���4Rd��e:�>�K:���UIr�+�C������+��F��
+
+Z��.B.�a���|�~jױʆ�g	y���s?l���B؄�������=6T/rߪ�.�����[�'�.�5�-����+|$��-�����YڣJ�kVS^��[�̦���ARV���zV�Ў��x�H���W�a���⍠�u�3�,��⥲�εog9�$W'p'�i��]���O/Hx�h�X�vA���#z'$ظ��4�᝛�M0�b�ZW|\��q�+�э�mC-�U���l^8�Gq��Q��y�]M�g���H^�H	�+��
	3��ns�Ɗ圠H����_h�O��)��y��t����nz�1s�P�u�Y��'�G�E�%���پ�9]{Ycfh�r�����A��u��o��$�s�U>2��pM��'^z&�U��R)�3��Rq����[����Ȳ��V�t(uZP���+�l���7)ma��”�S�nE2Ώl֜�>2�)��ƥr��=�vXHϳ%jf�慎���ay�F��z���c��Oj����xZ�~~��GՋ<�^m�<��?\�^��7��Z����V�N��U��xD���K�G��o�a?��t�V݌�s<�9�ֳ����O�@�h�xZ��	s�h!�m��jj@_[QU�~ͽ��3웧�����<��@�N;�U1��ABۖ�VbS��A���˥U��範�:(<'�P�k"��ۀ�_2C^���l_`���p��s�R��2%��v�箻ѱ��<0?��U��`��c7�8�uA��l?ޏ
�
+I^����%m���2�WAX��-r0��b��u�뼑�ak��XY�b>��ݵ��}�����\��RˎZ|f,bA�̇���
��xpP��ǻ.��Զ�5G�泹�q��@����ݯ�x)n9x���P����KZ�]UGP�O��
+�J�
G�}�x��nnm���q����
+ͫ
׊qq3�<V�<��N�':��l��W�Ԏ��(v�����6�V�e���I������+CN��+�<�ns\�W�z��K�Jآޞ�~��j��jF��~�ֹ�%'`c]����I5e�۲����;]K)��wE���`����2���1�/ݘ>8���6�C����p�f2{^�=)��Bb�YXZt<�_]�$U)�i�P�����aum���Ӌ4yA�-��g�p�K�fա�>���NݪUQ�5����Q�*s���}��#����"��#���]i�9�
G�F�˫�_�vi����O�-0���f�a5��ٚ5f���~��-�FՄ|�n��!�Ѷ��Zw�7�1K�v	~%��mTQ�RF)�z��zRà\��?Wq��,�f)�
+����,��J��܌< x�2*|+ۨ^���7َY�;8�
+�؏��d�{�|y'���=���"a/t����<�Gg�6��-k��-��X�6
+k���(Sws�-%��¾��:��n5�D;�鰚Q�l]����c@h�;ɵ)���m����=X^�V`�x_Ї���y����V^A9��&��a����`���ҘVx��#�6�n���\)�!�_<A�wV�%��l7ETQ�Gw$�;��؞��g�b:7������g�A:��{��-�W�X��o*S��>��3
ւc��b4X�ңw��mP�&��G�����٧�dx��J.9�&�P�Om���6���=�d�vDq�U�Ç�ZЁ*����j������3Wך	r�h���G��|����꾬�F��H���NQ�Y�
²���?�뼍ꐹ��8��Nz�"��^Mq��;0���j�t�<�`]��ǎtk~m��AHٕ\�Rb7+� ok�~ú���l��I�]-|զa�٥� ?���e¶
(`Ơ�M�;��yc{u��۝���ۨ��"F6�?���T�WQ����]�?��b?������6|��^yC��|�j!�z�8m�R�cX�:?X��\�%9�{,�xo�b�#�+`�zKQ�XC�Y{�'e���������a�gޚ���hV�T��w_0o:$/�IE�
~N�j.�L�i%��QS�*gUq^���ݗb�P�d�/�w�~�s����I�gF�����E���ئ��-]q)I��Ȭ7]��}��O�mv�!ݔTڭjL�D�c��:3��ܼ��"���g���_Y�M��������ul��Ry2���p^c����M��ޖ���%2�j�~�5��x��ѱ����U��=���
+��p)0Ɖ�\h��^���L�b5�
�#�y^G<��]�`���;i�#��y�=����G{���BI��M�k�@٥�(��M;dו��F%o�Z��D��[���ͺWt�=Ԋ�o\��Q���N��5�F{Y�G)�%7�/J=�N(�p,Xɶxf3z%T7�_��[�A#���'z?	��zj�����B
�Q>/{0Z��ݨ��Pq�����uC�Ē0���y���s��������j��Lz����Ȝ����
+�6�w����aa3�tS��H�Y���W����B� �<p�'y:C94 �yN
+�����͢�Z X��ZE��-C33֬�ϾS�m���NI�=����:,��<Q����ނ��Jr3���[���q�[a�����/�*���c���Rst���D*s�l�3��>�2�Jsc�g�O+is��h�'�U61��Ϳ��^�kW:�'�\��A�7|ʥ���6\���򎶙ps��:��k�6�:'�7�Il��˩��������l�H7vp6xr�5T�yu�,���"N�<=��i���k*|ga��t��@+�I�)V�=����޶xz��=?L��"\������jG<H�����fW��sپ�OW�f��S�݌�3�vC�&qԩi;��ö2	z�'�Aֱ*�\�x�[������!IQ�g���̏��G�STf�L���VuU��iSX����Q�E:y�\�?�P|���̊������;x�����c�����,�
+endstream
+endobj
+1570 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SGLLBS+t1xtt-Slant_167
+/Flags 4
+/FontBBox [-5 -183 1501 822]
+/Ascent 676
+/CapHeight 618
+/Descent -167
+/ItalicAngle -9
+/StemV 84
+/XHeight 461
+/CharSet (/a/b/c/comma/d/e/f/g/i/k/l/m/n/o/p/q/r/s/t/u/underscore/v/w/x/z)
+/FontFile 1569 0 R
+>>
+endobj
+1543 0 obj
+<<
+/Type /Encoding
+/Differences [2/fi/fl 19/ff/ffi 31/quotesingle 33/exclam/quotedbl 37/percent 40/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 124/bar]
+>>
+endobj
+648 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SYFPBV+CMMI10
+/FontDescriptor 1548 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 1537 0 R
+>>
+endobj
+532 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GNUTFA+CMMI8
+/FontDescriptor 1550 0 R
+/FirstChar 45
+/LastChar 45
+/Widths 1539 0 R
+>>
+endobj
+1366 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QMHUCV+CMMI9
+/FontDescriptor 1552 0 R
+/FirstChar 60
+/LastChar 60
+/Widths 1534 0 R
+>>
+endobj
+514 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UEIZYW+CMSY10
+/FontDescriptor 1554 0 R
+/FirstChar 3
+/LastChar 3
+/Widths 1541 0 R
+>>
+endobj
+531 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /HTWALK+CMSY8
+/FontDescriptor 1556 0 R
+/FirstChar 32
+/LastChar 32
+/Widths 1540 0 R
+>>
+endobj
+996 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GJVTUN+CMSY9
+/FontDescriptor 1558 0 R
+/FirstChar 3
+/LastChar 3
+/Widths 1536 0 R
+>>
+endobj
+228 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WRFWLY+BoschOfficeSans-Bold
+/FontDescriptor 1560 0 R
+/FirstChar 2
+/LastChar 121
+/Widths 1546 0 R
+/Encoding 1543 0 R
+>>
+endobj
+229 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ADYYFI+BoschOfficeSans-Regular
+/FontDescriptor 1562 0 R
+/FirstChar 2
+/LastChar 124
+/Widths 1545 0 R
+/Encoding 1543 0 R
+>>
+endobj
+510 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GYDQSB+BoschOfficeSans-Italic
+/FontDescriptor 1564 0 R
+/FirstChar 2
+/LastChar 122
+/Widths 1544 0 R
+/Encoding 1543 0 R
+>>
+endobj
+619 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BOOWFK+t1xtt
+/FontDescriptor 1568 0 R
+/FirstChar 34
+/LastChar 125
+/Widths 1538 0 R
+>>
+endobj
+997 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SGLLBS+t1xtt-Slant_167
+/FontDescriptor 1570 0 R
+/FirstChar 44
+/LastChar 122
+/Widths 1535 0 R
+>>
+endobj
+511 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WJPRUX+MarVoSym
+/FontDescriptor 1566 0 R
+/FirstChar 183
+/LastChar 183
+/Widths 1542 0 R
+>>
+endobj
+230 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [217 0 R 425 0 R 470 0 R 487 0 R 491 0 R 506 0 R]
+>>
+endobj
+535 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [527 0 R 571 0 R 594 0 R 603 0 R 614 0 R 625 0 R]
+>>
+endobj
+636 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [633 0 R 639 0 R 645 0 R 670 0 R 682 0 R 687 0 R]
+>>
+endobj
+714 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [704 0 R 731 0 R 758 0 R 788 0 R 816 0 R 839 0 R]
+>>
+endobj
+878 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [866 0 R 900 0 R 928 0 R 947 0 R 975 0 R 992 0 R]
+>>
+endobj
+1025 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1571 0 R
+/Kids [1021 0 R 1044 0 R 1061 0 R 1085 0 R 1109 0 R 1128 0 R]
+>>
+endobj
+1153 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1572 0 R
+/Kids [1149 0 R 1178 0 R 1232 0 R 1239 0 R 1267 0 R 1310 0 R]
+>>
+endobj
+1326 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1572 0 R
+/Kids [1320 0 R 1328 0 R 1336 0 R 1358 0 R 1375 0 R 1386 0 R]
+>>
+endobj
+1413 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1572 0 R
+/Kids [1408 0 R 1424 0 R 1444 0 R 1464 0 R 1476 0 R 1490 0 R]
+>>
+endobj
+1525 0 obj
+<<
+/Type /Pages
+/Count 2
+/Parent 1572 0 R
+/Kids [1518 0 R 1527 0 R]
+>>
+endobj
+1571 0 obj
+<<
+/Type /Pages
+/Count 36
+/Parent 1573 0 R
+/Kids [230 0 R 535 0 R 636 0 R 714 0 R 878 0 R 1025 0 R]
+>>
+endobj
+1572 0 obj
+<<
+/Type /Pages
+/Count 20
+/Parent 1573 0 R
+/Kids [1153 0 R 1326 0 R 1413 0 R 1525 0 R]
+>>
+endobj
+1573 0 obj
+<<
+/Type /Pages
+/Count 56
+/Kids [1571 0 R 1572 0 R]
+>>
+endobj
+1574 0 obj
+<<
+/Type /Outlines
+/First 6 0 R
+/Last 154 0 R
+/Count 5
+>>
+endobj
+214 0 obj
+<<
+/Title 215 0 R
+/A 212 0 R
+/Parent 206 0 R
+/Prev 210 0 R
+>>
+endobj
+210 0 obj
+<<
+/Title 211 0 R
+/A 208 0 R
+/Parent 206 0 R
+/Next 214 0 R
+>>
+endobj
+206 0 obj
+<<
+/Title 207 0 R
+/A 204 0 R
+/Parent 154 0 R
+/Prev 194 0 R
+/First 210 0 R
+/Last 214 0 R
+/Count -2
+>>
+endobj
+202 0 obj
+<<
+/Title 203 0 R
+/A 200 0 R
+/Parent 194 0 R
+/Prev 198 0 R
+>>
+endobj
+198 0 obj
+<<
+/Title 199 0 R
+/A 196 0 R
+/Parent 194 0 R
+/Next 202 0 R
+>>
+endobj
+194 0 obj
+<<
+/Title 195 0 R
+/A 192 0 R
+/Parent 154 0 R
+/Prev 182 0 R
+/Next 206 0 R
+/First 198 0 R
+/Last 202 0 R
+/Count -2
+>>
+endobj
+190 0 obj
+<<
+/Title 191 0 R
+/A 188 0 R
+/Parent 182 0 R
+/Prev 186 0 R
+>>
+endobj
+186 0 obj
+<<
+/Title 187 0 R
+/A 184 0 R
+/Parent 182 0 R
+/Next 190 0 R
+>>
+endobj
+182 0 obj
+<<
+/Title 183 0 R
+/A 180 0 R
+/Parent 154 0 R
+/Prev 170 0 R
+/Next 194 0 R
+/First 186 0 R
+/Last 190 0 R
+/Count -2
+>>
+endobj
+178 0 obj
+<<
+/Title 179 0 R
+/A 176 0 R
+/Parent 170 0 R
+/Prev 174 0 R
+>>
+endobj
+174 0 obj
+<<
+/Title 175 0 R
+/A 172 0 R
+/Parent 170 0 R
+/Next 178 0 R
+>>
+endobj
+170 0 obj
+<<
+/Title 171 0 R
+/A 168 0 R
+/Parent 154 0 R
+/Prev 158 0 R
+/Next 182 0 R
+/First 174 0 R
+/Last 178 0 R
+/Count -2
+>>
+endobj
+166 0 obj
+<<
+/Title 167 0 R
+/A 164 0 R
+/Parent 158 0 R
+/Prev 162 0 R
+>>
+endobj
+162 0 obj
+<<
+/Title 163 0 R
+/A 160 0 R
+/Parent 158 0 R
+/Next 166 0 R
+>>
+endobj
+158 0 obj
+<<
+/Title 159 0 R
+/A 156 0 R
+/Parent 154 0 R
+/Next 170 0 R
+/First 162 0 R
+/Last 166 0 R
+/Count -2
+>>
+endobj
+154 0 obj
+<<
+/Title 155 0 R
+/A 152 0 R
+/Parent 1574 0 R
+/Prev 130 0 R
+/First 158 0 R
+/Last 206 0 R
+/Count -5
+>>
+endobj
+150 0 obj
+<<
+/Title 151 0 R
+/A 148 0 R
+/Parent 134 0 R
+/Prev 146 0 R
+>>
+endobj
+146 0 obj
+<<
+/Title 147 0 R
+/A 144 0 R
+/Parent 134 0 R
+/Prev 142 0 R
+/Next 150 0 R
+>>
+endobj
+142 0 obj
+<<
+/Title 143 0 R
+/A 140 0 R
+/Parent 134 0 R
+/Prev 138 0 R
+/Next 146 0 R
+>>
+endobj
+138 0 obj
+<<
+/Title 139 0 R
+/A 136 0 R
+/Parent 134 0 R
+/Next 142 0 R
+>>
+endobj
+134 0 obj
+<<
+/Title 135 0 R
+/A 132 0 R
+/Parent 130 0 R
+/First 138 0 R
+/Last 150 0 R
+/Count -4
+>>
+endobj
+130 0 obj
+<<
+/Title 131 0 R
+/A 128 0 R
+/Parent 1574 0 R
+/Prev 98 0 R
+/Next 154 0 R
+/First 134 0 R
+/Last 134 0 R
+/Count -1
+>>
+endobj
+126 0 obj
+<<
+/Title 127 0 R
+/A 124 0 R
+/Parent 110 0 R
+/Prev 122 0 R
+>>
+endobj
+122 0 obj
+<<
+/Title 123 0 R
+/A 120 0 R
+/Parent 110 0 R
+/Prev 118 0 R
+/Next 126 0 R
+>>
+endobj
+118 0 obj
+<<
+/Title 119 0 R
+/A 116 0 R
+/Parent 110 0 R
+/Prev 114 0 R
+/Next 122 0 R
+>>
+endobj
+114 0 obj
+<<
+/Title 115 0 R
+/A 112 0 R
+/Parent 110 0 R
+/Next 118 0 R
+>>
+endobj
+110 0 obj
+<<
+/Title 111 0 R
+/A 108 0 R
+/Parent 98 0 R
+/Prev 106 0 R
+/First 114 0 R
+/Last 126 0 R
+/Count -4
+>>
+endobj
+106 0 obj
+<<
+/Title 107 0 R
+/A 104 0 R
+/Parent 98 0 R
+/Prev 102 0 R
+/Next 110 0 R
+>>
+endobj
+102 0 obj
+<<
+/Title 103 0 R
+/A 100 0 R
+/Parent 98 0 R
+/Next 106 0 R
+>>
+endobj
+98 0 obj
+<<
+/Title 99 0 R
+/A 96 0 R
+/Parent 1574 0 R
+/Prev 54 0 R
+/Next 130 0 R
+/First 102 0 R
+/Last 110 0 R
+/Count -3
+>>
+endobj
+94 0 obj
+<<
+/Title 95 0 R
+/A 92 0 R
+/Parent 54 0 R
+/Prev 90 0 R
+>>
+endobj
+90 0 obj
+<<
+/Title 91 0 R
+/A 88 0 R
+/Parent 54 0 R
+/Prev 86 0 R
+/Next 94 0 R
+>>
+endobj
+86 0 obj
+<<
+/Title 87 0 R
+/A 84 0 R
+/Parent 54 0 R
+/Prev 82 0 R
+/Next 90 0 R
+>>
+endobj
+82 0 obj
+<<
+/Title 83 0 R
+/A 80 0 R
+/Parent 54 0 R
+/Prev 78 0 R
+/Next 86 0 R
+>>
+endobj
+78 0 obj
+<<
+/Title 79 0 R
+/A 76 0 R
+/Parent 54 0 R
+/Prev 74 0 R
+/Next 82 0 R
+>>
+endobj
+74 0 obj
+<<
+/Title 75 0 R
+/A 72 0 R
+/Parent 54 0 R
+/Prev 70 0 R
+/Next 78 0 R
+>>
+endobj
+70 0 obj
+<<
+/Title 71 0 R
+/A 68 0 R
+/Parent 54 0 R
+/Prev 66 0 R
+/Next 74 0 R
+>>
+endobj
+66 0 obj
+<<
+/Title 67 0 R
+/A 64 0 R
+/Parent 54 0 R
+/Prev 62 0 R
+/Next 70 0 R
+>>
+endobj
+62 0 obj
+<<
+/Title 63 0 R
+/A 60 0 R
+/Parent 54 0 R
+/Prev 58 0 R
+/Next 66 0 R
+>>
+endobj
+58 0 obj
+<<
+/Title 59 0 R
+/A 56 0 R
+/Parent 54 0 R
+/Next 62 0 R
+>>
+endobj
+54 0 obj
+<<
+/Title 55 0 R
+/A 52 0 R
+/Parent 1574 0 R
+/Prev 6 0 R
+/Next 98 0 R
+/First 58 0 R
+/Last 94 0 R
+/Count -10
+>>
+endobj
+50 0 obj
+<<
+/Title 51 0 R
+/A 48 0 R
+/Parent 34 0 R
+/Prev 46 0 R
+>>
+endobj
+46 0 obj
+<<
+/Title 47 0 R
+/A 44 0 R
+/Parent 34 0 R
+/Prev 42 0 R
+/Next 50 0 R
+>>
+endobj
+42 0 obj
+<<
+/Title 43 0 R
+/A 40 0 R
+/Parent 34 0 R
+/Prev 38 0 R
+/Next 46 0 R
+>>
+endobj
+38 0 obj
+<<
+/Title 39 0 R
+/A 36 0 R
+/Parent 34 0 R
+/Next 42 0 R
+>>
+endobj
+34 0 obj
+<<
+/Title 35 0 R
+/A 32 0 R
+/Parent 6 0 R
+/Prev 14 0 R
+/First 38 0 R
+/Last 50 0 R
+/Count -4
+>>
+endobj
+30 0 obj
+<<
+/Title 31 0 R
+/A 28 0 R
+/Parent 14 0 R
+/Prev 26 0 R
+>>
+endobj
+26 0 obj
+<<
+/Title 27 0 R
+/A 24 0 R
+/Parent 14 0 R
+/Prev 22 0 R
+/Next 30 0 R
+>>
+endobj
+22 0 obj
+<<
+/Title 23 0 R
+/A 20 0 R
+/Parent 14 0 R
+/Prev 18 0 R
+/Next 26 0 R
+>>
+endobj
+18 0 obj
+<<
+/Title 19 0 R
+/A 16 0 R
+/Parent 14 0 R
+/Next 22 0 R
+>>
+endobj
+14 0 obj
+<<
+/Title 15 0 R
+/A 12 0 R
+/Parent 6 0 R
+/Prev 10 0 R
+/Next 34 0 R
+/First 18 0 R
+/Last 30 0 R
+/Count -4
+>>
+endobj
+10 0 obj
+<<
+/Title 11 0 R
+/A 8 0 R
+/Parent 6 0 R
+/Next 14 0 R
+>>
+endobj
+6 0 obj
+<<
+/Title 7 0 R
+/A 4 0 R
+/Parent 1574 0 R
+/Next 54 0 R
+/First 10 0 R
+/Last 34 0 R
+/Count -3
+>>
+endobj
+1575 0 obj
+<<
+/Names [(Doc-Start) 227 0 R (Item.1) 620 0 R (Item.2) 621 0 R (Item.3) 649 0 R (Item.4) 650 0 R (Item.5) 651 0 R]
+/Limits [(Doc-Start) (Item.5)]
+>>
+endobj
+1576 0 obj
+<<
+/Names [(chapter*.1) 473 0 R (chapter.1) 5 0 R (chapter.2) 53 0 R (chapter.3) 97 0 R (chapter.4) 129 0 R (chapter.5) 153 0 R]
+/Limits [(chapter*.1) (chapter.5)]
+>>
+endobj
+1577 0 obj
+<<
+/Names [(ex_step_by_step) 617 0 R (ex_step_by_step_exConclusion) 692 0 R (ex_step_by_step_exDataRate) 652 0 R (ex_step_by_step_exExampleCode) 628 0 R (ex_step_by_step_exHelloIaq) 629 0 R (ex_step_by_step_exMod) 653 0 R]
+/Limits [(ex_step_by_step) (ex_step_by_step_exMod)]
+>>
+endobj
+1578 0 obj
+<<
+/Names [(ex_step_by_step_exPrereq) 618 0 R (ex_step_by_step_exSelfHeating) 685 0 R (ex_step_by_step_exSetup) 622 0 R (ex_step_by_step_exSimMultSensors) 690 0 R (ex_step_by_step_exqULP) 691 0 R (faq) 707 0 R]
+/Limits [(ex_step_by_step_exPrereq) (faq)]
+>>
+endobj
+1579 0 obj
+<<
+/Names [(faq_faqErrorSensorControl) 936 0 R (faq_faqErrorSet) 873 0 R (faq_faqErrorUpdateSubscription) 791 0 R (faq_faqError_BSEC_E_CONFIG_CRCMISMATCH) 905 0 R (faq_faqError_BSEC_E_CONFIG_EMPTY) 908 0 R (faq_faqError_BSEC_E_CONFIG_FEATUREMISMATCH) 877 0 R]
+/Limits [(faq_faqErrorSensorControl) (faq_faqError_BSEC_E_CONFIG_FEATUREMISMATCH)]
+>>
+endobj
+1580 0 obj
+<<
+/Names [(faq_faqError_BSEC_E_CONFIG_INSUFFICIENTBUFFER) 934 0 R (faq_faqError_BSEC_E_CONFIG_INSUFFICIENTWORKBUFFER) 910 0 R (faq_faqError_BSEC_E_CONFIG_INVALIDSTRINGSIZE) 931 0 R (faq_faqError_BSEC_E_CONFIG_VERSIONMISMATCH) 874 0 R (faq_faqError_BSEC_E_DOSTEPS_DUPLICATEINPUT) 737 0 R (faq_faqError_BSEC_E_DOSTEPS_INVALIDINPUT) 712 0 R]
+/Limits [(faq_faqError_BSEC_E_CONFIG_INSUFFICIENTBUFFER) (faq_faqError_BSEC_E_DOSTEPS_INVALIDINPUT)]
+>>
+endobj
+1581 0 obj
+<<
+/Names [(faq_faqError_BSEC_E_DOSTEPS_VALUELIMITS) 735 0 R (faq_faqError_BSEC_E_SU_DUPLICATEGATE) 796 0 R (faq_faqError_BSEC_E_SU_GATECOUNTEXCEEDSARRAY) 821 0 R (faq_faqError_BSEC_E_SU_HIGHHEATERONDURATION) 844 0 R (faq_faqError_BSEC_E_SU_INVALIDSAMPLERATE) 819 0 R (faq_faqError_BSEC_E_SU_MULTGASSAMPLINTVL) 842 0 R]
+/Limits [(faq_faqError_BSEC_E_DOSTEPS_VALUELIMITS) (faq_faqError_BSEC_E_SU_MULTGASSAMPLINTVL)]
+>>
+endobj
+1582 0 obj
+<<
+/Names [(faq_faqError_BSEC_E_SU_SAMPLERATELIMITS) 794 0 R (faq_faqError_BSEC_E_SU_SAMPLINTVLINTEGERMULT) 823 0 R (faq_faqError_BSEC_E_SU_WRONGDATARATE) 792 0 R (faq_faqError_BSEC_I_DOSTEPS_NOOUTPUTSRETURNABLE) 761 0 R (faq_faqError_BSEC_I_SU_SUBSCRIBEDOUTPUTGATES) 848 0 R (faq_faqError_BSEC_W_DOSTEPS_EXCESSOUTPUTS) 764 0 R]
+/Limits [(faq_faqError_BSEC_E_SU_SAMPLERATELIMITS) (faq_faqError_BSEC_W_DOSTEPS_EXCESSOUTPUTS)]
+>>
+endobj
+1583 0 obj
+<<
+/Names [(faq_faqError_BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE) 767 0 R (faq_faqError_BSEC_W_SC_CALL_TIMING_VIOLATION) 937 0 R (faq_faqError_BSEC_W_SC_MODEXCEEDULPTIMELIMIT) 950 0 R (faq_faqError_BSEC_W_SC_MODINSUFFICIENTWAITTIME) 939 0 R (faq_faqError_BSEC_W_SU_MODINNOULP) 871 0 R (faq_faqError_BSEC_W_SU_UNKNOWNOUTPUTGATE) 846 0 R]
+/Limits [(faq_faqError_BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE) (faq_faqError_BSEC_W_SU_UNKNOWNOUTPUTGATE)]
+>>
+endobj
+1584 0 obj
+<<
+/Names [(faq_faqErrors) 710 0 R (faq_faqErrorsDoSteps) 711 0 R (faq_faqNoOutput) 708 0 R (faq_faqOutputZero) 709 0 R (figure.1.1) 598 0 R (group__bsec__interface) 978 0 R]
+/Limits [(faq_faqErrors) (group__bsec__interface)]
+>>
+endobj
+1585 0 obj
+<<
+/Names [(group__bsec__interface_ga109bf6e051d8635725da5bedeecf9eb2) 1346 0 R (group__bsec__interface_ga157748484a31501acfeee3df656adf54) 630 0 R (group__bsec__interface_ga216b6f4807227a2c6a183aaa9a8b8d7c) 1182 0 R (group__bsec__interface_ga339df4596b1c0e02eede5d54aa0f2858) 642 0 R (group__bsec__interface_ga49210a8ceb36d8610075b9220a0cdec6) 601 0 R (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98) 536 0 R]
+/Limits [(group__bsec__interface_ga109bf6e051d8635725da5bedeecf9eb2) (group__bsec__interface_ga51bcd13812ea62b35749284385a72f98)]
+>>
+endobj
+1586 0 obj
+<<
+/Names [(group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) 739 0 R (group__bsec__interface_ga6c18af8c9be0813f7d8e3547e58428db) 678 0 R (group__bsec__interface_ga70e68dbe60e2ba462537540d60192a2e) 882 0 R (group__bsec__interface_ga78ceba2853489683f274831b41460d3e) 1348 0 R (group__bsec__interface_ga7a53a20ee206f9b4c30c1d63395b3c49) 1371 0 R (group__bsec__interface_ga832388c889417ed197609d9965625bfe) 770 0 R]
+/Limits [(group__bsec__interface_ga5e4d504611e1c4a0219861bbcf2ad650) (group__bsec__interface_ga832388c889417ed197609d9965625bfe)]
+>>
+endobj
+1587 0 obj
+<<
+/Names [(group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) 674 0 R (group__bsec__interface_ga853243e7f08cc25be117fca5c8216d99) 1049 0 R (group__bsec__interface_ga8798390d842b820e79e9cbf8ba4d516e) 916 0 R (group__bsec__interface_ga8967694b8e412412977488e3e6fdb3ed) 1362 0 R (group__bsec__interface_ga91d06ad8cd57ceae529b66dd30ca4d8c) 715 0 R (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8) 516 0 R]
+/Limits [(group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) (group__bsec__interface_ga9de59ebc6a2504f15ba51d6d983faae8)]
+>>
+endobj
+1588 0 obj
+<<
+/Names [(group__bsec__interface_ga9e190b85f103d75ede9477227567e799) 1364 0 R (group__bsec__interface_gaa77a59249421277ab2fe8fbb2028eb99) 1373 0 R (group__bsec__interface_gaa8bb29e07b5b96d6f576962aef094466) 1369 0 R (group__bsec__interface_gab2122fa3909f67a2c786ecd2d8993977) 1068 0 R (group__bsec__interface_gac182d75bb2ca95c32ba4b98a136ad081) 1383 0 R (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d) 518 0 R]
+/Limits [(group__bsec__interface_ga9e190b85f103d75ede9477227567e799) (group__bsec__interface_gac4726411862aa2d383e3d3b9ca279a5d)]
+>>
+endobj
+1589 0 obj
+<<
+/Names [(group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) 517 0 R (group__bsec__interface_gacf6a5816306dfc1e3c0b26a6d459fc71) 654 0 R (group__bsec__interface_gad8f5b300b8cf00c73d837660a05e0507) 1367 0 R (group__bsec__interface_gae89eedb131288b72c267c02ec9dea8e5) 1089 0 R (group__bsec__interface_gae8fc6d614d6a40f0088262dccbb960dc) 883 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a06af666972edcebef3302d015f1d56c5) 675 0 R]
+/Limits [(group__bsec__interface_gac79a471c6e20fd8c17577f6f69a9469f) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a06af666972edcebef3302d015f1d56c5)]
+>>
+endobj
+1590 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a0a7f6e18d053c4af5f26f3852ef6ae14) 771 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a178d85d77cf448057897e9b0e0932e33) 800 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a17bf2f98e8c59e29a8eda42c692e5b3d) 716 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a1ba36727b09433f1ae925646864d8a61) 826 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a2175fa185bbcaafb28b5c73ca8ff2394) 825 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a360b54bd3d53b377010d3afa29e04b89) 1243 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a0a7f6e18d053c4af5f26f3852ef6ae14) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a360b54bd3d53b377010d3afa29e04b89)]
+>>
+endobj
+1591 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a3975b1dfa3c35829ce97814e04c143ce) 941 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a465d9fc420b12cfe3d24e937c5e5f110) 798 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a5946f4a20c9ba0cd83fed96ce3103c06) 742 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a5fa05dbfcae3caa309d9f62422eb61f3) 1242 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a6d707845ea3200a1a45726c2700333e5) 772 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a76ee5462e14060fcc889bd889b6f7b3c) 914 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a3975b1dfa3c35829ce97814e04c143ce) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a76ee5462e14060fcc889bd889b6f7b3c)]
+>>
+endobj
+1592 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a7f2cea23dbdaeddb2d91d861c608f239) 879 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a81fd5b4436be253e0ef3ebdf51b3d193) 740 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a87428d7a4a5d52e48af8db92ab71c83e) 880 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a89e2eec8486c2880912af108bbed3593) 913 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a8d7a8938ef9616b935094ed223122914) 1244 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a978a12de4397b9c0814e07650f8a1b46) 1245 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a7f2cea23dbdaeddb2d91d861c608f239) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a978a12de4397b9c0814e07650f8a1b46)]
+>>
+endobj
+1593 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa1a59666f0af5463087f528473d4ff8c) 827 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa238cfe9b905deda6f1823ca32378f91) 944 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa5de81322b446f028934aa30c4826610) 799 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab5356ac211454109eac007fcc458a6dd) 915 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab78d6a66fc7a4205a6caf69ce4f161e4) 849 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab810ba8e0fc4425c37aa460e57dc8129) 850 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa1a59666f0af5463087f528473d4ff8c) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab810ba8e0fc4425c37aa460e57dc8129)]
+>>
+endobj
+1594 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab87b5a5abeadc975488850bece3dbf84) 769 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac2600415df086d1a9b36105ac29396de) 881 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac2eca8b900ce91ee50004c549a409024) 942 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ac5899ebab7738c4c99b19ad9d934f8d1) 851 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ada34397de8a8e88ad72e8546748866cd) 943 0 R (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae5d8b5de70152c09b4153bcb41997ee7) 912 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ab87b5a5abeadc975488850bece3dbf84) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae5d8b5de70152c09b4153bcb41997ee7)]
+>>
+endobj
+1595 0 obj
+<<
+/Names [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae8e920ecde96d7d79b8962da38233880) 952 0 R (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a161b8c7ebab8fcea5590d37295d31b35) 1315 0 R (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a381b968290256e77d50c4f7e92bfb27c) 1030 0 R (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a3eb936f08a8f6f01d4c683a6ba0c9d3a) 741 0 R (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650a9202c1504b464b16f432da6a4dd582a2) 1272 0 R (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650aaf8083737123a5c4d012783ee10a522d) 1313 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858ae8e920ecde96d7d79b8962da38233880) (group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650aaf8083737123a5c4d012783ee10a522d)]
+>>
+endobj
+1596 0 obj
+<<
+/Names [(group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650ad30626f0de1be98802cb5e50c8b67207) 1027 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea134c7c7f7bd544e304209368ec72467a) 1324 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea1369c4abd0a13602b197dfc94ae6ff7d) 1325 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea1aac5358fbe12702647de81cacd6d062) 590 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea1c0eee38a61b05c5239c871f9cdc85a4) 588 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e) 586 0 R]
+/Limits [(group__bsec__interface_gga5e4d504611e1c4a0219861bbcf2ad650ad30626f0de1be98802cb5e50c8b67207) (group__bsec__interface_gga832388c889417ed197609d9965625bfea2368e219ebbce4e1ede7209486283a6e)]
+>>
+endobj
+1597 0 obj
+<<
+/Names [(group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) 587 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea5f42ad42c6bb71627b5ce91d4c410985) 582 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea64d14f069c838de2d2c1f3f436ef6108) 585 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea684dc07fef8c1723e60211068365b30a) 1323 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea78b917ecbffc8eac6875644c4136a26d) 1342 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfea792b0fbeffceea19513cc0bd31ce7ef7) 583 0 R]
+/Limits [(group__bsec__interface_gga832388c889417ed197609d9965625bfea4e05ab48912e70486351f5199910fcb9) (group__bsec__interface_gga832388c889417ed197609d9965625bfea792b0fbeffceea19513cc0bd31ce7ef7)]
+>>
+endobj
+1598 0 obj
+<<
+/Names [(group__bsec__interface_gga832388c889417ed197609d9965625bfea9fe6dbe27991e3f9f1a444c40b30af3d) 589 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfeab9d6e7e5bb1c5f99d339a649d588b3cc) 584 0 R (group__bsec__interface_gga832388c889417ed197609d9965625bfeaf2cfe69583f70b1196660122ab5a94b6) 1341 0 R (index) 494 0 R (index_intguideBSECConfiguration) 515 0 R (index_intguideBSECSolutions) 512 0 R]
+/Limits [(group__bsec__interface_gga832388c889417ed197609d9965625bfea9fe6dbe27991e3f9f1a444c40b30af3d) (index_intguideBSECSolutions)]
+>>
+endobj
+1599 0 obj
+<<
+/Names [(index_intguideLibrary) 500 0 R (index_intguideLibraryOutputs) 575 0 R (index_intguideOverviewSensors) 495 0 R (index_intguideQuickintroCodeBuild) 606 0 R (index_intguideRequirements) 579 0 R (index_intguideRequirementsFramework) 581 0 R]
+/Limits [(index_intguideLibrary) (index_intguideRequirementsFramework)]
+>>
+endobj
+1600 0 obj
+<<
+/Names [(index_intguideRequirementsHardware) 580 0 R (index_intguideRequirementsInputs) 599 0 R (index_intguideSolutionKeyfeature) 533 0 R (page.1) 225 0 R (page.10) 605 0 R (page.11) 616 0 R]
+/Limits [(index_intguideRequirementsHardware) (page.11)]
+>>
+endobj
+1601 0 obj
+<<
+/Names [(page.12) 627 0 R (page.13) 635 0 R (page.14) 641 0 R (page.15) 647 0 R (page.16) 672 0 R (page.17) 684 0 R]
+/Limits [(page.12) (page.17)]
+>>
+endobj
+1602 0 obj
+<<
+/Names [(page.18) 689 0 R (page.19) 706 0 R (page.2) 427 0 R (page.20) 733 0 R (page.21) 760 0 R (page.22) 790 0 R]
+/Limits [(page.18) (page.22)]
+>>
+endobj
+1603 0 obj
+<<
+/Names [(page.23) 818 0 R (page.24) 841 0 R (page.25) 868 0 R (page.26) 902 0 R (page.27) 930 0 R (page.28) 949 0 R]
+/Limits [(page.23) (page.28)]
+>>
+endobj
+1604 0 obj
+<<
+/Names [(page.29) 977 0 R (page.3) 472 0 R (page.30) 994 0 R (page.31) 1023 0 R (page.32) 1046 0 R (page.33) 1063 0 R]
+/Limits [(page.29) (page.33)]
+>>
+endobj
+1605 0 obj
+<<
+/Names [(page.34) 1087 0 R (page.35) 1111 0 R (page.36) 1130 0 R (page.37) 1151 0 R (page.38) 1180 0 R (page.39) 1234 0 R]
+/Limits [(page.34) (page.39)]
+>>
+endobj
+1606 0 obj
+<<
+/Names [(page.4) 489 0 R (page.40) 1241 0 R (page.41) 1269 0 R (page.42) 1312 0 R (page.43) 1322 0 R (page.44) 1330 0 R]
+/Limits [(page.4) (page.44)]
+>>
+endobj
+1607 0 obj
+<<
+/Names [(page.45) 1338 0 R (page.46) 1360 0 R (page.47) 1377 0 R (page.48) 1388 0 R (page.49) 1410 0 R (page.5) 493 0 R]
+/Limits [(page.45) (page.5)]
+>>
+endobj
+1608 0 obj
+<<
+/Names [(page.50) 1426 0 R (page.51) 1446 0 R (page.52) 1466 0 R (page.53) 1478 0 R (page.54) 1492 0 R (page.55) 1520 0 R]
+/Limits [(page.50) (page.55)]
+>>
+endobj
+1609 0 obj
+<<
+/Names [(page.56) 1529 0 R (page.6) 508 0 R (page.7) 529 0 R (page.8) 573 0 R (page.9) 596 0 R (section*.10) 984 0 R]
+/Limits [(page.56) (section*.10)]
+>>
+endobj
+1610 0 obj
+<<
+/Names [(section*.11) 1411 0 R (section*.12) 1449 0 R (section*.13) 1470 0 R (section*.14) 1497 0 R (section*.15) 1524 0 R (section*.2) 496 0 R]
+/Limits [(section*.11) (section*.2)]
+>>
+endobj
+1611 0 obj
+<<
+/Names [(section*.3) 497 0 R (section*.4) 498 0 R (section*.5) 499 0 R (section*.6) 509 0 R (section*.7) 534 0 R (section*.8) 574 0 R]
+/Limits [(section*.3) (section*.8)]
+>>
+endobj
+1612 0 obj
+<<
+/Names [(section*.9) 979 0 R (section.1.1) 9 0 R (section.1.2) 13 0 R (section.1.3) 33 0 R (section.2.1) 57 0 R (section.2.10) 93 0 R]
+/Limits [(section*.9) (section.2.10)]
+>>
+endobj
+1613 0 obj
+<<
+/Names [(section.2.2) 61 0 R (section.2.3) 65 0 R (section.2.4) 69 0 R (section.2.5) 73 0 R (section.2.6) 77 0 R (section.2.7) 81 0 R]
+/Limits [(section.2.2) (section.2.7)]
+>>
+endobj
+1614 0 obj
+<<
+/Names [(section.2.8) 85 0 R (section.2.9) 89 0 R (section.3.1) 101 0 R (section.3.2) 105 0 R (section.3.3) 109 0 R (section.4.1) 133 0 R]
+/Limits [(section.2.8) (section.4.1)]
+>>
+endobj
+1615 0 obj
+<<
+/Names [(section.5.1) 157 0 R (section.5.2) 169 0 R (section.5.3) 181 0 R (section.5.4) 193 0 R (section.5.5) 205 0 R (structbsec__bme__settings__t) 1116 0 R]
+/Limits [(section.5.1) (structbsec__bme__settings__t)]
+>>
+endobj
+1616 0 obj
+<<
+/Names [(structbsec__bme__settings__t_a300b00f9580b9af76d441cd4db8d7083) 1117 0 R (structbsec__bme__settings__t_a4407b04a0d403a9fb35fd322999113a9) 1417 0 R (structbsec__bme__settings__t_a500cfa825fa7c6ead38eba7bf7b4b955) 1415 0 R (structbsec__bme__settings__t_a7984769929826a36f59e7b9dfd6e7447) 1420 0 R (structbsec__bme__settings__t_aa197109b334a2a443d9349812865bff1) 1414 0 R (structbsec__bme__settings__t_aa4a1eeae4e7fe44a8093a3862996fbac) 1421 0 R]
+/Limits [(structbsec__bme__settings__t_a300b00f9580b9af76d441cd4db8d7083) (structbsec__bme__settings__t_aa4a1eeae4e7fe44a8093a3862996fbac)]
+>>
+endobj
+1617 0 obj
+<<
+/Names [(structbsec__bme__settings__t_aecd99f57df2bc07663a7de83f877228e) 1418 0 R (structbsec__bme__settings__t_aed0450820cd910e06e26fba04256bc24) 1419 0 R (structbsec__bme__settings__t_afc3ab51b88f259e5cb76c10ee0732e5b) 1416 0 R (structbsec__input__t) 999 0 R (structbsec__input__t_a000803d39a2be521f2b5e7017c31303b) 1028 0 R (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad) 1029 0 R]
+/Limits [(structbsec__bme__settings__t_aecd99f57df2bc07663a7de83f877228e) (structbsec__input__t_a90d515d57b274dfde74a281de469a3ad)]
+>>
+endobj
+1618 0 obj
+<<
+/Names [(structbsec__input__t_a916867811b65988853b69f729b91c262) 1026 0 R (structbsec__input__t_ab535651a26b2e2c44c83e441385e3def) 1451 0 R (structbsec__output__t) 1000 0 R (structbsec__output__t_a1a046572bcb85189df10c9ac8f362999) 1472 0 R (structbsec__output__t_a74a917725569b67eb14e78a34fa9c55d) 1471 0 R (structbsec__output__t_a91006cd8f20e88a5ff2b6ebfbecdeb95) 1473 0 R]
+/Limits [(structbsec__input__t_a916867811b65988853b69f729b91c262) (structbsec__output__t_a91006cd8f20e88a5ff2b6ebfbecdeb95)]
+>>
+endobj
+1619 0 obj
+<<
+/Names [(structbsec__output__t_ab188da3e58d458f4b94a64379404da46) 1318 0 R (structbsec__output__t_ac4e7ef20f713075472bc953efb13957f) 591 0 R (structbsec__sensor__configuration__t) 673 0 R (structbsec__sensor__configuration__t_a150ba3a737fb75f56052c60d55246ae4) 677 0 R (structbsec__sensor__configuration__t_a92665e4f2f3cd5237814488774c0f546) 676 0 R (structbsec__version__t) 1069 0 R]
+/Limits [(structbsec__output__t_ab188da3e58d458f4b94a64379404da46) (structbsec__version__t)]
+>>
+endobj
+1620 0 obj
+<<
+/Names [(structbsec__version__t_a3d9b11a72027026f492a438342a2efbd) 1095 0 R (structbsec__version__t_a5daac4534748c6f0be9f009273613b02) 1096 0 R (structbsec__version__t_a9d47d254d17740222791fa0f53c7ac52) 1094 0 R (structbsec__version__t_af823001b85e62b90279f9e6f3c478c23) 1093 0 R (subsection.1.2.1) 17 0 R (subsection.1.2.2) 21 0 R]
+/Limits [(structbsec__version__t_a3d9b11a72027026f492a438342a2efbd) (subsection.1.2.2)]
+>>
+endobj
+1621 0 obj
+<<
+/Names [(subsection.1.2.3) 25 0 R (subsection.1.2.4) 29 0 R (subsection.1.3.1) 37 0 R (subsection.1.3.2) 41 0 R (subsection.1.3.3) 45 0 R (subsection.1.3.4) 49 0 R]
+/Limits [(subsection.1.2.3) (subsection.1.3.4)]
+>>
+endobj
+1622 0 obj
+<<
+/Names [(subsection.3.3.1) 113 0 R (subsection.3.3.2) 117 0 R (subsection.3.3.3) 121 0 R (subsection.3.3.4) 125 0 R (subsection.4.1.1) 137 0 R (subsection.4.1.2) 141 0 R]
+/Limits [(subsection.3.3.1) (subsection.4.1.2)]
+>>
+endobj
+1623 0 obj
+<<
+/Names [(subsection.4.1.3) 145 0 R (subsection.4.1.4) 149 0 R (subsection.5.1.1) 161 0 R (subsection.5.1.2) 165 0 R (subsection.5.2.1) 173 0 R (subsection.5.2.2) 177 0 R]
+/Limits [(subsection.4.1.3) (subsection.5.2.2)]
+>>
+endobj
+1624 0 obj
+<<
+/Names [(subsection.5.3.1) 185 0 R (subsection.5.3.2) 189 0 R (subsection.5.4.1) 197 0 R (subsection.5.4.2) 201 0 R (subsection.5.5.1) 209 0 R (subsection.5.5.2) 213 0 R]
+/Limits [(subsection.5.3.1) (subsection.5.5.2)]
+>>
+endobj
+1625 0 obj
+<<
+/Names [(subsubsection.3.3.1.1) 713 0 R (subsubsection.3.3.1.2) 736 0 R (subsubsection.3.3.1.3) 738 0 R (subsubsection.3.3.1.4) 762 0 R (subsubsection.3.3.1.5) 765 0 R (subsubsection.3.3.1.6) 768 0 R]
+/Limits [(subsubsection.3.3.1.1) (subsubsection.3.3.1.6)]
+>>
+endobj
+1626 0 obj
+<<
+/Names [(subsubsection.3.3.2.1) 793 0 R (subsubsection.3.3.2.10) 869 0 R (subsubsection.3.3.2.11) 872 0 R (subsubsection.3.3.2.2) 795 0 R (subsubsection.3.3.2.3) 797 0 R (subsubsection.3.3.2.4) 820 0 R]
+/Limits [(subsubsection.3.3.2.1) (subsubsection.3.3.2.4)]
+>>
+endobj
+1627 0 obj
+<<
+/Names [(subsubsection.3.3.2.5) 822 0 R (subsubsection.3.3.2.6) 824 0 R (subsubsection.3.3.2.7) 843 0 R (subsubsection.3.3.2.8) 845 0 R (subsubsection.3.3.2.9) 847 0 R (subsubsection.3.3.3.1) 875 0 R]
+/Limits [(subsubsection.3.3.2.5) (subsubsection.3.3.3.1)]
+>>
+endobj
+1628 0 obj
+<<
+/Names [(subsubsection.3.3.3.2) 903 0 R (subsubsection.3.3.3.3) 906 0 R (subsubsection.3.3.3.4) 909 0 R (subsubsection.3.3.3.5) 911 0 R (subsubsection.3.3.3.6) 932 0 R (subsubsection.3.3.3.7) 935 0 R]
+/Limits [(subsubsection.3.3.3.2) (subsubsection.3.3.3.7)]
+>>
+endobj
+1629 0 obj
+<<
+/Names [(subsubsection.3.3.4.1) 938 0 R (subsubsection.3.3.4.2) 940 0 R (subsubsection.3.3.4.3) 951 0 R (subsubsection.4.1.2.1) 995 0 R (subsubsection.4.1.2.10) 1152 0 R (subsubsection.4.1.2.2) 1024 0 R]
+/Limits [(subsubsection.3.3.4.1) (subsubsection.4.1.2.2)]
+>>
+endobj
+1630 0 obj
+<<
+/Names [(subsubsection.4.1.2.3) 1048 0 R (subsubsection.4.1.2.4) 1066 0 R (subsubsection.4.1.2.5) 1088 0 R (subsubsection.4.1.2.6) 1090 0 R (subsubsection.4.1.2.7) 1092 0 R (subsubsection.4.1.2.8) 1114 0 R]
+/Limits [(subsubsection.4.1.2.3) (subsubsection.4.1.2.8)]
+>>
+endobj
+1631 0 obj
+<<
+/Names [(subsubsection.4.1.2.9) 1131 0 R (subsubsection.4.1.3.1) 1235 0 R (subsubsection.4.1.3.2) 1270 0 R (subsubsection.4.1.3.3) 1316 0 R (subsubsection.4.1.4.1) 1343 0 R (subsubsection.4.1.4.10) 1372 0 R]
+/Limits [(subsubsection.4.1.2.9) (subsubsection.4.1.4.10)]
+>>
+endobj
+1632 0 obj
+<<
+/Names [(subsubsection.4.1.4.11) 1378 0 R (subsubsection.4.1.4.12) 1379 0 R (subsubsection.4.1.4.13) 1380 0 R (subsubsection.4.1.4.14) 1381 0 R (subsubsection.4.1.4.15) 1382 0 R (subsubsection.4.1.4.16) 1384 0 R]
+/Limits [(subsubsection.4.1.4.11) (subsubsection.4.1.4.16)]
+>>
+endobj
+1633 0 obj
+<<
+/Names [(subsubsection.4.1.4.2) 1344 0 R (subsubsection.4.1.4.3) 1345 0 R (subsubsection.4.1.4.4) 1347 0 R (subsubsection.4.1.4.5) 1361 0 R (subsubsection.4.1.4.6) 1363 0 R (subsubsection.4.1.4.7) 1365 0 R]
+/Limits [(subsubsection.4.1.4.2) (subsubsection.4.1.4.7)]
+>>
+endobj
+1634 0 obj
+<<
+/Names [(subsubsection.4.1.4.8) 1368 0 R (subsubsection.4.1.4.9) 1370 0 R (subsubsection.5.1.2.1) 1427 0 R (subsubsection.5.1.2.2) 1428 0 R (subsubsection.5.1.2.3) 1429 0 R (subsubsection.5.1.2.4) 1430 0 R]
+/Limits [(subsubsection.4.1.4.8) (subsubsection.5.1.2.4)]
+>>
+endobj
+1635 0 obj
+<<
+/Names [(subsubsection.5.1.2.5) 1431 0 R (subsubsection.5.1.2.6) 1432 0 R (subsubsection.5.1.2.7) 1433 0 R (subsubsection.5.1.2.8) 1447 0 R (subsubsection.5.1.2.9) 1448 0 R (subsubsection.5.2.2.1) 1450 0 R]
+/Limits [(subsubsection.5.1.2.5) (subsubsection.5.2.2.1)]
+>>
+endobj
+1636 0 obj
+<<
+/Names [(subsubsection.5.2.2.2) 1467 0 R (subsubsection.5.2.2.3) 1468 0 R (subsubsection.5.2.2.4) 1469 0 R (subsubsection.5.3.2.1) 1479 0 R (subsubsection.5.3.2.2) 1493 0 R (subsubsection.5.3.2.3) 1494 0 R]
+/Limits [(subsubsection.5.2.2.2) (subsubsection.5.3.2.3)]
+>>
+endobj
+1637 0 obj
+<<
+/Names [(subsubsection.5.3.2.4) 1495 0 R (subsubsection.5.3.2.5) 1496 0 R (subsubsection.5.4.2.1) 1521 0 R (subsubsection.5.4.2.2) 1522 0 R (subsubsection.5.5.2.1) 1530 0 R (subsubsection.5.5.2.2) 1531 0 R]
+/Limits [(subsubsection.5.3.2.4) (subsubsection.5.5.2.2)]
+>>
+endobj
+1638 0 obj
+<<
+/Names [(subsubsection.5.5.2.3) 1532 0 R (subsubsection.5.5.2.4) 1533 0 R (table.1.1) 513 0 R (table.1.2) 530 0 R (table.1.3) 576 0 R (table.1.4) 607 0 R]
+/Limits [(subsubsection.5.5.2.3) (table.1.4)]
+>>
+endobj
+1639 0 obj
+<<
+/Names [(table.4.1) 980 0 R (table.4.10) 1113 0 R (table.4.11) 1115 0 R (table.4.12) 1132 0 R (table.4.13) 1181 0 R (table.4.14) 1236 0 R]
+/Limits [(table.4.1) (table.4.14)]
+>>
+endobj
+1640 0 obj
+<<
+/Names [(table.4.15) 1271 0 R (table.4.16) 1317 0 R (table.4.2) 981 0 R (table.4.3) 982 0 R (table.4.4) 983 0 R (table.4.5) 998 0 R]
+/Limits [(table.4.15) (table.4.5)]
+>>
+endobj
+1641 0 obj
+<<
+/Names [(table.4.6) 1047 0 R (table.4.7) 1065 0 R (table.4.8) 1067 0 R (table.4.9) 1091 0 R (table.5.1) 1480 0 R (table.5.2) 1481 0 R]
+/Limits [(table.4.6) (table.5.2)]
+>>
+endobj
+1642 0 obj
+<<
+/Names [(table.5.3) 1482 0 R (table.5.4) 1523 0 R]
+/Limits [(table.5.3) (table.5.4)]
+>>
+endobj
+1643 0 obj
+<<
+/Kids [1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R]
+/Limits [(Doc-Start) (faq_faqError_BSEC_E_DOSTEPS_INVALIDINPUT)]
+>>
+endobj
+1644 0 obj
+<<
+/Kids [1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R]
+/Limits [(faq_faqError_BSEC_E_DOSTEPS_VALUELIMITS) (group__bsec__interface_ga832388c889417ed197609d9965625bfe)]
+>>
+endobj
+1645 0 obj
+<<
+/Kids [1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R]
+/Limits [(group__bsec__interface_ga847070d3ecfa970cb2f716a2d11fe219) (group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858a978a12de4397b9c0814e07650f8a1b46)]
+>>
+endobj
+1646 0 obj
+<<
+/Kids [1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R]
+/Limits [(group__bsec__interface_gga339df4596b1c0e02eede5d54aa0f2858aa1a59666f0af5463087f528473d4ff8c) (index_intguideBSECSolutions)]
+>>
+endobj
+1647 0 obj
+<<
+/Kids [1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R]
+/Limits [(index_intguideLibrary) (page.33)]
+>>
+endobj
+1648 0 obj
+<<
+/Kids [1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R]
+/Limits [(page.34) (section*.2)]
+>>
+endobj
+1649 0 obj
+<<
+/Kids [1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R]
+/Limits [(section*.3) (structbsec__bme__settings__t_aa4a1eeae4e7fe44a8093a3862996fbac)]
+>>
+endobj
+1650 0 obj
+<<
+/Kids [1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R]
+/Limits [(structbsec__bme__settings__t_aecd99f57df2bc07663a7de83f877228e) (subsection.4.1.2)]
+>>
+endobj
+1651 0 obj
+<<
+/Kids [1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R]
+/Limits [(subsection.4.1.3) (subsubsection.3.3.3.7)]
+>>
+endobj
+1652 0 obj
+<<
+/Kids [1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R]
+/Limits [(subsubsection.3.3.4.1) (subsubsection.5.1.2.4)]
+>>
+endobj
+1653 0 obj
+<<
+/Kids [1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 1640 0 R]
+/Limits [(subsubsection.5.1.2.5) (table.4.5)]
+>>
+endobj
+1654 0 obj
+<<
+/Kids [1641 0 R 1642 0 R]
+/Limits [(table.4.6) (table.5.4)]
+>>
+endobj
+1655 0 obj
+<<
+/Kids [1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R]
+/Limits [(Doc-Start) (section*.2)]
+>>
+endobj
+1656 0 obj
+<<
+/Kids [1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R]
+/Limits [(section*.3) (table.5.4)]
+>>
+endobj
+1657 0 obj
+<<
+/Kids [1655 0 R 1656 0 R]
+/Limits [(Doc-Start) (table.5.4)]
+>>
+endobj
+1658 0 obj
+<<
+/Dests 1657 0 R
+>>
+endobj
+1659 0 obj
+<<
+/Type /Catalog
+/Pages 1573 0 R
+/Outlines 1574 0 R
+/Names 1658 0 R
+/PageMode/UseOutlines
+/OpenAction 216 0 R
+>>
+endobj
+1660 0 obj
+<<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.18)/Keywords()
+/CreationDate (D:20200624162025+08'00')
+/ModDate (D:20200624162025+08'00')
+/Trapped /False
+/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.6362 (1.40.18))
+>>
+endobj
+xref
+0 1661
+0000000519 65535 f 
+0000840938 00000 n 
+0000840958 00000 n 
+0000840978 00000 n 
+0000000015 00000 n 
+0000547474 00000 n 
+0001230023 00000 n 
+0000000060 00000 n 
+0000000222 00000 n 
+0000547655 00000 n 
+0001229951 00000 n 
+0000000269 00000 n 
+0000000458 00000 n 
+0000552570 00000 n 
+0001229828 00000 n 
+0000000506 00000 n 
+0000000730 00000 n 
+0000552751 00000 n 
+0001229754 00000 n 
+0000000783 00000 n 
+0000000926 00000 n 
+0000552934 00000 n 
+0001229667 00000 n 
+0000000979 00000 n 
+0000001147 00000 n 
+0000556967 00000 n 
+0001229580 00000 n 
+0000001200 00000 n 
+0000001290 00000 n 
+0000564064 00000 n 
+0001229506 00000 n 
+0000001343 00000 n 
+0000001577 00000 n 
+0000564247 00000 n 
+0001229396 00000 n 
+0000001625 00000 n 
+0000001798 00000 n 
+0000564367 00000 n 
+0001229322 00000 n 
+0000001851 00000 n 
+0000001918 00000 n 
+0000601993 00000 n 
+0001229235 00000 n 
+0000001971 00000 n 
+0000002091 00000 n 
+0000604666 00000 n 
+0001229148 00000 n 
+0000002144 00000 n 
+0000002325 00000 n 
+0000604788 00000 n 
+0001229074 00000 n 
+0000002378 00000 n 
+0000002501 00000 n 
+0000609576 00000 n 
+0001228948 00000 n 
+0000002547 00000 n 
+0000002705 00000 n 
+0000609759 00000 n 
+0001228874 00000 n 
+0000002753 00000 n 
+0000002845 00000 n 
+0000610003 00000 n 
+0001228787 00000 n 
+0000002893 00000 n 
+0000003031 00000 n 
+0000614520 00000 n 
+0001228700 00000 n 
+0000003079 00000 n 
+0000003192 00000 n 
+0000618265 00000 n 
+0001228613 00000 n 
+0000003240 00000 n 
+0000003416 00000 n 
+0000626141 00000 n 
+0001228526 00000 n 
+0000003464 00000 n 
+0000003627 00000 n 
+0000632886 00000 n 
+0001228439 00000 n 
+0000003675 00000 n 
+0000003788 00000 n 
+0000637005 00000 n 
+0001228352 00000 n 
+0000003836 00000 n 
+0000004147 00000 n 
+0000640327 00000 n 
+0001228265 00000 n 
+0000004195 00000 n 
+0000004500 00000 n 
+0000640447 00000 n 
+0001228178 00000 n 
+0000004548 00000 n 
+0000004763 00000 n 
+0000640568 00000 n 
+0001228104 00000 n 
+0000004812 00000 n 
+0000004889 00000 n 
+0000645483 00000 n 
+0001227975 00000 n 
+0000004935 00000 n 
+0000004977 00000 n 
+0000645665 00000 n 
+0001227897 00000 n 
+0000005026 00000 n 
+0000005225 00000 n 
+0000645787 00000 n 
+0001227805 00000 n 
+0000005274 00000 n 
+0000005566 00000 n 
+0000645909 00000 n 
+0001227688 00000 n 
+0000005615 00000 n 
+0000005830 00000 n 
+0000646032 00000 n 
+0001227609 00000 n 
+0000005884 00000 n 
+0000006103 00000 n 
+0000664151 00000 n 
+0001227516 00000 n 
+0000006157 00000 n 
+0000006431 00000 n 
+0000682017 00000 n 
+0001227423 00000 n 
+0000006485 00000 n 
+0000006862 00000 n 
+0000694522 00000 n 
+0001227344 00000 n 
+0000006916 00000 n 
+0000007165 00000 n 
+0000701820 00000 n 
+0001227212 00000 n 
+0000007212 00000 n 
+0000007343 00000 n 
+0000701942 00000 n 
+0001227108 00000 n 
+0000007392 00000 n 
+0000007506 00000 n 
+0000702003 00000 n 
+0001227029 00000 n 
+0000007560 00000 n 
+0000007666 00000 n 
+0000707564 00000 n 
+0001226936 00000 n 
+0000007720 00000 n 
+0000007846 00000 n 
+0000766229 00000 n 
+0001226843 00000 n 
+0000007900 00000 n 
+0000007988 00000 n 
+0000795657 00000 n 
+0001226764 00000 n 
+0000008042 00000 n 
+0000008105 00000 n 
+0000810473 00000 n 
+0001226645 00000 n 
+0000008152 00000 n 
+0000008326 00000 n 
+0000810598 00000 n 
+0001226527 00000 n 
+0000008375 00000 n 
+0000008598 00000 n 
+0000810723 00000 n 
+0001226448 00000 n 
+0000008652 00000 n 
+0000008783 00000 n 
+0000813047 00000 n 
+0001226369 00000 n 
+0000008837 00000 n 
+0000008963 00000 n 
+0000818759 00000 n 
+0001226237 00000 n 
+0000009012 00000 n 
+0000009197 00000 n 
+0000818884 00000 n 
+0001226158 00000 n 
+0000009251 00000 n 
+0000009382 00000 n 
+0000818946 00000 n 
+0001226079 00000 n 
+0000009436 00000 n 
+0000009562 00000 n 
+0000823507 00000 n 
+0001225947 00000 n 
+0000009611 00000 n 
+0000009801 00000 n 
+0000828325 00000 n 
+0001225868 00000 n 
+0000009855 00000 n 
+0000009986 00000 n 
+0000828387 00000 n 
+0001225789 00000 n 
+0000010040 00000 n 
+0000010166 00000 n 
+0000832916 00000 n 
+0001225657 00000 n 
+0000010215 00000 n 
+0000010478 00000 n 
+0000833041 00000 n 
+0001225578 00000 n 
+0000010532 00000 n 
+0000010663 00000 n 
+0000837810 00000 n 
+0001225499 00000 n 
+0000010717 00000 n 
+0000010843 00000 n 
+0000838249 00000 n 
+0001225381 00000 n 
+0000010892 00000 n 
+0000011087 00000 n 
+0000838374 00000 n 
+0001225302 00000 n 
+0000011141 00000 n 
+0000011272 00000 n 
+0000840124 00000 n 
+0001225223 00000 n 
+0000011326 00000 n 
+0000011452 00000 n 
+0000012595 00000 n 
+0000093858 00000 n 
+0000530398 00000 n 
+0000012730 00000 n 
+0000032812 00000 n 
+0000081329 00000 n 
+0000530592 00000 n 
+0000011502 00000 n 
+0000530469 00000 n 
+0000032736 00000 n 
+0000530531 00000 n 
+0001222678 00000 n 
+0001222856 00000 n 
+0001223666 00000 n 
+0000014448 00000 n 
+0000014578 00000 n 
+0000014802 00000 n 
+0000015026 00000 n 
+0000015250 00000 n 
+0000015474 00000 n 
+0000015698 00000 n 
+0000015922 00000 n 
+0000016146 00000 n 
+0000016369 00000 n 
+0000016593 00000 n 
+0000016817 00000 n 
+0000017041 00000 n 
+0000017265 00000 n 
+0000017489 00000 n 
+0000017713 00000 n 
+0000017937 00000 n 
+0000018161 00000 n 
+0000018385 00000 n 
+0000018609 00000 n 
+0000018629 00000 n 
+0000018719 00000 n 
+0000018739 00000 n 
+0000018829 00000 n 
+0000018849 00000 n 
+0000018939 00000 n 
+0000018959 00000 n 
+0000019049 00000 n 
+0000019069 00000 n 
+0000019159 00000 n 
+0000019179 00000 n 
+0000019269 00000 n 
+0000019289 00000 n 
+0000019379 00000 n 
+0000019399 00000 n 
+0000019489 00000 n 
+0000019509 00000 n 
+0000019599 00000 n 
+0000019619 00000 n 
+0000019709 00000 n 
+0000019729 00000 n 
+0000019819 00000 n 
+0000019839 00000 n 
+0000019929 00000 n 
+0000019949 00000 n 
+0000020039 00000 n 
+0000020059 00000 n 
+0000020149 00000 n 
+0000020169 00000 n 
+0000020259 00000 n 
+0000020279 00000 n 
+0000020369 00000 n 
+0000020389 00000 n 
+0000020479 00000 n 
+0000020499 00000 n 
+0000020589 00000 n 
+0000020830 00000 n 
+0000021078 00000 n 
+0000021332 00000 n 
+0000021579 00000 n 
+0000021826 00000 n 
+0000022090 00000 n 
+0000022338 00000 n 
+0000022680 00000 n 
+0000022928 00000 n 
+0000023181 00000 n 
+0000023434 00000 n 
+0000023682 00000 n 
+0000023930 00000 n 
+0000024164 00000 n 
+0000024418 00000 n 
+0000024673 00000 n 
+0000024927 00000 n 
+0000025179 00000 n 
+0000025199 00000 n 
+0000025290 00000 n 
+0000025310 00000 n 
+0000025401 00000 n 
+0000025422 00000 n 
+0000025513 00000 n 
+0000025533 00000 n 
+0000025624 00000 n 
+0000025644 00000 n 
+0000025735 00000 n 
+0000025756 00000 n 
+0000025818 00000 n 
+0000025838 00000 n 
+0000025929 00000 n 
+0000025950 00000 n 
+0000026012 00000 n 
+0000026032 00000 n 
+0000026124 00000 n 
+0000026145 00000 n 
+0000026237 00000 n 
+0000026258 00000 n 
+0000026350 00000 n 
+0000026370 00000 n 
+0000026462 00000 n 
+0000026482 00000 n 
+0000026574 00000 n 
+0000026594 00000 n 
+0000026656 00000 n 
+0000026677 00000 n 
+0000026769 00000 n 
+0000026790 00000 n 
+0000026882 00000 n 
+0000026903 00000 n 
+0000026995 00000 n 
+0000027016 00000 n 
+0000027108 00000 n 
+0000027242 00000 n 
+0000027376 00000 n 
+0000027510 00000 n 
+0000027644 00000 n 
+0000027778 00000 n 
+0000027912 00000 n 
+0000028046 00000 n 
+0000028180 00000 n 
+0000028314 00000 n 
+0000028448 00000 n 
+0000028582 00000 n 
+0000028716 00000 n 
+0000028850 00000 n 
+0000028984 00000 n 
+0000029118 00000 n 
+0000029262 00000 n 
+0000029426 00000 n 
+0000029570 00000 n 
+0000029693 00000 n 
+0000029816 00000 n 
+0000029980 00000 n 
+0000030103 00000 n 
+0000030225 00000 n 
+0000030352 00000 n 
+0000030475 00000 n 
+0000030602 00000 n 
+0000030725 00000 n 
+0000030848 00000 n 
+0000030971 00000 n 
+0000031097 00000 n 
+0000031222 00000 n 
+0000031348 00000 n 
+0000031475 00000 n 
+0000031602 00000 n 
+0000031725 00000 n 
+0000031850 00000 n 
+0000031977 00000 n 
+0000032104 00000 n 
+0000032231 00000 n 
+0000032357 00000 n 
+0000032483 00000 n 
+0000032609 00000 n 
+0000077106 00000 n 
+0000077339 00000 n 
+0000077376 00000 n 
+0000077504 00000 n 
+0000077630 00000 n 
+0000077755 00000 n 
+0000077882 00000 n 
+0000078003 00000 n 
+0000080702 00000 n 
+0000083580 00000 n 
+0000083833 00000 n 
+0000083870 00000 n 
+0000083998 00000 n 
+0000084021 00000 n 
+0000084137 00000 n 
+0000084253 00000 n 
+0000084369 00000 n 
+0000084485 00000 n 
+0000084601 00000 n 
+0000084717 00000 n 
+0000084833 00000 n 
+0000084949 00000 n 
+0000085065 00000 n 
+0000085181 00000 n 
+0000085297 00000 n 
+0000085413 00000 n 
+0000085529 00000 n 
+0000088228 00000 n 
+0000089163 00000 n 
+0000089477 00000 n 
+0000089848 00000 n 
+0000090368 00000 n 
+0000090878 00000 n 
+0000091275 00000 n 
+0000091694 00000 n 
+0000092028 00000 n 
+0000092428 00000 n 
+0000092742 00000 n 
+0000093079 00000 n 
+0000093498 00000 n 
+0000519964 00000 n 
+0000531148 00000 n 
+0000530966 00000 n 
+0000530859 00000 n 
+0000531086 00000 n 
+0000534209 00000 n 
+0000534359 00000 n 
+0000534512 00000 n 
+0000534665 00000 n 
+0000534823 00000 n 
+0000534980 00000 n 
+0000535138 00000 n 
+0000535296 00000 n 
+0000535449 00000 n 
+0000535607 00000 n 
+0000535765 00000 n 
+0000535922 00000 n 
+0000536080 00000 n 
+0000536229 00000 n 
+0000536382 00000 n 
+0000536535 00000 n 
+0000536687 00000 n 
+0000536840 00000 n 
+0000536993 00000 n 
+0000537146 00000 n 
+0000537299 00000 n 
+0000537451 00000 n 
+0000537603 00000 n 
+0000537757 00000 n 
+0000537907 00000 n 
+0000538060 00000 n 
+0000538213 00000 n 
+0000538365 00000 n 
+0000538522 00000 n 
+0000538679 00000 n 
+0000538836 00000 n 
+0000538994 00000 n 
+0000539145 00000 n 
+0000539298 00000 n 
+0000539456 00000 n 
+0000539614 00000 n 
+0000539772 00000 n 
+0000539929 00000 n 
+0000540078 00000 n 
+0000540228 00000 n 
+0000542344 00000 n 
+0000540507 00000 n 
+0000533757 00000 n 
+0000531296 00000 n 
+0000540384 00000 n 
+0000540446 00000 n 
+0000542502 00000 n 
+0000542655 00000 n 
+0000542813 00000 n 
+0000542971 00000 n 
+0000543122 00000 n 
+0000543280 00000 n 
+0000543438 00000 n 
+0000543591 00000 n 
+0000543746 00000 n 
+0000543904 00000 n 
+0000544057 00000 n 
+0000544215 00000 n 
+0000544435 00000 n 
+0000542108 00000 n 
+0000540740 00000 n 
+0000544373 00000 n 
+0000548017 00000 n 
+0000547292 00000 n 
+0000544655 00000 n 
+0000547412 00000 n 
+0000547533 00000 n 
+0000547594 00000 n 
+0000547714 00000 n 
+0000547774 00000 n 
+0000547835 00000 n 
+0000547896 00000 n 
+0000547957 00000 n 
+0000551712 00000 n 
+0000551911 00000 n 
+0000552110 00000 n 
+0000552310 00000 n 
+0000552994 00000 n 
+0000551548 00000 n 
+0000548250 00000 n 
+0000552508 00000 n 
+0000552630 00000 n 
+0001223037 00000 n 
+0001223517 00000 n 
+0000552690 00000 n 
+0000552811 00000 n 
+0001222249 00000 n 
+0000552872 00000 n 
+0000739367 00000 n 
+0000720357 00000 n 
+0000732696 00000 n 
+0000000520 00000 f 
+0000000521 00000 f 
+0000000522 00000 f 
+0000000524 00000 f 
+0000556383 00000 n 
+0000000537 00000 f 
+0000556583 00000 n 
+0000557088 00000 n 
+0000556235 00000 n 
+0000553266 00000 n 
+0000556782 00000 n 
+0000556844 00000 n 
+0001222392 00000 n 
+0001221960 00000 n 
+0000556905 00000 n 
+0000557027 00000 n 
+0001223784 00000 n 
+0000732382 00000 n 
+0000000538 00000 f 
+0000000539 00000 f 
+0000000540 00000 f 
+0000000541 00000 f 
+0000000542 00000 f 
+0000000543 00000 f 
+0000000544 00000 f 
+0000000545 00000 f 
+0000000546 00000 f 
+0000000547 00000 f 
+0000000548 00000 f 
+0000000549 00000 f 
+0000000550 00000 f 
+0000000551 00000 f 
+0000000552 00000 f 
+0000000553 00000 f 
+0000000554 00000 f 
+0000000953 00000 f 
+0000560932 00000 n 
+0000561163 00000 n 
+0000561396 00000 n 
+0000561629 00000 n 
+0000561860 00000 n 
+0000562092 00000 n 
+0000562558 00000 n 
+0000563021 00000 n 
+0000563252 00000 n 
+0000563484 00000 n 
+0000563682 00000 n 
+0000600935 00000 n 
+0000601334 00000 n 
+0000601533 00000 n 
+0000601733 00000 n 
+0000564487 00000 n 
+0000560696 00000 n 
+0000557360 00000 n 
+0000563880 00000 n 
+0000563942 00000 n 
+0000564003 00000 n 
+0000564124 00000 n 
+0000562325 00000 n 
+0000562791 00000 n 
+0000564185 00000 n 
+0000564307 00000 n 
+0000564426 00000 n 
+0000786114 00000 n 
+0000786052 00000 n 
+0000786177 00000 n 
+0000786240 00000 n 
+0000782982 00000 n 
+0000790441 00000 n 
+0000795469 00000 n 
+0000786303 00000 n 
+0000786365 00000 n 
+0000828449 00000 n 
+0000567044 00000 n 
+0000602174 00000 n 
+0000566872 00000 n 
+0000564759 00000 n 
+0000601931 00000 n 
+0000601135 00000 n 
+0000602053 00000 n 
+0000602114 00000 n 
+0000593413 00000 n 
+0000751793 00000 n 
+0000604909 00000 n 
+0000604484 00000 n 
+0000602462 00000 n 
+0000604604 00000 n 
+0000604726 00000 n 
+0000604848 00000 n 
+0000608524 00000 n 
+0000608697 00000 n 
+0000608921 00000 n 
+0000609102 00000 n 
+0000609306 00000 n 
+0000610062 00000 n 
+0000608352 00000 n 
+0000605168 00000 n 
+0000609514 00000 n 
+0000609636 00000 n 
+0000609697 00000 n 
+0001223217 00000 n 
+0000609819 00000 n 
+0000609880 00000 n 
+0000609941 00000 n 
+0000614197 00000 n 
+0000614639 00000 n 
+0000614057 00000 n 
+0000610322 00000 n 
+0000614396 00000 n 
+0000614458 00000 n 
+0000614580 00000 n 
+0000802894 00000 n 
+0000618004 00000 n 
+0000618325 00000 n 
+0000617864 00000 n 
+0000614899 00000 n 
+0000618203 00000 n 
+0001223902 00000 n 
+0000621438 00000 n 
+0000621698 00000 n 
+0000621298 00000 n 
+0000618572 00000 n 
+0000621636 00000 n 
+0000766291 00000 n 
+0000625635 00000 n 
+0000626261 00000 n 
+0000625495 00000 n 
+0000621932 00000 n 
+0000625835 00000 n 
+0001221815 00000 n 
+0000625897 00000 n 
+0000625958 00000 n 
+0000626019 00000 n 
+0000626080 00000 n 
+0000626201 00000 n 
+0000803019 00000 n 
+0000630011 00000 n 
+0000630189 00000 n 
+0000630367 00000 n 
+0000630566 00000 n 
+0000630766 00000 n 
+0000630965 00000 n 
+0000631199 00000 n 
+0000631412 00000 n 
+0000631646 00000 n 
+0000631858 00000 n 
+0000632057 00000 n 
+0000632256 00000 n 
+0000632456 00000 n 
+0000632653 00000 n 
+0000632946 00000 n 
+0000629767 00000 n 
+0000626560 00000 n 
+0000632824 00000 n 
+0000832854 00000 n 
+0000795718 00000 n 
+0000766479 00000 n 
+0000837997 00000 n 
+0000837872 00000 n 
+0000803144 00000 n 
+0000636683 00000 n 
+0000640004 00000 n 
+0000637065 00000 n 
+0000636543 00000 n 
+0000633193 00000 n 
+0000636882 00000 n 
+0000636944 00000 n 
+0000640628 00000 n 
+0000639864 00000 n 
+0000637312 00000 n 
+0000640204 00000 n 
+0000640266 00000 n 
+0000640387 00000 n 
+0000640507 00000 n 
+0000643593 00000 n 
+0000643793 00000 n 
+0000643993 00000 n 
+0000644193 00000 n 
+0000644393 00000 n 
+0000644593 00000 n 
+0000644793 00000 n 
+0000644993 00000 n 
+0000645225 00000 n 
+0000648982 00000 n 
+0000646215 00000 n 
+0000643389 00000 n 
+0000640875 00000 n 
+0000645421 00000 n 
+0000645543 00000 n 
+0000645604 00000 n 
+0000645726 00000 n 
+0000645848 00000 n 
+0000645970 00000 n 
+0000646093 00000 n 
+0000646154 00000 n 
+0001224020 00000 n 
+0000707625 00000 n 
+0000766542 00000 n 
+0000649182 00000 n 
+0000649381 00000 n 
+0000649580 00000 n 
+0000649780 00000 n 
+0000649980 00000 n 
+0000650378 00000 n 
+0000650577 00000 n 
+0000650810 00000 n 
+0000651010 00000 n 
+0000651244 00000 n 
+0000651443 00000 n 
+0000651643 00000 n 
+0000654761 00000 n 
+0000652180 00000 n 
+0000648738 00000 n 
+0000646487 00000 n 
+0000651874 00000 n 
+0000650180 00000 n 
+0000651936 00000 n 
+0000651997 00000 n 
+0000652058 00000 n 
+0000652119 00000 n 
+0000772817 00000 n 
+0000766604 00000 n 
+0000777447 00000 n 
+0000766667 00000 n 
+0000654961 00000 n 
+0000655195 00000 n 
+0000655428 00000 n 
+0000655627 00000 n 
+0000655825 00000 n 
+0000656057 00000 n 
+0000656256 00000 n 
+0000656455 00000 n 
+0000656852 00000 n 
+0000657085 00000 n 
+0000657285 00000 n 
+0000657484 00000 n 
+0000657882 00000 n 
+0000661134 00000 n 
+0000658540 00000 n 
+0000654501 00000 n 
+0000652466 00000 n 
+0000658112 00000 n 
+0000658174 00000 n 
+0000658235 00000 n 
+0000656653 00000 n 
+0000658296 00000 n 
+0000658357 00000 n 
+0000657683 00000 n 
+0000658418 00000 n 
+0000658479 00000 n 
+0000766729 00000 n 
+0000782794 00000 n 
+0000766791 00000 n 
+0000766852 00000 n 
+0000661334 00000 n 
+0000661533 00000 n 
+0000661766 00000 n 
+0000661998 00000 n 
+0000662197 00000 n 
+0000662395 00000 n 
+0000662566 00000 n 
+0000662799 00000 n 
+0000663031 00000 n 
+0000663230 00000 n 
+0000663428 00000 n 
+0000663599 00000 n 
+0000663830 00000 n 
+0000667239 00000 n 
+0000664576 00000 n 
+0000660890 00000 n 
+0000658826 00000 n 
+0000664028 00000 n 
+0000664090 00000 n 
+0000664212 00000 n 
+0000664273 00000 n 
+0000664334 00000 n 
+0000664394 00000 n 
+0000664455 00000 n 
+0000664515 00000 n 
+0000766914 00000 n 
+0000766977 00000 n 
+0000767040 00000 n 
+0000667471 00000 n 
+0000667704 00000 n 
+0000667902 00000 n 
+0000668102 00000 n 
+0000668335 00000 n 
+0000668568 00000 n 
+0000668765 00000 n 
+0000668964 00000 n 
+0000669135 00000 n 
+0000669368 00000 n 
+0000669568 00000 n 
+0000669767 00000 n 
+0000669962 00000 n 
+0000670193 00000 n 
+0000670818 00000 n 
+0000666987 00000 n 
+0000664836 00000 n 
+0000670390 00000 n 
+0000670452 00000 n 
+0000670513 00000 n 
+0000670574 00000 n 
+0000670635 00000 n 
+0000670696 00000 n 
+0000670757 00000 n 
+0000767103 00000 n 
+0000767166 00000 n 
+0000767228 00000 n 
+0000673397 00000 n 
+0000673568 00000 n 
+0000673801 00000 n 
+0000674034 00000 n 
+0000674267 00000 n 
+0000674467 00000 n 
+0000674666 00000 n 
+0000674866 00000 n 
+0000675064 00000 n 
+0000678589 00000 n 
+0000675747 00000 n 
+0000673193 00000 n 
+0000671104 00000 n 
+0000675261 00000 n 
+0000675323 00000 n 
+0000675384 00000 n 
+0000675445 00000 n 
+0000675506 00000 n 
+0000675566 00000 n 
+0000675627 00000 n 
+0000675688 00000 n 
+0000767289 00000 n 
+0000771695 00000 n 
+0000771757 00000 n 
+0000678822 00000 n 
+0000679021 00000 n 
+0000679221 00000 n 
+0000679454 00000 n 
+0000679653 00000 n 
+0000679853 00000 n 
+0000680251 00000 n 
+0000680484 00000 n 
+0000680684 00000 n 
+0000680917 00000 n 
+0000681116 00000 n 
+0000681514 00000 n 
+0000684837 00000 n 
+0000682257 00000 n 
+0000678337 00000 n 
+0000676007 00000 n 
+0000681711 00000 n 
+0000681773 00000 n 
+0000680053 00000 n 
+0000681834 00000 n 
+0000681895 00000 n 
+0000681956 00000 n 
+0000682078 00000 n 
+0000682138 00000 n 
+0000681316 00000 n 
+0000682198 00000 n 
+0001224138 00000 n 
+0000771882 00000 n 
+0000771819 00000 n 
+0000772070 00000 n 
+0000744768 00000 n 
+0000726566 00000 n 
+0000685070 00000 n 
+0000685269 00000 n 
+0000685668 00000 n 
+0000685901 00000 n 
+0000686101 00000 n 
+0000686500 00000 n 
+0000686733 00000 n 
+0000686966 00000 n 
+0000687166 00000 n 
+0000687366 00000 n 
+0000687566 00000 n 
+0000687765 00000 n 
+0000687962 00000 n 
+0000691433 00000 n 
+0000691633 00000 n 
+0000688646 00000 n 
+0000684577 00000 n 
+0000682543 00000 n 
+0000688157 00000 n 
+0000688219 00000 n 
+0000685469 00000 n 
+0000688280 00000 n 
+0000688341 00000 n 
+0000686301 00000 n 
+0000688402 00000 n 
+0000688463 00000 n 
+0000688524 00000 n 
+0000688585 00000 n 
+0000772132 00000 n 
+0000772192 00000 n 
+0000772255 00000 n 
+0000772318 00000 n 
+0000714735 00000 n 
+0000691831 00000 n 
+0000692064 00000 n 
+0000692263 00000 n 
+0000692462 00000 n 
+0000692861 00000 n 
+0000693092 00000 n 
+0000693291 00000 n 
+0000693491 00000 n 
+0000693724 00000 n 
+0000693924 00000 n 
+0000694826 00000 n 
+0000691197 00000 n 
+0000688918 00000 n 
+0000694155 00000 n 
+0000694217 00000 n 
+0000694278 00000 n 
+0000692662 00000 n 
+0000694339 00000 n 
+0000694400 00000 n 
+0000694461 00000 n 
+0000694582 00000 n 
+0000694643 00000 n 
+0000694704 00000 n 
+0000694765 00000 n 
+0000772380 00000 n 
+0000772442 00000 n 
+0000772631 00000 n 
+0000772755 00000 n 
+0000696607 00000 n 
+0000697023 00000 n 
+0000696467 00000 n 
+0000695098 00000 n 
+0000696840 00000 n 
+0000696902 00000 n 
+0000696963 00000 n 
+0000772693 00000 n 
+0000000954 00000 f 
+0000000955 00000 f 
+0000000956 00000 f 
+0000000957 00000 f 
+0000000958 00000 f 
+0000000962 00000 f 
+0000700360 00000 n 
+0000700560 00000 n 
+0000700760 00000 n 
+0000000963 00000 f 
+0000000965 00000 f 
+0000700960 00000 n 
+0000000966 00000 f 
+0000000967 00000 f 
+0000000968 00000 f 
+0000000971 00000 f 
+0000701159 00000 n 
+0000701359 00000 n 
+0000000972 00000 f 
+0000001183 00000 f 
+0000701559 00000 n 
+0000702429 00000 n 
+0000700172 00000 n 
+0000697269 00000 n 
+0000701758 00000 n 
+0000701881 00000 n 
+0000702063 00000 n 
+0000702124 00000 n 
+0000702185 00000 n 
+0000702246 00000 n 
+0000702307 00000 n 
+0000702368 00000 n 
+0000706380 00000 n 
+0000706579 00000 n 
+0000706742 00000 n 
+0000706903 00000 n 
+0000707103 00000 n 
+0000707303 00000 n 
+0000707807 00000 n 
+0000706200 00000 n 
+0000702675 00000 n 
+0000707502 00000 n 
+0000707686 00000 n 
+0001222536 00000 n 
+0001223362 00000 n 
+0000707747 00000 n 
+0000818697 00000 n 
+0000823443 00000 n 
+0000710815 00000 n 
+0000710975 00000 n 
+0000711137 00000 n 
+0000711337 00000 n 
+0000711534 00000 n 
+0000711768 00000 n 
+0000711960 00000 n 
+0000712157 00000 n 
+0000712353 00000 n 
+0000712586 00000 n 
+0000712782 00000 n 
+0000712979 00000 n 
+0000713176 00000 n 
+0000713411 00000 n 
+0000713607 00000 n 
+0000713804 00000 n 
+0000714003 00000 n 
+0000714237 00000 n 
+0000714471 00000 n 
+0000714860 00000 n 
+0000710508 00000 n 
+0000708108 00000 n 
+0000714671 00000 n 
+0000714797 00000 n 
+0001224256 00000 n 
+0000819007 00000 n 
+0000777510 00000 n 
+0000823066 00000 n 
+0000823317 00000 n 
+0000777383 00000 n 
+0000718227 00000 n 
+0000718427 00000 n 
+0000718628 00000 n 
+0000718829 00000 n 
+0000719029 00000 n 
+0000719230 00000 n 
+0000719430 00000 n 
+0000719631 00000 n 
+0000719830 00000 n 
+0000720030 00000 n 
+0000723912 00000 n 
+0000724311 00000 n 
+0000720481 00000 n 
+0000718001 00000 n 
+0000715149 00000 n 
+0000720230 00000 n 
+0000720294 00000 n 
+0000720418 00000 n 
+0000795843 00000 n 
+0000724512 00000 n 
+0000724713 00000 n 
+0000724912 00000 n 
+0000725113 00000 n 
+0000725314 00000 n 
+0000725511 00000 n 
+0000725712 00000 n 
+0000725911 00000 n 
+0000726111 00000 n 
+0000726276 00000 n 
+0000726754 00000 n 
+0000723659 00000 n 
+0000720770 00000 n 
+0000726439 00000 n 
+0000724113 00000 n 
+0000726503 00000 n 
+0000726628 00000 n 
+0000726691 00000 n 
+0000795970 00000 n 
+0000838186 00000 n 
+0000729727 00000 n 
+0000729890 00000 n 
+0000730089 00000 n 
+0000730289 00000 n 
+0000730489 00000 n 
+0000730688 00000 n 
+0000730888 00000 n 
+0000731088 00000 n 
+0000731288 00000 n 
+0000731486 00000 n 
+0000731686 00000 n 
+0000731886 00000 n 
+0000732120 00000 n 
+0000736697 00000 n 
+0000732820 00000 n 
+0000729474 00000 n 
+0000727069 00000 n 
+0000732318 00000 n 
+0000732444 00000 n 
+0000732507 00000 n 
+0000732570 00000 n 
+0000732633 00000 n 
+0000732757 00000 n 
+0000840186 00000 n 
+0000840438 00000 n 
+0000840312 00000 n 
+0000840564 00000 n 
+0000736868 00000 n 
+0000737067 00000 n 
+0000737267 00000 n 
+0000737665 00000 n 
+0000737863 00000 n 
+0000738034 00000 n 
+0000738235 00000 n 
+0000738435 00000 n 
+0000738640 00000 n 
+0000738840 00000 n 
+0000739040 00000 n 
+0000739555 00000 n 
+0000736444 00000 n 
+0000733121 00000 n 
+0000739240 00000 n 
+0000737468 00000 n 
+0000739304 00000 n 
+0000739429 00000 n 
+0000739492 00000 n 
+0000810535 00000 n 
+0000813487 00000 n 
+0000742904 00000 n 
+0000743104 00000 n 
+0000743304 00000 n 
+0000743505 00000 n 
+0000743704 00000 n 
+0000743904 00000 n 
+0000744104 00000 n 
+0000744304 00000 n 
+0000744505 00000 n 
+0000744956 00000 n 
+0000742687 00000 n 
+0000739883 00000 n 
+0000744704 00000 n 
+0000744830 00000 n 
+0000744893 00000 n 
+0000748770 00000 n 
+0000748969 00000 n 
+0000749170 00000 n 
+0000749371 00000 n 
+0000749571 00000 n 
+0000749770 00000 n 
+0000749969 00000 n 
+0000750148 00000 n 
+0000750327 00000 n 
+0000750526 00000 n 
+0000750727 00000 n 
+0000750928 00000 n 
+0000751128 00000 n 
+0000751328 00000 n 
+0000751529 00000 n 
+0000751917 00000 n 
+0000748499 00000 n 
+0000745245 00000 n 
+0000751729 00000 n 
+0000751854 00000 n 
+0001224381 00000 n 
+0000755367 00000 n 
+0000755568 00000 n 
+0000755769 00000 n 
+0000755946 00000 n 
+0000756146 00000 n 
+0000756345 00000 n 
+0000756523 00000 n 
+0000756737 00000 n 
+0000756972 00000 n 
+0000757186 00000 n 
+0000757387 00000 n 
+0000757601 00000 n 
+0000757836 00000 n 
+0000758050 00000 n 
+0000758251 00000 n 
+0000758464 00000 n 
+0000758698 00000 n 
+0000758912 00000 n 
+0000759113 00000 n 
+0000759292 00000 n 
+0000759492 00000 n 
+0000759692 00000 n 
+0000763360 00000 n 
+0000760017 00000 n 
+0000755033 00000 n 
+0000752206 00000 n 
+0000759890 00000 n 
+0000759954 00000 n 
+0000802767 00000 n 
+0000001184 00000 f 
+0000001185 00000 f 
+0000001186 00000 f 
+0000001187 00000 f 
+0000001188 00000 f 
+0000001189 00000 f 
+0000001190 00000 f 
+0000001191 00000 f 
+0000001192 00000 f 
+0000001193 00000 f 
+0000001194 00000 f 
+0000001195 00000 f 
+0000001196 00000 f 
+0000001197 00000 f 
+0000001198 00000 f 
+0000001199 00000 f 
+0000001200 00000 f 
+0000001201 00000 f 
+0000001202 00000 f 
+0000001203 00000 f 
+0000001204 00000 f 
+0000001205 00000 f 
+0000001206 00000 f 
+0000001207 00000 f 
+0000001208 00000 f 
+0000001209 00000 f 
+0000001210 00000 f 
+0000001211 00000 f 
+0000001212 00000 f 
+0000001213 00000 f 
+0000001214 00000 f 
+0000001251 00000 f 
+0000763560 00000 n 
+0000763759 00000 n 
+0000763960 00000 n 
+0000764161 00000 n 
+0000764362 00000 n 
+0000764563 00000 n 
+0000764764 00000 n 
+0000764964 00000 n 
+0000765164 00000 n 
+0000765364 00000 n 
+0000765563 00000 n 
+0000765764 00000 n 
+0000765965 00000 n 
+0000771029 00000 n 
+0000771230 00000 n 
+0000771431 00000 n 
+0000767351 00000 n 
+0000763098 00000 n 
+0000760278 00000 n 
+0000766165 00000 n 
+0000766353 00000 n 
+0000766416 00000 n 
+0000775576 00000 n 
+0000772877 00000 n 
+0000770866 00000 n 
+0000767612 00000 n 
+0000771631 00000 n 
+0000771943 00000 n 
+0000772006 00000 n 
+0000772504 00000 n 
+0000772567 00000 n 
+0000775776 00000 n 
+0000775974 00000 n 
+0000776188 00000 n 
+0000776388 00000 n 
+0000776566 00000 n 
+0000001252 00000 f 
+0000001253 00000 f 
+0000001254 00000 f 
+0000001255 00000 f 
+0000001256 00000 f 
+0000001257 00000 f 
+0000001258 00000 f 
+0000001259 00000 f 
+0000001260 00000 f 
+0000001279 00000 f 
+0000776728 00000 n 
+0000776929 00000 n 
+0000780543 00000 n 
+0000780778 00000 n 
+0000781248 00000 n 
+0000777574 00000 n 
+0000775368 00000 n 
+0000773137 00000 n 
+0000777129 00000 n 
+0000777193 00000 n 
+0000777256 00000 n 
+0000777319 00000 n 
+0000781449 00000 n 
+0000781649 00000 n 
+0000781847 00000 n 
+0000782061 00000 n 
+0000782261 00000 n 
+0000782439 00000 n 
+0000001280 00000 f 
+0000001281 00000 f 
+0000001282 00000 f 
+0000001283 00000 f 
+0000001284 00000 f 
+0000001285 00000 f 
+0000001286 00000 f 
+0000001287 00000 f 
+0000001288 00000 f 
+0000001289 00000 f 
+0000001290 00000 f 
+0000001291 00000 f 
+0000001292 00000 f 
+0000001293 00000 f 
+0000001294 00000 f 
+0000001295 00000 f 
+0000001296 00000 f 
+0000001297 00000 f 
+0000001298 00000 f 
+0000001499 00000 f 
+0000788969 00000 n 
+0000789204 00000 n 
+0000789439 00000 n 
+0000789672 00000 n 
+0000790142 00000 n 
+0000793162 00000 n 
+0000793397 00000 n 
+0000793631 00000 n 
+0000794100 00000 n 
+0000794335 00000 n 
+0000783045 00000 n 
+0000780317 00000 n 
+0000777822 00000 n 
+0000782603 00000 n 
+0000782667 00000 n 
+0000781013 00000 n 
+0000782731 00000 n 
+0000782856 00000 n 
+0000782919 00000 n 
+0000828763 00000 n 
+0000786428 00000 n 
+0000785674 00000 n 
+0000783319 00000 n 
+0000785798 00000 n 
+0000785862 00000 n 
+0000785926 00000 n 
+0000785989 00000 n 
+0001224506 00000 n 
+0000790503 00000 n 
+0000788779 00000 n 
+0000786649 00000 n 
+0000790377 00000 n 
+0000789907 00000 n 
+0000794803 00000 n 
+0000795003 00000 n 
+0000795204 00000 n 
+0000796286 00000 n 
+0000792936 00000 n 
+0000790777 00000 n 
+0000795405 00000 n 
+0000793865 00000 n 
+0000794569 00000 n 
+0000795531 00000 n 
+0000795594 00000 n 
+0000795780 00000 n 
+0000795907 00000 n 
+0000796034 00000 n 
+0000796097 00000 n 
+0000796161 00000 n 
+0000796224 00000 n 
+0000798384 00000 n 
+0000798619 00000 n 
+0000798790 00000 n 
+0000799025 00000 n 
+0000799196 00000 n 
+0000799431 00000 n 
+0000799602 00000 n 
+0000799836 00000 n 
+0000800825 00000 n 
+0000798176 00000 n 
+0000796560 00000 n 
+0000800005 00000 n 
+0000800069 00000 n 
+0000800132 00000 n 
+0000800196 00000 n 
+0000800259 00000 n 
+0000800323 00000 n 
+0001222104 00000 n 
+0000800386 00000 n 
+0000800449 00000 n 
+0000800512 00000 n 
+0000800575 00000 n 
+0000800638 00000 n 
+0000800701 00000 n 
+0000800764 00000 n 
+0000803397 00000 n 
+0000802516 00000 n 
+0000801088 00000 n 
+0000802640 00000 n 
+0000802704 00000 n 
+0000802831 00000 n 
+0000802956 00000 n 
+0000803081 00000 n 
+0000803207 00000 n 
+0000803270 00000 n 
+0000803334 00000 n 
+0000803941 00000 n 
+0000803753 00000 n 
+0000803645 00000 n 
+0000803877 00000 n 
+0000806537 00000 n 
+0000806742 00000 n 
+0000806947 00000 n 
+0000807148 00000 n 
+0000807353 00000 n 
+0000807557 00000 n 
+0000807762 00000 n 
+0000807967 00000 n 
+0000808172 00000 n 
+0000808377 00000 n 
+0000808582 00000 n 
+0000808782 00000 n 
+0000808988 00000 n 
+0000809191 00000 n 
+0000809397 00000 n 
+0000809601 00000 n 
+0000809799 00000 n 
+0000810205 00000 n 
+0000810785 00000 n 
+0000806230 00000 n 
+0000804090 00000 n 
+0000810409 00000 n 
+0000810660 00000 n 
+0000810002 00000 n 
+0001224631 00000 n 
+0000813739 00000 n 
+0000813109 00000 n 
+0000813235 00000 n 
+0000813865 00000 n 
+0000813613 00000 n 
+0000813991 00000 n 
+0000813361 00000 n 
+0000818573 00000 n 
+0000812782 00000 n 
+0000814053 00000 n 
+0000812637 00000 n 
+0000811071 00000 n 
+0000812983 00000 n 
+0000813172 00000 n 
+0000813298 00000 n 
+0000813424 00000 n 
+0000813550 00000 n 
+0000813676 00000 n 
+0000813802 00000 n 
+0000813928 00000 n 
+0000816663 00000 n 
+0000816860 00000 n 
+0000817055 00000 n 
+0000817252 00000 n 
+0000817449 00000 n 
+0000817650 00000 n 
+0000817848 00000 n 
+0000818045 00000 n 
+0000818246 00000 n 
+0000819133 00000 n 
+0000816446 00000 n 
+0000814314 00000 n 
+0000818446 00000 n 
+0000818510 00000 n 
+0000818636 00000 n 
+0000818821 00000 n 
+0000819070 00000 n 
+0000823191 00000 n 
+0000821418 00000 n 
+0000821618 00000 n 
+0000821817 00000 n 
+0000822015 00000 n 
+0000822211 00000 n 
+0000822410 00000 n 
+0000822608 00000 n 
+0000822806 00000 n 
+0000827464 00000 n 
+0000827663 00000 n 
+0000827862 00000 n 
+0000823632 00000 n 
+0000821210 00000 n 
+0000819407 00000 n 
+0000823002 00000 n 
+0000823129 00000 n 
+0000823254 00000 n 
+0000823380 00000 n 
+0000823569 00000 n 
+0000832729 00000 n 
+0000832477 00000 n 
+0000832603 00000 n 
+0000828062 00000 n 
+0000828824 00000 n 
+0000827292 00000 n 
+0000823906 00000 n 
+0000828261 00000 n 
+0000828511 00000 n 
+0000828574 00000 n 
+0000828637 00000 n 
+0000828700 00000 n 
+0000831129 00000 n 
+0000831328 00000 n 
+0000831527 00000 n 
+0000831726 00000 n 
+0000831939 00000 n 
+0000832152 00000 n 
+0000833103 00000 n 
+0000830939 00000 n 
+0000829085 00000 n 
+0000832350 00000 n 
+0000832414 00000 n 
+0000832540 00000 n 
+0000832666 00000 n 
+0000832791 00000 n 
+0000832978 00000 n 
+0000835754 00000 n 
+0000001500 00000 f 
+0000001501 00000 f 
+0000001502 00000 f 
+0000001503 00000 f 
+0000001504 00000 f 
+0000001505 00000 f 
+0000001506 00000 f 
+0000001508 00000 f 
+0000835954 00000 n 
+0000000000 00000 f 
+0000836154 00000 n 
+0000836354 00000 n 
+0000836555 00000 n 
+0000836755 00000 n 
+0000836954 00000 n 
+0000837151 00000 n 
+0000837350 00000 n 
+0000837548 00000 n 
+0000838436 00000 n 
+0000835528 00000 n 
+0000833377 00000 n 
+0000837746 00000 n 
+0000837934 00000 n 
+0000838060 00000 n 
+0000838123 00000 n 
+0000838311 00000 n 
+0001224756 00000 n 
+0000840690 00000 n 
+0000839936 00000 n 
+0000838710 00000 n 
+0000840060 00000 n 
+0000840249 00000 n 
+0000840375 00000 n 
+0000840501 00000 n 
+0000840627 00000 n 
+0000841031 00000 n 
+0000841057 00000 n 
+0000841393 00000 n 
+0000841419 00000 n 
+0000841455 00000 n 
+0000841843 00000 n 
+0000841869 00000 n 
+0000841896 00000 n 
+0000841920 00000 n 
+0001221385 00000 n 
+0000841944 00000 n 
+0000842445 00000 n 
+0000842954 00000 n 
+0000843452 00000 n 
+0000850592 00000 n 
+0000850827 00000 n 
+0000857844 00000 n 
+0000858080 00000 n 
+0000865091 00000 n 
+0000865317 00000 n 
+0000872428 00000 n 
+0000872663 00000 n 
+0000879720 00000 n 
+0000879951 00000 n 
+0000887064 00000 n 
+0000887298 00000 n 
+0001001310 00000 n 
+0001001773 00000 n 
+0001107984 00000 n 
+0001108559 00000 n 
+0001203382 00000 n 
+0001203811 00000 n 
+0001205495 00000 n 
+0001205723 00000 n 
+0001216320 00000 n 
+0001216904 00000 n 
+0001221093 00000 n 
+0001224845 00000 n 
+0001224966 00000 n 
+0001225074 00000 n 
+0001225147 00000 n 
+0001230133 00000 n 
+0001230302 00000 n 
+0001230487 00000 n 
+0001230783 00000 n 
+0001231058 00000 n 
+0001231422 00000 n 
+0001231884 00000 n 
+0001232320 00000 n 
+0001232766 00000 n 
+0001233226 00000 n 
+0001233473 00000 n 
+0001234046 00000 n 
+0001234619 00000 n 
+0001235192 00000 n 
+0001235768 00000 n 
+0001236409 00000 n 
+0001237253 00000 n 
+0001238097 00000 n 
+0001238942 00000 n 
+0001239785 00000 n 
+0001240628 00000 n 
+0001241475 00000 n 
+0001242321 00000 n 
+0001243166 00000 n 
+0001243736 00000 n 
+0001244079 00000 n 
+0001244353 00000 n 
+0001244524 00000 n 
+0001244694 00000 n 
+0001244865 00000 n 
+0001245038 00000 n 
+0001245215 00000 n 
+0001245389 00000 n 
+0001245563 00000 n 
+0001245740 00000 n 
+0001245916 00000 n 
+0001246122 00000 n 
+0001246317 00000 n 
+0001246514 00000 n 
+0001246711 00000 n 
+0001246912 00000 n 
+0001247150 00000 n 
+0001247767 00000 n 
+0001248317 00000 n 
+0001248841 00000 n 
+0001249343 00000 n 
+0001249788 00000 n 
+0001250025 00000 n 
+0001250268 00000 n 
+0001250511 00000 n 
+0001250754 00000 n 
+0001251037 00000 n 
+0001251322 00000 n 
+0001251605 00000 n 
+0001251888 00000 n 
+0001252174 00000 n 
+0001252463 00000 n 
+0001252754 00000 n 
+0001253051 00000 n 
+0001253340 00000 n 
+0001253629 00000 n 
+0001253918 00000 n 
+0001254207 00000 n 
+0001254496 00000 n 
+0001254721 00000 n 
+0001254919 00000 n 
+0001255111 00000 n 
+0001255304 00000 n 
+0001255413 00000 n 
+0001255564 00000 n 
+0001255762 00000 n 
+0001256012 00000 n 
+0001256232 00000 n 
+0001256362 00000 n 
+0001256481 00000 n 
+0001256655 00000 n 
+0001256835 00000 n 
+0001256974 00000 n 
+0001257118 00000 n 
+0001257250 00000 n 
+0001257334 00000 n 
+0001257455 00000 n 
+0001257576 00000 n 
+0001257660 00000 n 
+0001257700 00000 n 
+0001257832 00000 n 
+trailer
+<< /Size 1661
+/Root 1659 0 R
+/Info 1660 0 R
+/ID [<B4634E215C17C010A811AAA7A5D8BF57> <B4634E215C17C010A811AAA7A5D8BF57>] >>
+startxref
+1258108
+%%EOF
diff --git a/lib/vendor/Bosch/BSEC/meson.build b/lib/vendor/Bosch/BSEC/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..f2181e89f5396e93e2b2221523b3455d344244f4
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/meson.build
@@ -0,0 +1,27 @@
+# libalgobsec.a
+cc = meson.get_compiler('c')
+libalgobsec = cc.find_library('libalgobsec', dirs: meson.current_source_dir() + '/algo/normal_version/bin/gcc/Cortex_M4')
+
+includes = include_directories(
+  'examples/bsec_iot_example/',
+  'algo/normal_version/inc/',
+  'config/'
+)
+
+sources = files(
+  'examples/bsec_iot_example/bsec_integration.c',
+#  'config/generic_18v_3s_28d/bsec_serialized_configurations_iaq.c'
+)
+
+lib = static_library(
+  'bsec',
+  sources,
+  dependencies: [bme680, libalgobsec],
+  include_directories: includes,
+)
+
+bsec = declare_dependency(
+  include_directories: includes,
+  link_with: lib,
+  dependencies: libalgobsec,
+)
diff --git a/lib/vendor/Bosch/BSEC/readme_API.txt b/lib/vendor/Bosch/BSEC/readme_API.txt
new file mode 100644
index 0000000000000000000000000000000000000000..07c2e5ebd2f16c60bea5ab6cd252bdbf5c4faf21
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/readme_API.txt
@@ -0,0 +1,4 @@
+API link
+https://github.com/BoschSensortec/BME680_driver/releases
+
+please use version v3.5.10
\ No newline at end of file
diff --git a/lib/vendor/Bosch/BSEC/readme_BSEC_In_Arduino.txt b/lib/vendor/Bosch/BSEC/readme_BSEC_In_Arduino.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e3aeac8ae62fa73e4ceaa560e9fd9ae4432e05ba
--- /dev/null
+++ b/lib/vendor/Bosch/BSEC/readme_BSEC_In_Arduino.txt
@@ -0,0 +1,2 @@
+please refer to github 
+https://github.com/BoschSensortec/BSEC-Arduino-library
\ No newline at end of file
diff --git a/pycardium/modules/py/bme680.py b/pycardium/modules/py/bme680.py
index bbb6481de9bb0cf780fce35ca161cea8ccaf077b..b4999f03a4185a6d8f17fa33dc8253b7049e3d5b 100644
--- a/pycardium/modules/py/bme680.py
+++ b/pycardium/modules/py/bme680.py
@@ -8,6 +8,19 @@ Bme680Data = ucollections.namedtuple(
     "Bme680Data", ["temperature", "humidity", "pressure", "gas_resistance"]
 )
 
+BSECData = ucollections.namedtuple(
+    "BSECData",
+    [
+        "temperature",
+        "humidity",
+        "pressure",
+        "gas_resistance",
+        "iaq",
+        "iaq_accuracy",
+        "eco2",
+    ],
+)
+
 
 class Bme680:
     """
@@ -58,6 +71,16 @@ class Bme680:
         - ``pressure``: Barometric pressure in *hPa*
         - ``gas_resistance``: Gas resistance in *Ω*
 
+        If the Bosch BSEC library is enabled in :ref:`card10_cfg`, the
+        following additional fields will be returned:
+
+        - ``iaq``: Indoor air quality indication
+        - ``iaq_accuracy``: Accuracy of indoor air quality
+        - ``eco2``: Equivalent CO2 content in *ppm*
+
+        If BSEC is enabled an instance of `bme680.BSECData` will be returned.
+        If BSEC is not enabled an instance of `bme680.Bme680Data` will be returned.
+
         **Example**:
 
         .. code-block:: python
@@ -70,7 +93,11 @@ class Bme680:
                 print("T: {}".format(data.temperature))
                 print("H: {}".format(data.humidity))
         """
-        return Bme680Data(*sys_bme680.get_data())
+
+        try:
+            return BSECData(*sys_bme680.bsec_get_data())
+        except:
+            return Bme680Data(*sys_bme680.get_data())
 
     def close(self):
         """
@@ -132,3 +159,59 @@ class Bme680:
             print(str(environment.gas_resistance()))
         """
         return self.get_data().gas_resistance
+
+    def iaq(self):
+        """
+        Retrieve indoor air quality as defined by the Bosch BSEC library.
+
+        BSEC needs to be enable in :ref:`card10_cfg`. Otherwise this method
+        will raise an ``OSError`` exception.
+
+        **Example**:
+
+        .. code-block:: python
+
+            environment = bme680.Bme680()
+            print(str(environment.iaq()))
+
+        .. versionadded:: 1.17
+        """
+        return BSECData(*sys_bme680.bsec_get_data()).iaq
+
+    def iaq_accuracy(self):
+        """
+        Retrieve indoor air quality accuracy as defined by the Bosch BSEC library.
+
+        BSEC needs to be enable in :ref:`card10_cfg`. Otherwise this method
+        will raise an ``OSError`` exception.
+
+        **Example**:
+
+        .. code-block:: python
+
+            environment = bme680.Bme680()
+            print(str(environment.iaq_accuracy()))
+
+        .. versionadded:: 1.17
+        """
+
+        return BSECData(*sys_bme680.bsec_get_data()).iaq_accuracy
+
+    def eco2(self):
+        """
+        Retrieve equivalant CO2 as defined by the Bosch BSEC library.
+
+        BSEC needs to be enable in :ref:`card10_cfg`. Otherwise this method
+        will raise an ``OSError`` exception.
+
+        **Example**:
+
+        .. code-block:: python
+
+            environment = bme680.Bme680()
+            print(str(environment.eco2()))
+
+        .. versionadded:: 1.17
+        """
+
+        return BSECData(*sys_bme680.bsec_get_data()).eco2
diff --git a/pycardium/modules/py/config.py b/pycardium/modules/py/config.py
index 7fae24c9521ff0c41f65cbc6078417626c6a0d58..9f9927a525444811cbbf576e90141a98640d72c5 100644
--- a/pycardium/modules/py/config.py
+++ b/pycardium/modules/py/config.py
@@ -3,7 +3,7 @@ import sys_config
 
 def set_string(key, value):
     """
-    Write a string to the configuration file ``card10.cfg``.
+    Write a string to the configuration file :ref:`card10_cfg`.
 
     Both ``key`` and ``value`` must be strings or must be
     convertible to a string using the :py:func:`str()` function.
@@ -14,7 +14,7 @@ def set_string(key, value):
     Neither is allowed to contain the sub-string ``"execute_elf"``.
 
     The key/value pair is immediately written to the configuration
-    file (``card10.cfg``). After the file is written, configuration
+    file (:ref:`card10_cfg`). After the file is written, configuration
     is read again and the new value is available via :py:func:`config.get_string`.
 
     :param str key:     Name of the configuration option.
@@ -31,7 +31,7 @@ def set_string(key, value):
 
 def get_string(key):
     """
-    Read a string from the configuration file ``card10.cfg``.
+    Read a string from the configuration file :ref:`card10_cfg`.
 
     ``key`` must be a string or must be convertible to a string using
     the :py:func:`str()` function.
diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h
index f804089f3c66b8abf03e408b0b7deeedaf5228e0..2f144702f7cf929453306eb6e92a132c0394cb84 100644
--- a/pycardium/modules/qstrdefs.h
+++ b/pycardium/modules/qstrdefs.h
@@ -116,6 +116,7 @@ Q(sys_bme680)
 Q(init)
 Q(deinit)
 Q(get_data)
+Q(bsec_get_data)
 
 /* file */
 Q(__del__)
diff --git a/pycardium/modules/sys_bme680.c b/pycardium/modules/sys_bme680.c
index f6899c77c187c4d0d536fb41c14428d449bf62be..ef3abc9fa52816231ee7a40d068e3a57f95716d1 100644
--- a/pycardium/modules/sys_bme680.c
+++ b/pycardium/modules/sys_bme680.c
@@ -45,11 +45,34 @@ static mp_obj_t mp_bme680_get_data()
 }
 static MP_DEFINE_CONST_FUN_OBJ_0(bme680_get_data_obj, mp_bme680_get_data);
 
+static mp_obj_t mp_bsec_get_data()
+{
+	struct bsec_sensor_data data;
+	int ret = epic_bsec_read_sensors(&data);
+
+	if (ret < 0) {
+		mp_raise_OSError(-ret);
+	}
+
+	mp_obj_t values_list[] = {
+		mp_obj_new_float(data.temperature),
+		mp_obj_new_float(data.humidity),
+		mp_obj_new_float(data.pressure),
+		mp_obj_new_float(data.gas_resistance),
+		mp_obj_new_int(data.indoor_air_quality),
+		mp_obj_new_int(data.accuracy),
+		mp_obj_new_float(data.co2_equivalent),
+	};
+	return mp_obj_new_tuple(7, values_list);
+}
+static MP_DEFINE_CONST_FUN_OBJ_0(bsec_get_data_obj, mp_bsec_get_data);
+
 static const mp_rom_map_elem_t bme680_module_globals_table[] = {
 	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sys_bme680) },
 	{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&bme680_init_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&bme680_deinit_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_get_data), MP_ROM_PTR(&bme680_get_data_obj) },
+	{ MP_ROM_QSTR(MP_QSTR_bsec_get_data), MP_ROM_PTR(&bsec_get_data_obj) },
 };
 static MP_DEFINE_CONST_DICT(bme680_module_globals, bme680_module_globals_table);