# Simulation with TelSDK

TelSDK simulation enables development of applications using the SDK’s APIs on any Linux based hardware. The simulation is intended to enable software development, even before the actual Telematics hardware is available. Users can run the simulation on a Linux desktop if they choose.

The Simulation framework provides libraries which are compile time equivalent to the actual concrete libraries. The simulation libraries provide the behavior of APIs similar to the behavior seen on an actual Telematics device with the concrete libraries.

This allows applications to be developed, compiled, and executed using this framework. An application can link to the simulation libraries to use the functionality of the SDK APIs in this framework. The same application can then be recompiled for the target Telematics device without requiring any redevelopment or code changes.

The Simulation framework is designed to be configurable to tweak the behavior and the responses of the APIs. This provides flexibility to exercise the client code in multiple ways and scenarios.
Users can run the Simulation framework within a docker as well if desired.

![../_images/telsdk_overview.png](data:image/png;base64,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)

TelSDK On-Target Architecture

![../_images/telsdk_simulation_overview.png](data:image/png;base64,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)

TelSDK Simulation Architecture

## Components of the simulation framework

This section provides an overview of the components involved in the TelSDK simulation framework.

### SDK Simulation Libraries

The telematics simulation library runs in the user space of the Linux system. It interacts with the simulation server and other subsystems to provide various services like phone calls, SMS, etc. These services are exposed by the SDK through the same fixed public APIs that are available on all Telematics platforms that support SDK.

### Simulation Server

This is the main daemon that interacts with all the clients using the Simulation framework and provides the functionality for all the public APIs.

### Event Injector

Event injector allows the users to inject unsolicited events. It is a Linux based command-line utility that injects events into the simulation framework. For example: `telsdk_event_injector -f tel_card -e cardInfoChanged <slotId> <cardPower> <isNtnProfileActive>` could be triggered to change the card power state or Non-terrestrial networks(NTN) profile active status.

Syntax for injecting events: `telsdk_event_injector -f <filter/subsystem/manager> -e <event> <arguments>`

- `-f`: specifies the filter.
- `-e`: specifies the event that is triggered.

**To get help related to the events supported by TelSDK simulation**

- `telsdk_event_injector -h`: provides the list of subsystems for which events are available.
- `telsdk_event_injector -h <subsystem>`: provides the list of supported events in that particular subsystem.
- `telsdk_event_injector -h <subsystem> <event>`: provides detailed information ,i.e., the syntax and arguments for that event.

## Getting started with simulation

### Build steps

To build various components of the Simulation framework:

1. Fetch the source code

$ git clone https://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/snaptel-sdk.git -b telsdk.lnx.2.0.r11-rel telux
    $ cd telux/
    Copy to clipboard

2. Set up Build dependencies

#Install jsoncpp, cmake 3.15.3, gRPC.
    $ ./build_sim.sh setup <DESTINATION_FOLDER_ROOT_PATH>
    Copy to clipboard

3. Build simulation libraries, TelSDK sample apps, and test apps

$ ./build_sim.sh all <DESTINATION_FOLDER_ROOT_PATH>
    Copy to clipboard

**Note:** All the required TelSDK simulation include files, libs, and binaries get installed in &lt;DESTINATION\_FOLDER\_ROOT\_PATH&gt;

4. Export path

$ source <DESTINATION_FOLDER_ROOT_PATH>/bin/setup_simulation.sh
    Copy to clipboard

The above script would setup different environment variables like `PATH, LD_LIBRARY_PATH, PKG_CONFIG_PATH, CC, CXX`, etc.

5. To perform a build for user applications using cmake

$ cmake -DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=<DESTINATION_FOLDER_ROOT_PATH>/include -DCMAKE_INSTALL_PREFIX=<DESTINATION_FOLDER_ROOT_PATH> <APPS_CMAKE_PATH> && make install
    Copy to clipboard

### Run apps with docker

To run applications within the docker container:

1. Install docker

> 
> 
> $ sudo apt update
>     $ sudo apt install apt-transport-https ca-certificates curl software-properties-common
>     $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
>     $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
>     $ sudo apt update
>     $ sudo apt install docker-ce
>     Copy to clipboard
> 
> 
> Once the installation is complete, we recommend that users do the following to add a docker affiliation group for the current user. This will make it easier to develop and avoid typing the “sudo” prefix every time.
> 
> 
> $ sudo usermod -aG docker ${USER}
>     Copy to clipboard

2. Build docker image

> 
> 
> $ cd telux/
>     $ ./build_sim.sh docker-image <DESTINATION_FOLDER_ROOT_PATH>
>     Copy to clipboard

3. Run docker container

> 
> 
> $ docker run -ti --rm -h telsdk_simulation -v telsdk_volume:/data/telux telsdk-sim-image
>     Copy to clipboard

4. User application can be started or if users wish to run one of the SDK’s sample app or test app within the docker, then

> 
> 
> $ <APP_NAME>
>     Copy to clipboard
> 
> 
> **Note:**
> 
> 1. The docker image built will have user application binaries installed to the docker container `/usr/bin/` path.
> 2. When the docker container is started, it automatically starts the simulation server in the background.
> 3. The path `/data/telux/` holds all TelSDK simulation related data.
> 4. We are making use of the docker volume, to make this folder `/data/telux` persistent across multiple boots of the docker.
> 5. To reset the persistent data, delete the docker volume.

### Run apps without docker

To run applications without the docker container:

1. Export path, if not already done

> 
> 
> $ source <DESTINATION_FOLDER_ROOT_PATH>/bin/setup_simulation.sh
>     Copy to clipboard

2. Start simulation server in the background

> 
> 
> $ telsdk_simulation_server &
>     Copy to clipboard

3. User application can be started or if users wish to run one of the SDK’s sample app or test app, then

> 
> 
> $ <APP_NAME>
>     Copy to clipboard
> 
> 
> **Note:**
> 
> 1. In the host machine, application binaries are installed to the `<DESTINATION_FOLDER_ROOT_PATH>/bin/`
> 2. The path `<DESTINATION_FOLDER_ROOT_PATH>/data/telux/` holds all TelSDK simulation related data.
> 3. The path `<DESTINATION_FOLDER_ROOT_PATH>/etc/telux/tel.conf` holds TelSDK simulation configuration data.

### Build and run inside docker

To build various components of the Simulation framework inside docker

1. Fetch the source code

> 
> 
> $ git clone https://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/snaptel-sdk.git -b telsdk.lnx.2.0.r11-rel telux
>     $ cd telux/
>     Copy to clipboard

2. Build docker development image

> 
> 
> $ cd telux/
>     $ ./build_sim.sh docker-development-image <DESTINATION_FOLDER_ROOT_PATH>
>     
>     **Note:**
>     1. To build a Docker development image for an Ubuntu version different from the host machine, set the UBUNTU_VERSION variable before running the script.
>     2. For build inside the docker, the DESTINATION_FOLDER_ROOT_PATH can be set to the root directory. For example: ./build_sim.sh all /
>     3. If the host machine is running version 18.04, and Ubuntu 22.04 docker image needs to be created, set the UBUNTU_VERSION variable to 2204
>     4. Currently supported: Ubuntu 18.04, Ubuntu 20.04 and Ubunt 22.04
>     Copy to clipboard

3. Run docker container

> 
> 
> $ docker run -ti --rm -h telsdk_simulation -v <host-machine-dir>:<docker-contatiner-dir> telsdk-sim-image-develop
>     
>     For example:
>     docker run -ti --rm -h telsdk_simulation -v $PWD:/home/docker telsdk-sim-image-develop
>     Copy to clipboard

4. Set up build dependencies

#Install jsoncpp, cmake 3.15.3, gRPC.
    $ ./build_sim.sh setup <DESTINATION_FOLDER_ROOT_PATH>
    Copy to clipboard

5. Build simulation libraries, TelSDK sample apps, and test apps

$ ./build_sim.sh all <DESTINATION_FOLDER_ROOT_PATH>
    Copy to clipboard

**Note:** All the required TelSDK simulation include files, libs, and binaries get installed in &lt;DESTINATION\_FOLDER\_ROOT\_PATH&gt;

6. Export path

$ source <DESTINATION_FOLDER_ROOT_PATH>/bin/setup_simulation.sh
    Copy to clipboard

The above script would setup different environment variables like `PATH, LD_LIBRARY_PATH, PKG_CONFIG_PATH, CC, CXX`, etc.

7. To perform a build for user applications using cmake

$ cmake -DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=<DESTINATION_FOLDER_ROOT_PATH>/include -DCMAKE_INSTALL_PREFIX=<DESTINATION_FOLDER_ROOT_PATH> <APPS_CMAKE_PATH> && make install
    Copy to clipboard

To run the application inside docker:

1. Export path, if not already done

> 
> 
> $ source <DESTINATION_FOLDER_ROOT_PATH>/bin/setup_simulation.sh
>     Copy to clipboard

2. Start simulation server in the background

> 
> 
> $ telsdk_simulation_server &
>     Copy to clipboard

3. User application can be started or if users wish to run one of the SDK’s sample app or test app, then

> 
> 
> $ <APP_NAME>
>     Copy to clipboard

## Configuring behavior of the simulation

### Managing subsystem readiness or service availability

TelSDK initializes various subsystems during startup. It marks each subsystem as ready once the initialization procedures are completed for that subsystem. The application must wait until the corresponding subsystem on which it needs to make API requests is ready. TelSDK provides APIs to check whether a subsystem is ready or not.

The Simulation framework simulates subsystem readiness. The behavior and timing of this can be configured via the API specific JSON file. These user configurable JSON files are located under the path `/data/telux/json/api/` and the name of the JSON file corresponds to the subsystem name specified in the public headers.

For example: IDataConnectionManager.json present in `/data/telux/json/api/`

| JSON attribute | Description |
| --- | --- |
| IsSubsystem<br>Ready | Specifies the subsystem readiness. |
| IsSubsystem<br>ReadyDelay | Specifies time the simulation<br>framework should take to indicate<br>subsystem readiness) |

### Response Management

TelSDK simulation framework allows simulating each API response via updating the API specific JSON file.
The table shows the JSON attributes to modify the behavior of the API in simulation.

| JSON attribute | Description |
| --- | --- |
| Default<br>CallbackDelay | For all the public APIs this delay would be<br>the default delay and would only be<br>considered if callbackDelay is not specified. |
| status | Specifies the immediate synchronous<br>response that application would receive when<br>the TelSDK API is invoked. It is usually the<br>return status of the API invoked. |
| callbackDelay | Specifies the time that simulation libraries<br>shall take before invoking the callback<br>function and -1 could be configured to avoid<br>callback invocation. This would be given<br>preference over DefaultCallbackDelay |
| error | Specifies ErrorCode that will be sent along<br>with the user provided callback function. |

The JSON for API behavior could be updated dynamically by making use of the json\_update script.

For example: Considering the below API entry in JSON

"getDefaultProfile": {
    "callbackDelay": 400,
    "error": "SUCCESS",
    "status": "SUCCESS"
    },
    Copy to clipboard

$ json_update /api/data/IDataConnectionManager.json IDataConnectionManager getDefaultProfile callbackDelay 300
    Copy to clipboard

Above would update callbackDelay to 300.

**Note:** There will be cases where additional fields in response management would be needed. For example: SMS management.

### Sending external events

TelSDK simulation framework lets users simulate certain system level behaviors by injecting unsolicited event using event injector.
Use the event injector helper option to get detailed information about the events supported by each subsystem.

### Multi-SIM configuration

MULTISIM\_CONFIG in `etc/telux/tel.conf` specifies type of multi-SIM configuration supported. By default, multi-SIM configuration is not enabled.

### RPC port configuration

Default configuration uses 8089 for communication between simulation server & its clients. If needed, `RPC_PORT` can be updated in tel.conf.

## Data and state usage

The data stored and used by the simulation can be classified into three categories as mentioned below:

- **API response data:** Specifies API responses as described in the section *Response Management* above. For example: synchronous response or asynchronous response. JSON files under the path `/data/telux/json/api/` hold the API responses. Users can modify this file to change the value returned in the response.
- **Static system data:** Specifies static persistent data. For example: IMEI number, thermal zone information, etc. JSON files under the path `/data/telux/json/system-info/` hold the system static data. It is used internally by our TelSDK simulation libraries to maintain system states and shall not be altered externally.
- **Dynamic system data:** Specifies dynamic persistent data. For example: RAT preference, VLAN configuration, Backhaul configuration, etc. JSON files under the path `/data/telux/json/system-state/` hold the system state. It is used internally by our TelSDK simulation libraries to maintain system states and shall not be altered externally.

## Logging in simulation

TelSDK simulation framework supports logging. User configurable logger settings available in `/etc/telux/tel.conf` are listed below.

| LOGGER\_LEVEL | Supported log levels are:<br><br><br>NONE – No logging.<br><br><br>PERF – Prints messages with nanoseconds precision timestamp.<br><br><br>ERROR – Very minimal logging. Prints error messages only.<br><br><br>WARNING – Prints perf, error and warning messages.<br><br><br>INFO – Prints errors, warning, and information messages.<br><br><br>DEBUG – Full logging including debug messages.<br>It is intended for debugging purposes only. |
| --- | --- |
| LOGGER\_TYPE | Supported log types are:<br><br><br>CONSOLE\_LOG – enables console logging<br><br><br>FILE\_LOG – enables file-based logging. Once file logging is<br>enabled,LOG\_FILE\_NAME and LOG\_FILE\_PATH could further be<br>configured by users<br><br><br>SYSLOG\_LOG – enables syslog logging. |

## Environment specifications

Current release has been tested with the combination below.

- Ubuntu 18.04
- gcc version 7.5.0
- ldd version 2.27

## Simulation under different technologies

The details on how simulation of individual areas can be used and controlled are available below.

1. [Telephony Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-telephony)
2. [Location Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-location)
3. [Audio Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-audio)
4. [Data Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-data)
5. [Thermal Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-thermal)
6. [Power simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-power)
7. [Sensor Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-sensor)
8. [Platform Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-platform)
9. [Security Simulation](https://docs.qualcomm.com/doc/80-PF458-7/topic/simulation-telsdk.html#sim-reference-security)

### Telephony Simulation

#### Overview of Telephony Simulation

This page and the sub-pages provide information about usage of simulation for the telephony
sub-system that is part of the telux::tel namespace of the Telematics SDK.

![../_images/simulation_telephony_overview.png](data:image/png;base64,UklGRgA2AABXRUJQVlA4TPM1AAAvgIOqAFULI7dtw8T/f/daW6mxa0QwcNtIUXuMHf7D/C4FCDsw1WWCcQUPeW4Jn1XxHy90vZUh+5b5PiPLPwW4t6rhQ/cnhJ8EPvnIuqkkguinGLtutYGpq8pDqO0PIqbh0OpJFD8peEQMHxoEjajwSd8j67V0lLDnFhhG/kOF6sp5P4J9GK3x/9uuJEsDCw5seOGFAxsWLFgwYcGGBRsWbNiwYMGGCRtWNGrYsOGFDRs2uzF7/f//vaUjaW/tVar7UkS5MC+VEYU3kwVJZ7txn3LjisiEA1JYJqQHMuDCi5cXK6KRaBpwSDoxj9oGNG28/biPY0nLjU4iJ+77oYhjyDYgLZjXckLznllGFB8Tniei7cjIiDJEEW1D0lb8vThJjhOFjxMbbywPkrQiyopCCtlQXHZoXgYk6ghFpBfzOp4oWEiSJKiwsXGwcehu/v+Sw8XFxT1zsW1bJT022Q6GYRguLu7POR/wwzAMPxwMB8MwDAcHFwf7T4u2bZGxtFTf6ivEOvIuNxyp+LWT/7/dSA+tLaeccsstp3SpcsImZcpACwbbM7sr+/yj49wT0xATmca6OCRc5WIUyj2G4FxdmsIiEABTyGGzCJaJmsFxmMg0nItwxIVJvGr9PAPEFITATATghZPb4Bgmh4ksGLkdEqnei0mcWnUATCsIUpUnlZgIwCAIjvemZkkMk/O4lCTJthoP3k+4ePH+P59HYeHg4sHFRqeNJAnOwIUPFx48+PDgw4UDh7lDMTR0WA7HIfQfEiRJTqNqZAad7QHkRjD7/VmQf8PP+c/P+c/P+c/P+c/P+c9b8vgWuAzMfJQORy7tB8HXiLVe64P3Yb4OX4TPwcvwWfgp+KuAhr8GDi8CcrhWzDcAC30DmCPs8DVgfg2ww5vAPMEOXwLmKXaYMH8ZsEPMvMYOrwLzzwB2WDArHPHcISGDfwmQw2eADn7IfIkdvgpk8Cvm1wE7vAHMN4EMPsMOnwdmgx0i5i12aDnQwR+Qw08DHfw3gfkVwKLGLfgvAHboMRfegr9iHngL/pTZ0sE/Qg4HZp6Twbe8vfSGeUy/9N6C77i99AP6paeDP0EOKTMnFfnvL/P27y/y/u9vy5xZP2V4lZyfvwD7vwJ4eMTMB+Rw7pBiIYdT7OAwxg4rB+xQMBfYQYAdxg7Y4dQBO7QczpHDgZkfIYdrOnjL3MKiDhF2EGCHnlvwU+xw5YAdLt2C32KH1OEEOSSuwc+Rw95hgUUF2CFzC76DHToO2CF2C95gh4UDfsHnrsEnyOGEvb/0bsFfYYcp/dK7BT/ADpHbS2/35Et/Xfq/v2HF//tLLPM8iY1vMjg9OU+iuFhlaBg4rD05ZIrZYAfLPPTmsGXeYochs/XmYJgVdliLyGkHz8GbsgS/rZDgy7PWlfe1Xq7gVYUEb8sTfFnWumFml+Brwr+/7Xx/0uopn2QYzeOVGVrFoeKgsvjRedrzy3U8WA05jByGxfz8dO2HTNeKw8rBFsn1lR9u3w6XhkPLYTs+ObX+N1lxfhhweDn0osnW/1jsL4dhZlqK9cP+fbKfbEPOzDD/41pPbZjJMFv7H+c6K8kqjRRzUYqaSXSkWEU6MR6MYrwAj2Sphd5aazezEnVZRe6iHqXrRorzuf+x14OjwcYKkVo2yVEQx4SVSSJVPmwaKSDqbU3Uo3T0Iahg0wijM86StATY+w60wHYgsPIRp7akVUQNISpq0TJlooCJxjbVOrUq0joxgCiNOU4jhwz1SWPh5JCivXLMhe4kOlJAKVIooozCJAXWRQECYrAADaOOdezSvIER2G2PI50YuCbgWoHSSYdYDXBnnaY2lIQHA1saKMUfPJTpguPUmiQmi3EU2SiOE2OSAtjFohUKO2CIiLGSTWP8CE0snIQb9nModAGtgVHsukPG0ZuEWhMqihSONdaFiAXHKvSYw0mYuSyFaFIspovBjpAkLpJeUsSJYfArE0ZuDTPGWw2gFKdWUETKBbBBsGmsotRS+1VgjLYorhSJAdPh+GC8NtU6pjckOFYhHFayXtuyYFNAasHh0oIm04vEgH1lYgqdmSTmEgDXmBk0JU1hEkA0TCOFSS0X8Po5iEslBuiMRkW6MIkLONYQE3W6MOUtWGgkhsSmOrUxeIyLMhREQAVJoTMvRbTS1B630BkxSSkFfMxLwcx1G8V5Ggxmo0aDdhmLCQlUpGMGFDaFbxw5Tq0nOCa2GCY1GBgdPRq1Z7QMbOP6RDgutzkiFWsXcKx1G9nplS8+UXlnwwsq4OJww4zh8c8xdRjVC1AptcSUdAKAp9nQeK0LFrgkAFCzYcCacMYvFpEiwbHWbTCzP+KXw1s02Q7Wso/pdUv20dGHt76gWqmRfWQrK/lgZpZ9DI2SfZXLaBhqUpzPZd9sq9a4nkyBe/uWHFQj++gdThvhc1D5YS37mPQa/3JQq62SfRV/XI05qMPeVbRopUF+aJ1Gk5WtjXzAg+hs68lpOp8fgv4wn7dOO7Uw/X/CreCJWl2mL3Lc0Paq62spX4y+nhzoh5Mvlr5W5dOXtT9P44GqfR3DKgqerKIXxe//+I2km5Ev9+/Nvr05t2A/PLvzpY6vd37N5cOXOMaDOjwHdX35v17x+Bt3+s7w5ryC/dB3hpsj7/3+D2JT85pFuQ+cXM1//288A4995XkE+wE89OwLWT5sFbWOjImgyfYGPP9CLXf64LGvvI9gP4CH/vr/vlr1+XiL2zWovfnvv9Gp/5B4LOA/5PycfHgDMuOP+6iqclDV1fw3brbUFbzR6XNqrcL4FwCkxba6/gzp4V/dqR8Q1c97nceYXYOqWoe/8cz5r37gy/P7YH5p/KGqukgPH/Ud6oifHx8i4x9cxcPquuqx7uDvVTQF/BPK8Os5RAp9Iw+bRipgTPIZOB/U+Zx28Sm1zHEMvwqSiiIFUFEcQD6LJrQijpnZ3ABr04xZzAqII1XmZmGGEocCff8HiIoKQXEU35OqfuUBMRAeHr1ojzIFExxQkdaRIr6NXBw7rBLDHBYUDx4SwwPs8cCb1wPKo6QVRssFBuA3WIlpdJKWu87ZaRxMAWKZxwPIiAUeD4l9reNBW2HPh0AK2RGSrrIPkRv0xZJulr4Js0kysqIzm8blz0ENpsCwyN/5rIYGw8tu8JqQ/iup+vWkPt7XPngovH752Z2LiztCRjRp4ACkkB0hSco++2VHDrlBXyzpaumH2IUBEyFMAicxSRY4eHS99n/6/T4A72vFHpQAmCCwFDAlJKkFYAi3h30s6W7pi7OlFjyZ2xNxkZigkQDQmWx9u4La8mtRrX9a25M+4M6FcABbAf2FKOLJ+8IE8GoVrd9xpPZwc/Hsl7UWe2soDhfw+VoAeLNyS0Tzv9/XF3dcrd9xfvywUmgwoU3RtyCDqCgxwSMH1bcnAYCGqC/uCEBT1thFA55ciMZN7an3/VtoAe9oh/efEOK3NBIAS8LRoAg8WD98UENGo6hwgP4DCOis3tJ7COzp3hGN/Rbg/Qu9B31ZSkaY3dLv9N8R++t+H4s/+2XH8Mn7sIBC7z9xeKfv2D8hrJ0QUTU0QE0mW38H7RLfERXcqX3y/i8/A6NhBxYAPFBn+cn72uEW3LdicaD07JcJ3hG7Zbh12OtbwhpYwVBCBeyj63Ug4JefOZPg5kpz4TgQkwCcKUDRB9uJW1j8DygegilQcQsCrYjNRnCq9BJ/zEENABVngLOB1rwH/dS9hpOA0yJ0BeyiHdCSsDio3NIAsO++c+GtArvWYP8cjNhm6zoWehJ9S3Dngj6eg3gCflGTwOM5osFDYSwOJyGAEXiYBFj6VGHT2AsmNZmnrFMVlfVD4OpfQFPc4ydCZzTe0fq38fnHvb5FP5GQe/+NRGd3C372juSeWsCNqnj03lG8pfeen+iXn/kRWRTZMmFSU07scBtQqRU/6Bw98UwPXc7SU+fu4YSu5/Q9nNJ/SJjAkOgONdjGkHZ+NImKVlHhDW8uZb2bjstJHUv/AcpSg8/kIauNzF57ICRds9rck9ooMxQSmViHdvLADsv5DmZh4XW+k1RHiuNxpFMLCuKeplSkdWptqpN1BL+3eMycpZHWRWk5qPUsfTJPu9/3kNdN5m/3KRXKyU2SNiMcEA8wlF3ffyhitgsD8mtUBO92KI4UxKYZZ6ktYrEQXCkiZdOCM11wlpiw6qMwnCWRXWGX9e0/qLFhjgtWEdib2jhSbFIDoaaxKQZMU0QK7JhTX0ddXW0DLH3QbyZ62X0/I9NiSC1oz2Zh45jZLhBFpJBbQmDTLCjASnGQpU93hfu+RlzAa55KKcBkKgogBTNzGPRZNHYBmm4cqyi1YHRi3EabdB3FnGn30UGgUhTbMOjzSHHnNllH4wTMFqVus+lMVOI4FkvMiNkwAfqPwqSHb9cXPPvxodI+Eh+f2o/jirlfiUeLoPlEi8MXo8+cn/rh953vzsfAMexlQZPo8Pfu1BX8wW/MY+Bg5qDJZP7pb9UVfPSKe2sKXncWQTMHlVfphx/VFbz3kv6nGXCs4yJoYhfPP6gn/jb9H3z6PFYwEKBzUJk76Ycn9cO3s7j/wf9Y9Nj4c15tOP7/+v2/d3OkTvh+Mn/w3ZfZXxKTbfBHxVX3JfHm4x98+Krbex/9wf2g/wWd/uCjv/c59//xH64MB3/YWlVtW5rBVev5h9/79PO1fvKBDwyfvOL2J7V67X3yHz99Rf1/PL8BHaNqIgF0MNP4tOUTX9Mw+QycJLX8SxrGvW2d8FWZp7YqP2OruIrHlz4wRIdDdAmzxvHVNLNh8JdFt3Fs2eBqet3yxa9JGWpiip7sg5llH8pa6VfpSL9KRx8a4FGX0VDywcOhkn0ws+yrZCsr+2BzE2pSyL8c1PVV8RbnHNTt6ek2+OagqpCDKAq8DHvZ22LnoHqn0i8HtVw3/OWgJvPMyr7RcSvkzEE9SWXfbIPLiQTMQZV+KCX72GZr2UdxnjbC56AuWuYtWhk4ar3GV+Kv10rK5aCaq45TjMeWuXNlwhwC3H7DxpcWVuxlbOXcdYjF5QAyuCwk3RNlcQfSibMgS3YahxdsJ5dKoC4nW1mXgzo9NQKzmLKsYzAuBMV4EGxzUAfrEIPhJNrG8TaaDAMt00eLMCMFrjdfx/F63pN4Oahza0zI2BpIvL9L6GxiQuLNUOL9ZV6a3fr+baaCbxJ4mDGULI55KfW+nYVDlCKV1Pt+MjR7eDC6cZJ+wAPqbDSKqs8LKh8eyqpmD1FEQSQzRSCF7lPfZMo18lKcxWRbUVzfHeLcZ0q5hl+qKXbcY3kNarT1+KPU6e4n6z6bp+E0tIYNvWQRPH7vk3bNLfieOlflPniyjU+q072ChUbOSX4OBl+5BtPF2Zz+zNqBV2aorMDJzps9fnehiZTy/MTwS0o5KpbcL7G7BtXny+LiHAyYkQf902iM2+OV2Jt1qEnzhA2TRp6sXQsHr0fsQlO+bujmCSOmoB9neF2DSn1+WOAFDf34XafR2PBTZZkYNFbhqAlOhAfu4/W4Bampzmby8xOsILeVMPzfdl5ds1HuFqhd5nigPDyplc3/+JgIgrCgg/MQiqsP4UI7VfmpIPlkHdeCbncjkQ8+kc+Rv/5dv3kNg+Hr16GW+I07/+zPmytQgVMqZfAfMfNXt8/BM7Hjme83ozz/0nf5FhOIRyyAmduzHFkCq2Mg1OwueUeFBSWFFAyBd8CxuvGAe2C4tfUexzlqo/nx0ZIveddtbvbAMR/xDtBt8pJo346JM11Z2IFNBAxXxBJwYOa6DpdWCPqZAKL3SquIdurmgx2IjYMzAEBzFozELpQA++fEtiZHQkTUKIQm73C4O14KoFcgwa6HdSP5DnRZBZRCk3mZO7RB1zgfYZ+fOZZ5JNok1AR1YHQMPfJRe+YA/nPDCRFtFppNx5QoUEjI8c0dNiNXUM86iLBqXdaLgGY8as8EhAIvRZcWLGAEu7W0R7fZ7IIWDd2Zm90cAps4erfpUqFoz8QCEDAMYClWAFBwqex4B7wCCB19qBPBe9ydgFQQTrjBz9rgcA7hkS/BNoLYuYp27kLzHlVhBhsGDA4VgZ46x53oJX0cCcIjUa3PSR6tfRK4HAGpAFopQujRHo7vUrRzZC9GLumK2K+i7ixu2G4seYdAx3cIxR3DTRHh2m3CDUddjiqKrX8WeZ7jIs/zMhTdZhsfUAWeOwTdtB0vjBNiyQWsMzOxEydWC9yu1OcwM/sjO+oNJqHAoxy9MfS4gHzJvMR92/aMcAK7ZbSf5h0FEtixYLN3HZ2P4EkPEZCYzwXhtuNdnY5S7J+z8Q7sbimFe6JlE+8G0WwUovmSj9BvGHEw4hfFcb5k/saZ4Wxtbs/cZ0NbkGNRdSuWzOJ3fV65uvK9yjHocx6TqWvUeUdaxV3t2OWUvscUuOOceCbs5zLQmu6ix9iV9KrTJzk5H1Q3CJdfQkrcXiyrbmdYpSjoalAPp0HziUy1yqEk7za52fU95MhWArMrcDxQPodYYmcT9UZ98TpEgtk1qAQ/Pol/ujd0n8S3JnAWW37SVWDGvmhOesUZZvcn48T1cCSxYk8Ytahwe3+kR75e5dgwyTwcmGli+Hn0gNg+mUvBlyuNSGn8Z8imNBK+OUmRveFHTZDr8Cqz+JthsZga/2NSTDVmZQ9u/HkCIIFzoJlg9Un7nWEYGHyF9t2gZmROsbw5hHLjmdzwH5lQKc5Ma+wkifFHdZBsMtCZbIQXm4ZesSfGF/piwYMv6WVqmvhjDmpPk222ln0ws+zDDreyj8HlRPbR0Ye3wHByLvtQV/FQ8sFKseyDWfahimIr+yZJHq2rc3sTYYAoxfrxSjhbEjOujLw4i4+TCEKG0yyQMicm58r4i3MT0/sU5Wjr8dnaDhozjbHmGHm9aPiczTn0ay524H2T2toASvO0DDStGcPfqGiuyVuaczanz+HrU3R9VQRPBh5/50Xbbec3xl6yqdX98gbD+xTlmC9f5G23fep6GXu1bmrvUxS7MS/DLGye/o8HuparlzMM6FN0PB5WV5jT+boxbp1wYcKDPkW3W1VdxPPDW1iBecfGmF2DSj0VaoIVrA6cGP9WmXuWq+5P82IFua0EZjeLTrl60TphxDRUFmxMr1u+OFt9z9ncyoMN0+mF3oQAtj8h+1DWyj5MIf0qHX1ogEddRkPJBw+Nkn0ws+yrZCsr+2i9BCbUpLhuyb7Z1nHx1s8c1DM8UB6e1MrmTziWql6aHl6AiDYg5aCqeo+zHA9n2IMMm1Ipl/8Z4ViSutOoS9NDCwDRBiGGvazO44y6b0HY5MQX1CbjplRK9kf3LejV8Qzc8sAZ0brPStU7I25R4iwMT4E7y3N0Syzgc3AhuBvrorLb7Wgf7ACFXO5bkPSC4yE4jP27OamHo/AI4YUc6XjC4xxU3Cph3xWCu7G0imiQtI9LV5fQJZyQM1Ahti05rYDDwj1vcgcNXJz7CHGP5MwlnppJprWOFHOhxZAx2zRjoZHRWirydhQ1jt0sfPr8o7cwPjcbRMyH+65QwcN9C57lSwY+S7634WaXuG/BMwGLnzN4xz3vtnnz9WM33J653KNSt8mOHLy7M6ErDJpdodUU4Zy5FTi6fMkjHglnoPpNTt/hNornrEaSJYa5iBQYz5nOBEDHRat0TGp8m6RcW18EtrXNXoAU3O9bEN44EnABHVN834KoqTI3uzkAbBTasx2PXBi1Z+73i9VtCpfNHuq7MyKihM7oNtB2vMuXvKuVwPZuF0YANQQmyVy1mEvH13NQfRF8H3QCUkE4icdwQ8/FdMRSNvsdPmhE3rcgbvD7jRvgF4Vov6IR46W440RH3NLSGXKetcGueiQ8a2vBzIgstQ42LVy1nEJFk1RH60Sj/XAcA2KtE2NTnRhkEQv7SOvCN5kPrF8ihpGAVKDvU3DWBrRnCHTfgpAzeN+CkKVHRjyiiyVkWRJElNAZkY/au82oho6OtU4tgUmNTVdR7KaFSK1NI2WSjCSLFMcxqsAdd8GZLjhLjF+OjlvGP4s8p5pknpdeoPsWJI7W5F/dvjRQwy1LcealEM4UO/7WnXhXQ2G2qY4UjU6TzFULUICF2ZQE7pUxwKeIVJZa1BkuTlJfTIHzxdG4rRGjeed+34LEaEy+ZFg/I+5bEOHy2I4R7dkSdF/dRruT5zmi2cVRQmfMrM3tWU2F2aYFXYlUkRg3rRIwiU5SjE0zGh/9kng+OtuSmm3p6b4Fl8y8yyn2G1zH9y3oDnWfgiNHldvN9gwcqCVnc4PFsIOMmFGXADsDzvIRi3qNREUZmA8Tg0nAAmgtrxDTlFIwc/3H7sz95OIZdd6RUEECLh75HtWdqts5SzdVdKLR6wKwGdGDdtUi9QmTEajXygLsY7PEuD6RTWMXLTfg9gESKZO4jyZRqg4EpbNQKTVQAUKquKvl+VLMjdxdsnPcVFGqjdcFEGbY3lXLXf8M9rMdamoCQGpRAkBicAJApmNayxWT6HSCK1EnUirSGTEbyTZbB2qqbIeMKEWr22Txu/pWh9MNFr+DwYXAQXySauwSl6glxKp0dcjrnl0ReBV2iUvVcsSqdXVcY/a+aFqmHrkSH6vhLLOyD2YOqzCpQc9kUhNoMGsl+VDR6TDkgpmPlPSP3Bc/DjEMKzpaF6yiWMecaeFgFpGeLiyrkr+l3i4mcogEXfwUKbYLw1lqTVKAx8yiDH/6WhKRMU7xZmYuUgukiljUpBiwlUNUpPUCIsbGWalU81IeEUOy1HKGUFEvKrm+vY0lUSVmk2SQxKgIwYWOVBlyUGUOiXaGmJoNV5JeaiAmKYLA+cd0HubloNqFCQKsejbEI4tUQMhBDe+IE8NBgOFQSb/vJ3M5DDVJP+C+OFuoScaE7INSKgG/HILsIyr3so8Jt+QX4X8O6tsqCvznHw/JuspSXvGCa5kPMYDptOru2CXAjRG78Mu3/N2zEltbZRyxY9Rmy8dREfgr8XhYZcezT6OT9gu8GLfgIM4C/2zn+0F1UcWz4UpeY0Q8822NO/+orKD5RMxXvN8aON31tcG/qf0YwHk4gC5mO9wGT4zgy0AzbUdhN/SSLa3C/ml1dLjOzkFl5p11kurb92+tcmnolecrzTmbOQz+68/BWy3WwwAK3fls1r+z3z6bExh5hUP7bjAzyZxCx6o1DqAkSTm2TMbVM8p1FdxyXUBNc5XizBQpgHdrHX0IpCRJlW2E5cXPJMZiuGU+PJgxlGLM8se7KEmwgOS2hGXXVEo5Cdja//GP++R5BFJ28QBVjCtQKD/4oIR7E7p9/XobAUn5wQel4aV2N5704SGNoMYRnAsH0uz2KHA8xjyww7nyPDWHNLv4EEyOoATzWyFu51A/aJjcEnL7XMcXgCe72IC9/mMJymMyRYiCOtwfLUKs4/N8sUHLbu9w6otPBMnK4/uE+P4eZnbelpCtt3uOTZRBy65dm2BNZmaEZGYG9B4NuEOIw7fUO8Ytu4GaKDUrQiozjWCO/YiQyH+e0KBl15phoKYkx4iQ6EhKkGMxaTERzxEatOxmp1eBml6UCXbWBOK409oKtq2O96pBy25HH4I0atJSAmpuKMBvnF6NWcDjEi7sAym79cITnaxrSZ8MNh6Qw9V4CpmOV57rIGW3XkgAmGxrR59svIJkPryhmlwaiLn0vkMDKbthQwqciqMtpLIIBTcejxVEjcfDWvrqhgyY8RVDkiO8NQCm6OF11itMLX1164NKp1MzKttsgJnvKnifwm8xW8tegSm79cEkj67XNeSzwTERyFWogNLWl0HL7jTxxxzUmtR44CZ4rqHhaiD7YGbZhx1uZR+DcUf20dGHt8Bwch4c2V5ebsMYVBwPa0vjOT2tACeKtrV0DdUN1J7TwJHvB+OK70cYATNLvtFqWmxl3ySHZB1qMn20kH45qNNVw18Oqtpa2cd6MpWAOagN8Kjx5VDywdutkn0ws+yr9HpW9jGfm3AzB/W6JQETABr/clCtlX2YYvW22DmoUST9clCNkYE5qMHxE7lNs4I0u3UEWWZr4Ie1B8/Pud5GUR2BaqUm1KwUJ9IvB3UQdxr/clCVkn4fid/LpF8Gzn7eCJ+D6i2M5CMpB1YCfh6pBCwaG0YX56nsmy2LJhIwB7Xhj222ln0UJ61G+BxUMzWSD84yGZiD2uj3idwqOh1WzF9wrLpCe9832wocoqhDRqLpWUQ7syJHXe9QRBGuQeVBaTa6T32TKRciKc5isq1oZ4zkyBmpmElSpwMWOW057/7EIUoWk4DEXHCllAuWlFKM7PV+SazNSGQtKnUf1ApTCgU3jg7OlMBF21jVa3vV0AugVAQv+zW3MqqnkWmsHrWWSBpZBPbp7pp7E10t2nqtnAdFN5vxqggOfcWtHcUX0rheBotpfg5QKddkugj7MyvT1cjZ1QpNI/N8ugjWM09Pi7bxrC3nORKJ2yFZgzovgxA7b/ZOQzcXvPMTuCSlZMWSi1I/I+PZoWUkuhZdzcRcz5zfFUxKBNwYFWvulwiydb0ghM+XxYVrkM3Ig/5pNNYNwa8aGmUfZb5as41ukLaco5O4FFNqUPfmSSvUpHkCb9LIy5lw9DLyNPpmkCNtpBzZtaWbRXEr58gk7lALx5C+//gSzM2RP87XrfspAKegH2c6ZSLly1eIGylXfXOi1yNDti4kQokbxBmWdGmofH5YwEhD3+kVUl/ZGkGdxTu6haSVc4QSt9QjcSrSYECd5Cy17l5F8MxBVbEKR00gDA/c1+nJQKyCEepoxOZCJzw1HCGERt7hz/puvLe2XQrB85v6KlOt8vMTEMltJXSCuQXyRuZDZelErIJ8ig6aHJTfFQTP76qtuFtIEJnKoWvpBARGytD1dIK5K5QskrYSOhJrHUMKrSPFJu1oXThMUp1aZpPoxLBJx8IvixTbhfHxP4vmo3i6DaOroSEg1o17tHB1pIiUigqBGBHHbJJImSRTUWpVFLNNMy5SaxJhlInHskh5YsKFpEFFGXMWKYe4YDYLa5KMOY7BViGOwS7ZpplJDdgGxAXHheevSSlpsKl2BjF2GAmDxJjUMBcERaRossiOvX8ii8wpmBkVzFxqYRe9sfL4j6DcS5zRHEcKjibfZUKI0RiOdczemHBL1sCxqKPZiOOsBSPwbASZzrznoEoHOieTmhK1Fta/zz8eknUoSBGzfzMttiEgKkqtv+egVhw5HiiN42MPZmX4dwbdgaNnLVeNgEwXy8extuLI31xhA4Q2+xxozNrfvKZLbRkIlTK0025TuHt3zJf81e1zcsx+M8pDWlQcDyuwAK0yz4+PmNFmP2u3Z2UhX+7qCFSktc5A+nfpM5nUBALs+QtQEbN5bZW5GABEN9ZF5fjYzecYd3Xh7/YsJwcXN2LbkmMFFAYZTR7MUVHMbNOsDMRxmZgoyw+fqHLJR8zNLoBQ+M53YHe2vRELcASwWpN5J3Rhg4d1IQC0l3xvw+2vbyscgduOlwKg3Z7tmHkkCsdF2OdCUygGcmyaEcdSS6ZczcKpAhyw7zoCEAqbvWjYYgFCR4x38xgRfdgctOccMcqXLBawpOk2m12huWRQIZWgQ2AvwABybyZaZ7HWYD8sxghMonXMhdYxPPsvtFQ0TrT3JwluoD1ue+bw5gqEAtx14ga/E9uHHeUh3ESLpQ4iNbuQZb6D410K8ItAbAdyMR1SC+aAdl0gdMGFzjiOFIWKMvG0qAIulUoMujjK2z+CvRPoEFpgl7pHCoAdLzFLyJJgx187TtSRvRi5g+wg7gUvyWLWBrRnwR5mLtC+NsM5cASokiUCLKKiAibGeWO1GAe9Is9zUSCFMhSzdhsfRYWHdUpEPLbfVFGBT6uW47wp7VADKN9KAOu0Up6oSG0JxFqnRJGltlQ6+hD4RsO+K6EgdpdwSd4W4LiyU0fjml2hTkKMH2GciJzKznV0pZKP8GlV7y0Hr7BRTq9/L82vwikhzJLPEOXdplinRw26nj7zDJ4mJYsAQHK9rlRAS2nPwGyUAvjXhfe0eDaKHbdn1CPC0RXw7/Meat1L5u98B2xPml/bjpqtgtnsS9s75ft383KQz0bdvLLxFGa52PGyEgqbxvDJ3DBJxkUCSDKOE9fR/o7qdCoyBxWeQyRz2NzOO9InE108HHCrcXUCobh7uJ2axIESipUI8CFXJh08OAFzfOx15Rwf06v+mF5PlQ0dJnFc2/1VggOkUhIACnaFY60nC1zppRlnOloTsyECYg6qHothif20Ee/yCkoCr9hi1J7RJ1X3G9CdgOdC82PRCcdnQEHRbbLYmsFuAcrrG4H5HBXRc69kcirMZheDuju4n4LX0Y6BTXWnwNUB5LO2aAc1DGbQOGAnfIfOrzq0Z/vNCBUY8E5Y0G0KrWW+xKbwLTXSGlVFgVYQAKm4vVMHDqgI4KjJVfVcBgV7WeXwqnkFaDn4ZOoIPEY0pmOI+yHibrP55S+gjD6U5yAEoN5xFYBXEAQ0cGdwP1YN360Hcez1iX9dCFzBo5ebnUgnQidVy4DQa+9gpwMZAprdagGvIAQMNifO1tY4eslpgP0oDPrQA3FIgtQRcvRRlFrCfvPveYePZOXlKMCOrpoLegXlea0ttgMTXIENB+W55cf5jhnlhTvzgSYB5bg9gu/a8tpRybtNbnZz/E7SgWrObuDRWGUpUnCp0VUBDpN8wwnXEXW2tsbBzAEXMN2OR6Clg7nBExDA5lE7YDDs8nwJ2gg6qYpxNDb73AN5t+l6sJN3aLZq4JgIsz3DK8R1tkom08k0tSW7lSxmh8OAC+6OwSODOczGYd65kOc53OvRneVq5NjlPCchAiSgANShXZa883RyNCcdqiIDJ3dbQcdeVgQxvrIAJ/dLw6ZZGciiq+ALOAOAGrroG8L9AvZg5hEu9hvmHdFZrg6Ofl8v1mPu3x+FoaKsHNcslj509CHwjh6B/hfq2qK3Rk3eearsNyP85m3HyxpCGU6n+iMm0Ymh/hZapHWhIq1jkISjdUR8+L2KYh1zppFYlqXW7S+kCafE+O4TVTVw57p04+Y6t9vvekE8036zBLnK1Vg5wuPLfkOJndgiUjYtONNEYqmDTTMuNAX6E4RZapGtx7+Q5rcJANVInsPj/0BhxODyXwIxjr0hhlG+Y2BVFgL0dYhZatEfo6AuucDAP/9CUTAYCoAXMZvGfpwCV4WII5YQeDahPaMmQaesvRZggJuKvK6giBR8L+mJIlLuiOdZALyIgbTwOPiCznrs8nzJS9AHFgLgiaDFzhPk6TNwVq1+K6Bm5rlAf0LNVytFpzor+w3zEnZ23RIAIN2mF5Brji93qB9A85vUoNEQ19HwTSkiMSpyH40Az7QwAexC4M7c4Nh6TYGDPWLsR4x3O/9YX8Am0TpDs9Gg2SbgIT2OiErSSw3HuqBmQwU8Mkt+R7WFHPqzaHZh+KiG4WogfzALy0VqjzIHVQIVsdaJOcJmMdxKhwpyGsQd2UdHH94Cw/le9qHieCj5YGtZ9sEs+1DTqQ0igNqnaB2IStb+iTJ6jcLmtkKQ6aMglINqqiCH8TSyldAJpu5RN1JC1Srz6KB89DDFKgDhQdosOoGzWfSX3NevWfSpRKmHfE7wZH+kBM7hElyxsV5GqoNGzgHIkR0kR/7OAiGKpZki+Mxsa4MPvOXrorPAM94NuuXrhgZgwCB6PeKbsH6BEOHA26HHejINQDhxPRxJEONaVHoZadahJhLxWEeLvLoZojNcidqvsKQGlZMjX69yCd4pDwc6PnAjfF3kEsjxbR35myCXqLwgNTC3CaZQWny50oiUcM2QTWkkeHND9joaObu7HyFqZJtF6xtfR4sEXwatnCOQuLB/c3QMKdS/rICXM7P4elgsprkESvl0cW8Pbnw9N3ATb9ZuJJIWFXafi52+Oe93vUV5Pn11/3Jw45eJISVxhqoCNh6ZYHX/nWEQrEBSEA7vBjUjcz39pRPB6zctIxG06J1+zfwd7UDOw6Cr3bDvBoqRkqJKMBrKjce4UsoFSUopbnpjR28jj4ga2W7RHpqcK8W5aaVOkhhTaNazFbIDn2wsz4RJsSc2WdQRI48oGulZm6wTr3BW3Z7z2BPjLEoSwwqbGw4zh+l1yxdnCzVZT6ayD2aWfShrZR9mupJ9dPShAR4VnQ4lH2yMkn0ws+wjy6zsG91qmVCT4qQl+2YbjDsNfzmorJTsY7gayD6K/bwRPgfVWxjZl4EzH9iGvxzUcm0bG0YX56nsmy2LriRgDmrDH9tsLf1yUK9bjfA5qGZqpN+nsa0a/3JQ90bJvtEiGoacOahz2TfbqjV+G9Ac1IGRffSS00b4HFR+WMs+Jr3GvxzUaqtkX8W/HIabyL8/i9abRw1/X5OSmWUfUbmXfqOZaIDPQY1UIv1yULfFtuEvB5Uq2Qc9xkPZN8nr85Dz/KPypF8Gzt6RgDmoDX/FLiaN8Dmoj66lXw5qZyIDc1Ab/VAT6Vex1yfrxoa/S1jNy8a/HFSnkn45qGLTCJ+Den2+ln4fBnW1lX8fh9j4l4NadGRfxSaP1qEm02Qh+55o2Msa/nJQ1XAr+1jHRSN8Dur5Xvah4vFQ9qXAWasa/nJQp1Mr/b4sehJy5qA+kn45qKboNf7loG6t9Kt0ehIwB7UBHioupV8OqjNs/MtBzVZW9sHmJtzMQb1uSb8Pg7oqGv9yUK2SfQyn2dti56BGp9IvB9WsG/5yUHmQWdk3etEyoSbFSSr7ZhuMJw1/OaispF8O6jYbyD6K83kjfA7qomWkXwbOwDb85aCWayX7Rnunw5DziaRfDmp2etX4l4PK3PB323TT65YETYGjNIoqSBVFtNcM3ae+yZQLpRSLyda5/Ao15ybcZSeYUsqFVEopRsre8ZF5ozRW9dIOioZeQClZBC/XNbcy2iuuQU3j2VWwmOb5OcCpXJPpIlzPvKxH3J3FLp4dGrrtth98rpW06T/y/KSlfLR5c4X8GA+kSslDPmLmXQ6eiR3PfL8Z5fmsjeJxNJibXWADrEsKLc/d9C79e1ix5OLijVREIWcO6gswLwmfXxVSXrqaNf+IzpIveddtbvbAMR/xDtBt4v9m7WZ3x6PykL+79643lflqfRpteqXftmqNS/pzKuybQX5xTbuwmsmWIFDhOKdVhKWbD3YgWq4zAEAzF4x4lBOhQVdqILSxrlvgblFe4tHIri2nB1wCR1O+fCWnTyHfgS6rgFJoMi9zhzboGucj7HOPeeTYLaEmABgdQ4981J45gP8w7PyAELvN9rvMjhTWXvIOR8sjx4J5KbYTblESP6uTtjnpBeMrWyNPAzTjUXsmIBR4CVul8IDdWtqj+81rml2xj83J95aYzV6IsCPv8tYUInrJvBQ9ZZr9BkW5ARX3KHPE4o5teqU1qGtTyjPHKhg9BbzH3QmAgpcmOGuDwzlUk1zCbQSUn7VFO3eheY/aY8I9qoBo8CM3cvGLwj1KjEZsLnqk9A6npcBUkZ+fPBW4HAGpAN5GIvYbQLOL2W+W5C5RjFzSFbFfJrSORWTtGazMIO7FZk8WRJRuTPOhsnrAJXARdwv5NOijN+hAThmKbrO9aXYBwHPHS7dJHDvSq9ssEbAvL0MxlaHyesEot6Gfzo56g0ko8Ag3RY8LyJdMnd5oz4g+LNotg4bLuxyOW4LNAQnW7zYxS6C5dBvtBTe+OF6JwzpM5hi+8wOLoxTu0YdI8fFQCtFbJR5xSwAggml20Q9IAHBF6LbfhXSbzM2NeHvK4lEcZUlMpjYk5tj95OIxdd6RVnFXO873sI6qlFqe08GQXoQWMZ7yoRW8RUnSI32HY6LnJfPcVW2Q0rxAh/a4agZPRNtQs7BXL0Cr0sm7TW52qxqaXU63ISbD8Xl01IDea6laQqyqsc5b6xATE11flUyXqLpJz89Xoea3pBwOKxacwn2U2hUz2nn0AsTbcHOWSiVfCvcjfA5wKqNSSC5PksKGlY93plvmCmYHixrAOj0/dLahJIPLR/NehYOX5OX8YS6EXJWOSSG83agMuJeetzJWVoWLS133JouT80VWGtwtuoB8ySMedZvMIGfn3TZvfmfD7VkOL2MUiTbdJkppG1EXNi6XvAMJc0fIpdXtqnd6uebtBA0ry7aHHHpbVr0OdJhumVfIodgyZ8ihM2QeFEh0qHiNHQzpsFZssMPA8nCKHDLL26m3gI8meO8B0w7TcgevehPPAdMOBQ5elSP4gSIDdg/+6F56MviJCL5CXnq0l7/idH5ynkSZKg2m7vPOB4I8H7Vn8GMuxPj2bMcjfEXjcrOftXkprlakLyl0BL52XHOzP8L/8qGynnpw0PUjDYfWmodz5DBfs01fAOiQDJgX59DhOmOOkMN5pnh8gkR7lq+ukUNhuYMdJt8AnuLA4iGvEuRwOeTBATmcGjYHKvgtGbxqkcGfksFf4uBXZPBTMviO5Q4O+IoMfkwGH5HBLwwbHHAqgkcBH8jgH5HBn2SKL1HA+5XimAx+QgS/5YIMvpdQwWcJtdbXVPBuL/2cXOstvNbJ4M/J4HVPcUy89GTwEzL4eEgFf+kePAjL37B1fn04LYbMzCVfh9jpL9nBxYAPk8KfMwPHo8sY95vljrn5j9ouF1QI+IgevuxziH7yNJnFHA7jIW8vkcOlYYUdTg1znEKHxZr5qgUd0rXiDnKYZ4oLHMDKcg87TC1np8ih2PIAO0y2vI6QQzzkYUQFb+ngx56Cb62ZJzj4gVvwUxxwz3PwHbfgTenBR4Z5nKLg18xXnoKfDxQXLWKtuwS/wg6FW/Br7HA1JIOnX3o6ePqlp4N3eendgu/RwXt86d2CH1ogLH/bq2hShm8PSYk6TGUXnMGk7xEslhTMzOB5m+13279DXsBIMDpKGvqOjZPer+iWr2WHQQsAzRlBF3DDsGmP9htuz9yL5ehIK6uBmSU9YDlmHY5kl9CeLdkF4orG/QZcWTgirmTC7MAn2BxZ/VCLKukFi/B1kctuIN8xt5vtGQ2+jHHWBgva5cfokkICoH5UUwcn7WbcE6a0ZlerUafeBsS2+JSi+7WF9NlGIEmbHGO9I4pXI8H6huyT3rAmHl8Pi8UU1GNSTBf39uBG7JIeMXQieN1/ZxgGcCq07/o183c06Rmr3HgmVwrWoxKa1nif9JTlTDbCi00oFXtik0XJF/70Ff/5Of/5Of/5uY3pmeJHt0vQcz350+0ShKz41O0ShMdEaaxOjv/3Pni98hudntxsqZHDzciTj74Y/eSGxvN5tFJhMWn88e9f/8Gd+/1aOty/OfLkve8/P12FxY8+iT7+zme+n9acrzy3WjqIER997/nlOhzG543PT7XN+cp7q6UDGPE3bnikk1CYPfv16z/88sKc2jqif+eDF3VEwzB4gSn//d9ap5r88ze+3+qFwfiPov999v8GmyefhsLV6Emk2uPaXP3u/DIMhql/63QSBz3BfCV4ITNyII1cBSuEZ3/vEIXBcPfTv68+3O2DEyRiOu9eyIwc7iIj2vYu8quMn3/1WTgNg1Hu33Thbv+NiT/l/eLmSL//Sq0f3+vf9eyltSPVv6XBcPEHL7s6nneF0VOt9a3+XSx4/zbwu1sRvJfcgHAd/VopxLWTC7VuCavHYjoo178PuevI3Lp/m9BFhvd+uy+U4XgUAN1rlhV8fA/i0smFe9ebIxe37ztCT0VjdwFYkJ6Qex8/BRJwPA6A7jRLCvRT2Iofg75s/7F+NeVjLdo7+g32qre8AHu6d6Eu6Bq/5Hah9cVf6luOylMnoMf3b4Nu872Pb19cLO59DHrKUoIbVW9/fE/wGDTfx6LVCgfcv4U89oBoyLfv97EuKkCD7z91jB470VwsxK5bvL0FSo5K/66M4KmzZ/y7H9+7f9tpxmI63JLv3vUO7hZrfbEgdBHC4Q8uNBjTF78ET8H2QWwTJAX9p6KHKt5mgmaNcQa0AI/c7YMDR4QuMfrxx3+p//LjLyRfiHieLi4IxPBUUiCewEtx/7ZG7fbi3lNPo9EGwUPhTPei+8UfONK3hDTJLTihnKD/WJOj6cIRADvm2/fdEOMuFkLRZfTiwuH+bUfzqRZziN04BI4WE8oJnAZLzkaOvguP8Wjt6YkWFzABAOmCbQU8JPsUbAaeChV94WgKYACPJUTxk7vEKcS75PlHMB55geGp03RJRUIId4JdrPB4oOaq95OyEaLnoP4EpMWQqTfQhEqWwZ9RcZdUJIWQAG2FxaGam16onoOaHr79rH+3kj6joqoug7r/40Mk+a5DvDnyyXwcBl+JHx8++YPafSX+b4bFt0twQ6OGfxbNy9rC4tsleP6v7vTv1uj689D4dgl++JE4B3G3lj4EjvM+O/lReHy7BM9/82/cEecGa+sHcvcXJz/8QZh8uwQ//PFHv3XnWb92DvfvPPn2d3/0v8Ll2yV4/v1PP3jv5G/UyOHk5F998OmPnr8t6O0S/Jz/vF00DAA=)

Telephony Simulation Framework

#### APIs supported by the Simulation framework

-SMS: ISmsManager,ISmsListener, ISmscAddressCallback, SmsMessage

-Card: ICardApp, ICardFileHandler, ICardManager, ICardListener, ICard

-Subscription: ISubscriptionManager, ISubscriptionListener, ISubscription

-Phone: IPhoneManager, IPhone

-Call: ICallManager, ICallListener, ICall

-ServingSystem: IServingSystemManager, IServingSystemListener

#### Telephony APIs Response handling

##### SMS

The framework allows responses to each API to be configured using a JSON file.
Each manager has its own JSON configuration file present under `simulation/json/api/tel/`

Example for API command response for telux::tel::ISmsManager::SendSms

"SendSms" :
        [
            {   "numberOfSegments" : 2,
                "status" : "SUCCESS"
            },
            {
                "smsResponseCbErrorCode" : "SUCCESS",
                "smsResponseCbDelay" : 9000,
                "smsResponseCbMsgRefs" : "1 2"
            },
            {
                "onDeliveryReportErrorCode" : "SUCCESS",
                "onDeliveryReportMsgRef" : 1,
                "onDeliveryReportCallbackDelay" : 12000
            },
            {
                "onDeliveryReportErrorCode" : "SUCCESS",
                "onDeliveryReportMsgRef" : 2,
                "onDeliveryReportCallbackDelay" : 12000
            }
        ]
    Copy to clipboard

Here, clients are expected to provide the inputs for JSON attributes of API according to an encoded message.

The table explains the configuration for API response parameters of *simulation/json/api/tel/ISmsManagerSlot1.json and simulation/json/api/tel/ISmsManagerSlot2.json*

| JSON attribute | Description |
| --- | --- |
| numberOfSegments | Signifies number of segments present in encoded message. |
| status | Status of request. |
| sentCallbackErrorCode,<br>smsResponseCbErrorCode | Response callback errorcode. |
| sentCallbackDelay,<br>smsResponseCbDelay | Response callback delay. |
| sentCallbackMsgRefs,<br>smsResponseCbMsgRefs | Add reference number for every message segment according<br>to numberOfSegments with one space between the digits. |
| deliveryCallbackErrorCode | Delivery report for individual segment is invoked using<br>delivery callback error |
| deliveryCallbackDelay,<br>onDeliveryReportCallbackDelay | Delivery report for individual segment is invoked using<br>delivery callback delay. |
| onDeliveryReportErrorCode | Delivery callback errorcode. |
| onDeliveryReportMsgRef | Delivery report for message reference of a segment. |
| receiverAddress | Input receiver address according to encoded pdu. |

Example for API command response for telux::tel::ISmsManager::sendRawSms

"sendRawSms" :
         [
             {   "receiverAddress" : "0909999994587",
                  "status" : "SUCCESS"
             },
             {
                  "smsResponseCbErrorCode" : "SUCCESS",
                  "smsResponseCbDelay" : 1000,
                  "smsResponseCbMsgRefs" : "1 2"
             },
             {
                  "onDeliveryReportErrorCode" : "SUCCESS",
                  "onDeliveryReportMsgRef" : 1,
                  "onDeliveryReportCallbackDelay" : 1000
             },
             {
                  "onDeliveryReportErrorCode" : "SUCCESS",
                  "onDeliveryReportMsgRef" : 2,
                  "onDeliveryReportCallbackDelay" : 1000
             }
         ]
    Copy to clipboard

Here, clients are expected to provide the inputs for JSON attributes of API according to an encoded message.

The table explains the configuration for API response parameters of *simulation/json/api/tel/ISmsManagerSlot1.json and simulation/json/api/tel/ISmsManagerSlot2.json*

| JSON attribute | Description |
| --- | --- |
| receiverAddress | Input receiver address according to encoded pdu. |
| status | Status of request. |
| smsResponseCbErrorCode | Response callback errorcode. |
| smsResponseCbDelay | Response callback delay. |
| smsResponseCbMsgRefs | Add reference number for every message segment according<br>to numberOfSegments with one space between the digits. |
| onDeliveryReportCallbackDelay | Delivery report for individual segment is invoked using<br>delivery callback delay. |
| onDeliveryReportErrorCode | Delivery callback errorcode. |
| onDeliveryReportMsgRef | Delivery report for message reference of a segment. |

##### Call

Currently the simulation framework supports outgoing, incoming voice calls, regulatory ECalls and AECS calls. It provides the flexibility to configure ECall HLAP timer failures maintained by NAD device.
Support for conference calls will be added in upcoming releases.

Details of parameters that can be configured in the Simulation framework.

- “configureFailureForRegulatoryECall” : To configure ECall HLAP timer expiry.

    Supported Values: SUCCESS, T5FAILED, T6FAILED , T7FAILED.

> 
> 
> -SUCCESS: Successful behavior during an eCall.
> 
> 
> -T5FAILED: This configuration would lead to expiry of T5 timer. The simulation framework depicts that SEND-MSD signal is not decoded successfully by PSAP so it shall terminate eCall specific behaviour (i.e. it shall not proceed with the sending of MSD data).
> 
> 
> 
> > 
> > 
> > When it is configured, T5 timer’s timeout is set to 5 sec as per EN 16062:2015.
> 
> 
> 
> -T6FAILED: This configuration would lead to expiry of T6 timer. The simulation framework depicts that AL-ACK message is not recieved by IVS-NAD so it shall mark the transfer of the MSD as unsuccessful and terminate eCall specific behaviour.
> 
> 
> 
> > 
> > 
> > When it is configured, T6 timer’s timeout is set to 5 sec as per EN 16062:2015.
> 
> 
> 
> -T7FAILED: This configuration would lead to expiry of T7 timer. The simulation framework depicts that LL-ACK message is not recieved by IVS-NAD so it shall mark the transfer of the MSD as unsuccessful and terminate eCall specific behaviour.
> 
> 
> 
> > 
> > 
> > Timer can be configured using telux::tel::ICallManager::getECallConfig(EcallConfig::t7Timer).

- “eCallType” : To configure service domain for regulatory ECall.

    Supported Values: NGeCall , CSeCall.
- “configureECallRedialFailure” : To configure redial failures for regulatory ECall.

    Supported Values: SUCCESS, CALLORIG, CALLDROP.
- “configurecallEndCause” : To configure call end reason for call.

    Supported Values: refer to telux::tel::CallEndCause.

These parameters can be configured via *simulation/json/api/tel/ICallManagerSlot1.json and simulation/json/api/tel/ICallManagerSlot2.json*.

##### Retrieve eCall MSD payload or encoded optional additional data content

To simulate retrieval of eCall MSD payload or optional additional data content, msdsettings.txt is copied to the application(ecall\_app) launching path in “out/bin/”. To modify MSD information, goto “out/bin/” and edit msdsettings.txt file.

##### Emergency Mode

Enables or disables the emergency mode configuration for the Automated Emergency Call System (AECS). When emergency mode is enabled refer `telux::tel::setEmergencyMode` on one subscription, the other subscription in DSDS (non-DSDA) mode will be suspended on the actual target device.

Limitation: In the current simulation environment, emergency mode behavior is limited to the subscription on which it is enabled. When refer `telux::tel::setEmergencyMode` is set on one subscription, the other subscription is not suspended. As a result, services such as outgoing and incoming calls and SMS on the other subscription continue to operate normally.
Guidance: Applications shall not perform any operations on the other subscription while an AECS call is active or while retrying a failed AECS call.

##### AECS Call

Emergency mode shall be enabled before triggering an MO AECS call or accepting an MT AECS call. Upon completion of the AECS call and MSD transmission, emergency mode shall be disabled. During an ongoing AECS call, the application shall not initiate any additional AECS or normal voice calls.

Configuration of AECS call status (origination failure, call drop, success, or failure) and call end reasons shall be completed prior to initiating an AECS call for correct call handling.

- “configureAecsCallStatus” : To configure AECS call status.

    Supported Values: SUCCESS, CALLORIG, CALLDROP, CALLFAIL.
- “configureCallEndCause” : To configure call end reasons for call failure.
Refer telux::tel::CallEndCause for cause codes.
- The receiver number or URN, along with the SMS send state and delivery report state for MSD transmission over SMS, must be configured in the `simulation/json/api/tel/ISmsManagerSlot1.json` and `simulation/json/api/tel/ISmsManagerSlot2.json` JSON file before sending the SMS. Refer “sendRawSms” example in the <cite>Telephony APIs Response handling</cite> section.

#### Telephony data handling

##### Card

Details of parameters currently configured in the Simulation framework to perform pin operations.

- “Pin1password” : “1234”  – Password for PIN1 operations for public APIs changeCardPassword, unlockCardByPin, changeCardPassword.
- “Pin2password” : “5678” – Password for PIN2 operations for public API changeCardPassword, unlockCardByPin, changeCardPassword.
- “Puk1password” : 11111111 – Password for puk1 for public API unlockCardByPuk.
- “Puk2password” : 22222222 – Password for puk2 for public API unlockCardByPuk.

file: `simulation/json/system-state/tel/ICardManagerStateSlot1.json and simulation/json/system-state/tel/ICardManagerStateSlot2.json`

**Details of supported apps, EF files, and records**

All the EF files are considered to be present at same file structure directory of simulated SIM files.

User input for filepaths provided using APIs present under telux::tel::ICardFileHandler is not validated in the simulation library.

ADF files

| AppId | AppType | Transparent EFs | Linear Fixed EFs |
| --- | --- | --- | --- |
| a0000000871004f310ffff89080000ff | ISIM | File Id 1234, 5648 | File Id 1234 , No of records 3 |
| a000000063504b43532d3135 | Unknown | No files present | File Id 1234 , No of records 3 |
| a0000000871002fffff00189000001ff | USIM | File Id 1234, 5648, 7777 | File Id 1234 , No of records 3<br><br><br>File Id 5678 , No of records 1<br><br><br>File Id 7676 , No of records 4 |

DF files

| Transparent EFs | Linear Fixed EFs |
| --- | --- |
| File Id 3456 , File Id 5666 | File Id 1234 , No of records 3<br><br><br>File Id 5678 , No of records 1 |

**Note:** Data stored in every record of Linear fixed EF file should be of same length.

##### Phone

Currently, the simulation framework supports the APIs for `telux::tel::IPhoneManager` and `telux::tel::IPhone` using the canned response configured in the JSON file: `simulation/json/api/tel/IPhoneManagerSlot*.json`, and events are injected through the event-injector utility using the JSON file: `simulation/json/Events.json`. When using events related to the phone, refer to `Events.json` and look for events under `tel_phone`.

Performing operations such as setting the operating mode (`telux::tel::IPhoneManager::setOperatingMode` API) on the target can have system-level impact, which could alter the response of other APIs within the same class or different classes, such as getting signal strength (`telux::tel::IPhone::requestSignalStrength` API), etc. Currently, this behavior is not implemented in entirety, but it will be in future releases.

Note: Some APIs, such as `telux::tel::PhoneManager::requestCellularCapabilityInfo` and `telux::tel::PhoneManager::requestOperatingMode`, provide device-specific information and are not specific to a particular subscription/slot. For these APIs, the JSON configuration is defined only in `simulation/json/api/tel/IPhoneManagerStateSlot1.json` pertaining to the first slot.

##### Serving system

Currently, the simulation framework supports the APIs for `telux::tel::IServingSystemManager` using the canned response configured in the JSON file: `simulation/json/api/tel/IServingSystemSlot*.json`, and events are injected through the event-injector utility using the JSON file: `simulation/json/Events.json`. When using events related to the serving system, refer to `Events.json` and look for events under `tel_serv`.

Performing operations such as setting the RAT mode preference or service domain preference (`telux::tel::IServingSystemManager::setRatPreference` API or `telux::tel::IServingSystemManager::setServiceDomainPreference` API) on the target can have system-level impact, which could alter the response of other APIs within the same class or different classes, such as getting signal strength notifications or change of current serving RAT etc. Currently, this behavior is not implemented, but it will be in future releases.

##### Supplementary Services

For reference, the default supported values for the call forward reason on initial launch are UNCONDITIONAL and BUSY. For other reasons (refer to `telux::tel::ForwardReason`), use the `telux::tel::ISuppServicesManager::setForwardingPref` API to update the call forward reason information. Then, get the expected response by using the `telux::tel::ISuppServicesManager::requestForwardingPref` API.

Details of parameters that can be configured in the simulation framework.
- “failureCause” : To configure failureCause for supplementary services.

> 
> 
> Refer `telux::tel::FailureCause` for values.

To simulate, No service as a failure cause.
**Sample input:**

telsdk_event_injector -f json_update -e modify /api/tel/ISuppServicesManagerSlot1.json ISuppServicesManager.failureCause 0x15
    Copy to clipboard

- “suppSvcProvisionStatus” : To configure supplementary services provision status.
Refer `telux::tel::SuppSvcProvisionStatus` for valid values of supplementary services provision status.

**Sample input:**

telsdk_event_injector -f json_update -e modify /api/tel/ISuppServicesManagerSlot1.json ISuppServicesManager.requestOirPref.suppSvcProvisionStatus 0
    Copy to clipboard

#### Telephony event handling

##### Incoming SMS

To simulate an incoming SMS, event injector is used by providing the inputs of encoded and decoded attributes of a message.

The client is expected to construct all the members of `telux::tel::SmsMessage` and send the message segment using event injector.

Simulation framework maintains the database to store the message attributes of an incoming SMS.

**Sample input:**

Segment-1 of multipart message:

telsdk_event_injector -f tel_sms -e incomingsms 1 2 1 1 GSM7 1 07918185690700F0240B918189486537F300003280126063128A0F54741934AFBB41F2F4BC3C07A501 +18988456733 The sun rises i
    Copy to clipboard

Segment-2 of multipart message:

telsdk_event_injector -f tel_sms -e incomingsms 1 2 1 2 GSM7 1 07918185690700F0240B918189486537F300003280126014208A0A6E101D5D0695C3733A +18988456733 n the east
    Copy to clipboard

- Incoming SMS will be stored on the simulation server only when the preferred storage type is set to SIM.
- It can be changed using `telux::tel::ISmsManager::setPreferredStorage`
- Memory full indication ( `telux::tel::ISmsListener::onMemoryFull` ) will be sent to all the clients when the messages count on
the simulation server exceeds the defined count specified in `simulation/json/api/tel/ISmsManagerSlot1.json and simulation/json/api/tel/ISmsManagerSlot2.json`

"requestStorageDetails" :
    {
        "requestStorageDetailsCb_maxCount" : 10
    }
    Copy to clipboard

##### Update subscription information

The event injector allows you to inject event for subscription information change.

**Sample input:**

telsdk_event_injector -f tel_sub -e subscriptionInfoChanged 1 Carrier-1 8984653739 89010020000011293999 310 11 310018984653739 ffffffffffffffff ffffffffffffffff
    Copy to clipboard

##### Update sim refresh event

The event injector allows you to inject event for sim refresh notification.

Sample: `telsdk_event_injector -f tel_card -e simRefresh <mode> <fileId> <filePath> <sessionId> <aid> <channelId>`

- **mode:** An integer representing valid sim refresh mode. The supported types are:-

> 
> 
> - RESET - 0
> - INIT - 1
> - INIT\_FCN - 2
> - FCN - 3
> - INIT\_FULL\_FCN - 4
> - RESET\_APP - 5
> - RESET\_3G - 6

- **fildId:** An integer representing Elementary file ID in card.
- **filePath:** An string representing Elementary file path.
- **sessionId:** An integer representing session type. The supported types are:

> 
> 
> - PRIMARY - 0
> - SECONDARY - 2
> - NONPROVISIONING\_SLOT1 - 4
> - NONPROVISIONING\_SLOT2 - 5
> - CARD\_ON\_SLOT1 - 6
> - CARD\_ON\_SLOT2 - 7
> - CHANNEL\_ID\_SLOT1 - 8
> - CHANNEL\_ID\_SLOT2 - 9

- **aid:** An string representing AID (Application Identifier), applicable for NONPROVISIONING\_SLOT1 and NONPROVISIONING\_SLOT2 session types.
- **channelId:** An string representing channelId for this session, applicable for CHANNEL\_ID\_SLOT\_1 and CHANNEL\_ID\_SLOT\_2 session types.

**Sample input:**

telsdk_event_injector -f tel_card -e simRefresh 3 28486 3F007FFF 0"
    Copy to clipboard

##### Update cell information list

The event injector allows you to inject event for cell information change related to current cell and neighboring cells.

Sample: `telsdk_event_injector -f tel_phone -e cellInfoListUpdate <slotId> ,<cellType1> <isRegistered> <p1> <p2> <p3> <....> ,<cellType2> <isRegistered> <p1> <p2> <p3> <....>`

`Note:` Cell information is separated by commas.

- **slotId:** An integer representing valid slotIds, which are 1 and 2 only.
- **cellType:** An integer representing valid cellTypes. The supported types are:-

> 
> 
> - GSM - 1
> - LTE - 3
> - WCDMA - 4
> - NR5G - 6
> - NB1\_NTN - 7
> - (CDMA and TDSCDMA are not supported)

- **isRegistered:** An integer indicating whether the cell is registered or not. Valid values are 1 (registered) or 0 (not registered).

Refer below for configuring different cells with their respective attributes in the same pre-determined order:-

- **GSM cell info:**

> 
> 
> - &lt;cellType&gt; &lt;isRegistered&gt; &lt;p1-MCC&gt; &lt;p2-MNC&gt; &lt;p3-LAC&gt; &lt;p4-CID&gt; &lt;p5-ARFCN&gt; &lt;p6-BSIC&gt; &lt;p7-Signal Strength&gt; &lt;p8-Bit Error Rate&gt;

- **WCDMA cell info:**

> 
> 
> - &lt;cellType&gt; &lt;isRegistered&gt; &lt;p1-MCC&gt; &lt;p2-MNC&gt; &lt;p3-LAC&gt; &lt;p4-CID&gt; &lt;p5-PSC&gt; &lt;p6-UARFCN&gt; &lt;p7-Signal Strength&gt; &lt;p8-Bit Error Rate&gt; &lt;p9-ECIO&gt; &lt;p10-RSCP&gt;

- **LTE cell info:**

> 
> 
> - &lt;cellType&gt; &lt;isRegistered&gt; &lt;p1-MCC&gt; &lt;p2-MNC&gt; &lt;p3-CI&gt; &lt;p4-PCI&gt; &lt;p5-TAC&gt; &lt;p6-EARFCN&gt; &lt;p7-Signal Strength&gt; &lt;p8-RSRP&gt; &lt;p9-RSRQ&gt; &lt;p10-RSSNR&gt; &lt;p11-CQI&gt; &lt;p12-Timing Advance&gt;

- **NR5G cell info:**

> 
> 
> - &lt;cellType&gt; &lt;isRegistered&gt; &lt;p1-MCC&gt; &lt;p2-MNC&gt; &lt;p3-CI&gt; &lt;p4-PCI&gt; &lt;p5-TAC&gt; &lt;p6-ARFCN&gt; &lt;p7-RSRP&gt; &lt;p8-RSRQ&gt; &lt;p9-RSSNR&gt;

- **NB1\_NTN cell info:**

> 
> 
> - &lt;cellType&gt; &lt;isRegistered&gt; &lt;p1-MCC&gt; &lt;p2-MNC&gt; &lt;p3-CI&gt; &lt;p4-TAC&gt; &lt;p5-EARFCN&gt; &lt;p6-Signal Strength&gt; &lt;p7-RSRP&gt; &lt;p8-RSRQ&gt; &lt;p9-RSSNR&gt;

Please note that CDMA and TDSCDMA are deprecated.

**Sample input:**

telsdk_event_injector -f tel_phone -e "cellInfoListUpdate 1 ,1 1 310 00 70 81 10 1 28 5,4 0 311 00 70 81 10 1 30 3 -10 -54,3 0 312 00 10 11 13 14 23 -50 -5 200 13 11,6 0 313 00 10 20 30 40 -50 15 300,7 0 314 00 10 13 14 23 -50 -5 200"
    Copy to clipboard

##### Update signal strength information

The event injector allows you to inject event for signal strength change with different RATs.

Sample: `telsdk_event_injector -f tel_phone -e signalStrengthUpdate <slotId> ,<Rat1> <p1> <p2> <p3> <...> ,<Rat2> <p1> <p2> <p3> <...>`

`Note:` Similarly to cell info updates, the signal strength event with different RATs is separated by commas.

- **RAT:** A string representing the RAT type. RAT is used for retrieving Signal Strength information. Valid values are GSM, LTE, WCDMA, and NR5G.

Refer below for configuring different RAT signal strength with their respective attributes in the same pre-determined order:-

- **GSM:** Use the following parameters:

> 
> 
> - p1 - Signal Strength
> - p2 - Bit Error Rate

- **LTE:** Use the following parameters:

> 
> 
> - p1 - Signal Strength
> - p2 - RSRP
> - p3 - RSRQ
> - p4 - RSSNR
> - p5 - CQI
> - p6 - Timing Advance

- **WCDMA:** Use the following parameters:

> 
> 
> - p1 - Signal Strength
> - p2 - Bit Error Rate
> - p3 - ECIO
> - p4 - RSCP

- **NR5G:** Use the following parameters:

> 
> 
> - p1 - RSRP
> - p2 - RSRQ
> - p3 - RSSNR

- **NB1\_NTN:** Use the following parameters:

> 
> 
> - p1 - Signal Strength
> - p2 - RSRP
> - p3 - RSRQ
> - p4 - RSSNR

Please note that CDMA and TDSCDMA are deprecated.

**Sample input:**

telsdk_event_injector -f tel_phone -e "signalStrengthUpdate 1 ,GSM 28 3 ,WCDMA 29 6 -10 -54, LTE 23 -50 -5 200 13 11 ,NR5G -50 15 300,NB1_NTN 23 -50 -5 200"
    Copy to clipboard

##### Trigger an incoming call

To simulate ICallManager event - telux::tel::ICallListener::onIncomingCall

**Sample input:**

telsdk_event_injector -f tel_call -e incomingCall 1 999999999
    Copy to clipboard

##### Hangup a voice call or an eCall

**Sample input:**

telsdk_event_injector -f tel_call -e hangupCall 1 1
    Copy to clipboard

##### Request to update Minimum Set of Data (MSD) for an eCall

To simulate ICallManager event - telux::tel::ICallListener::OnMsdUpdateRequest

**Sample input:**

telsdk_event_injector -f tel_call -e msdUpdateRequest 1
    Copy to clipboard

##### Trigger an modification request to change the call from a normal voice call to a real time text (RTT) call

To simulate ICallManager event - telux::tel::ICallListener::onModifyCallRequest

Command: `telsdk_event_injector -f tel_call -e modifyCallRequest <slotId> <callId>`

**Parameters of event injector command:**

- slotId: valid slotIds are 1 & 2 only
- callId: valid call index on which upgrade request was triggered by remote party

**Sample input:**

telsdk_event_injector -f tel_call -e modifyCallRequest 1 1
    Copy to clipboard

##### Trigger an event to send RTT message from a remote party.

To simulate ICallManager event - telux::tel::ICallListener::onRttMessage

Command: `telsdk_event_injector -f tel_call -e rttMessageRequest <slotId> <message>`

**Parameters of event injector command:**

- slotId: valid slotIds are 1 & 2 only
- message: valid string (text message) received from remote device.

**Sample input:**

telsdk_event_injector -f tel_call -e rttMessageRequest 1 GoodDay
    Copy to clipboard

##### Update RAT preference and service domain preference

To simulate IServingSystemManager event - telux::tel::IServingSystemListener::onRatPreferenceChanged,
telux::tel::IServingSystemListener::onServiceDomainPreferenceChanged and
telux::tel::IServingSystemListener::onRFBandPreferenceChanged

Command: `telsdk_event_injector -f tel_serv -e systemSelectionPreferenceUpdate <slotId> <serviceDomainPreference> <ratPreferences> ,<gsmBands> ,<wcdmaBands> ,<lteBands> ,<nsaBands> ,<saBands>`

**Parameters of event injector command:**

- slotId: valid slotIds are 1 & 2 only
- serviceDomainPreference: valid integer value is filled as per telux::tel::ServiceDomainPreference
- ratPreferences: valid integer value is filled as per telux::tel::RatPrefType
- gsmBands: valid integer value is filled as per telux::tel::GsmRFBand
- wcdmaBands: valid integer value is filled as per telux::tel:::WcdmaRFBand
- lteBands: valid integer value is filled as per telux::tel::LteRFBand
- nsaBands: valid integer value is filled as per telux::tel::NrRFBand
- saBands: valid integer value is filled as per telux::tel::NrRFBand

example - ratPreferences input is 012 for RAT preference PREF\_CDMA\_1X , PREF\_CDMA\_EVDO and PREF\_GSM

**Sample input:**

telsdk_event_injector -f tel_serv -e systemSelectionPreferenceUpdate 1 0 012 ,1 2 3 ,4 5 6 ,7 8 9 ,10 11 12 ,96 102
    Copy to clipboard

##### Update current system information

To simulate IServingSystemManager event - telux::tel::IServingSystemListener::onSystemInfoChanged,
telux::tel::IServingSystemListener::onDcStatusChanged, telux::tel::IServingSystemListener::onSmsCapabilityChanged,
telux::tel::IServingSystemListener::onLteCsCapabilityChanged and telux::tel::IServingSystemListener::onCallBarringInfoChanged

Command: `telsdk_event_injector -f tel_serv -e systemInfoUpdate <slotId> <currentServingRat> <currentServingDomain> <currentRegistrationState> <endcAvailability> <dcnrRestriction> <smsRat> <smsDomain> <ntnSmsStatus> <lteCapability> ,<CallAllowedRat_i> <CallAllowedDomain_i> <CallAllowedType_i>`

**Parameters of event injector command:**

- slotId: valid slotIds are 1 & 2 only
- currentServingRat: valid integer value is filled as per telux::tel::RadioTechnology
- currentServingDomain: valid integer value is filled as per telux::tel::ServiceDomain
- currentRegistrationState: valid integer value is filled as per telux::tel::ServiceRegistrationState
- endcAvailability: valid integer value is filled as per telux::tel::endcAvailability
- dcnrRestriction: valid integer value is filled as per telux::tel::dcnrRestriction
- smsRat: valid integer value is filled as per telux::tel::RadioTechnology
- smsDomain: valid integer value is filled as per telux::tel::SmsDomain
- ntnSmsStatus: valid integer value is filled as per telux::tel::NtnSmsStatus
- lteCapability: valid integer value is filled as per telux::tel::LteCsCapability
- CallAllowedRat\_i:  valid integer value is filled as per telux::tel::RadioTechnology
- CallAllowedDomain\_i:  valid integer is telux::tel::ServiceDomain::CS\_ONLY = 1 or telux::tel::ServiceDomain::PS\_ONLY = 2.
- CallAllowedType\_i:  valid integer is filled as per telux::tel::CallsAllowedInCell.

example - CallBarringInfos input is 14 2 3 for RADIO\_TECH\_LTE, PS\_ONLY and ALL\_CALLS.
**Sample input:**

telsdk_event_injector -f tel_serv -e systemInfoUpdate 1 16 3 0 1 1 1 1 ,14 2 3
    Copy to clipboard

##### Update network time information

To simulate IServingSystemManager event - telux::tel::IServingSystemListener::onNetworkTimeChanged

Command: `telsdk_event_injector -f tel_serv -e networkTimeUpdate <slotId> <year> <month> <day> <hour> <minute> <second> <dayOfWeek> <timeZone> <dstAdj> <nitzTime>`

**Parameters of event injector command:**

- slotId:    valid slotIds are 1 & 2 only
- year:      valid integer value is filled as per telux::tel::NetworkTimeInfo
- month:     valid integer value is filled as per telux::tel::NetworkTimeInfo
- day:       valid integer value is filled as per telux::tel::NetworkTimeInfo
- hour:      valid integer value is filled as per telux::tel::NetworkTimeInfo
- minute:    valid integer value is filled as per telux::tel::NetworkTimeInfo
- second:    valid integer value is filled as per telux::tel::NetworkTimeInfo
- dayOfWeek: valid integer value is filled as per telux::tel::NetworkTimeInfo
- timeZone:  valid integer value is filled as per telux::tel::NetworkTimeInfo
- dstAdj:    valid integer value is filled as per telux::tel::NetworkTimeInfo
- nitzTime:  valid string value is filled as per telux::tel::NetworkTimeInfo

**Sample input:**

telsdk_event_injector -f tel_serv -e networkTimeUpdate 1 2004 08 01 06 11 23 8 3444 2024/01/12
    Copy to clipboard

##### Update RF band information

To simulate IServingSystemManager event - telux::tel::IServingSystemListener::onRFBandInfoChanged

Command: `telsdk_event_injector -f tel_serv -e rFBandInfoUpdate <slotId> <band> <channel> <bandWidth>`

**Parameters of event injector command:**

- slotId:    valid slotIds are 1 & 2 only
- band:      valid integer value is filled as per telux::tel::RFBand
- channel:   valid integer value is filled as per telux::tel::RFBandInfo
- bandWidth: valid integer value is filled as per telux::tel::RFBandWidth

**Sample input:**

telsdk_event_injector -f tel_serv -e rFBandInfoUpdate 1 86 88 23
    Copy to clipboard

##### Trigger network registration rejection

To simulate IServingSystemManager event - telux::tel::IServingSystemListener::onNetworkRejection

Command: `telsdk_event_injector -f tel_serv -e networkRejectionUpdate <slotId> <rejectSrvInfoRat> <rejectSrvInfoDomain> <rejectCause> <mcc> <mnc>`

**Parameters of event injector command:**

- slotId:    valid slotIds are 1 & 2 only&lt;br&gt;
- rejectSrvInfoRat :    valid integer value is filled as per telux::tel::ServingSystemInfo
- rejectSrvInfoDomain : valid integer value is filled as per telux::tel::ServingSystemInfo
- rejectCause :         valid integer value is filled as per telux::tel::NetworkRejectInfo
- mcc :                 valid string value is filled as per telux::tel::NetworkRejectInfo
- mnc :                 valid string value is filled as per telux::tel::NetworkRejectInfo

**Sample input:**

telsdk_event_injector -f tel_serv -e networkRejectionUpdate 1 14 2 1 810 10
    Copy to clipboard

##### Update network selection mode

To simulate INetworkSelectionManager event - telux::tel::INetworkSelectionListener::onSelectionModeChanged

Command: `telsdk_event_injector -f tel_network_select -e selectionModeUpdate <slotId> <selectionMode> <mcc> <mnc>`

**Parameters of event injector command:**

- slotId:           valid slotIds are 1 & 2 only
- selectionMode:    valid integer value is filled as per telux::tel::NetworkModeInfo
- mcc:              valid string value is filled as per telux::tel::NetworkModeInfo
- mnc:              valid string value is filled as per telux::tel::NetworkModeInfo

**Sample input:**

telsdk_event_injector -f tel_network_select -e selectionModeUpdate 1 1 460 00
    Copy to clipboard

##### Update network scan results

To simulate INetworkSelectionManager event - telux::tel::INetworkSelectionListener::onNetworkScanResults

Command: `telsdk_event_injector -f tel_network_select -e networkScanResultsUpdate <slotId> ,<scanStatus> ,<operatorName1> <mcc> <mnc> <rat> <inUseStatus> <roamingStatus> <forbiddenStatus> <preferredStatus> ,<operatorName2> <mcc> <mnc> <rat> <inUseStatus> <roamingStatus> <forbiddenStatus> <preferredStatus>`

**Parameters of event injector command:**

- slotId:           valid slotIds are 1 & 2 only
- scanStatus:       valid integer value is filled as per telux::tel::NetworkScanStatus
- operatorName:     valid string value is filled as per telux::tel::OperatorInfo
- mcc:              valid string value is filled as per telux::tel::OperatorInfo
- mnc:              valid string value is filled as per telux::tel::OperatorInfo
- rat:              valid integer value is filled as per telux::tel::RadioTechnology
- inUseStatus:      valid integer value is filled as per telux::tel::OperatorStatus
- roamingStatus:    valid integer value is filled as per telux::tel::OperatorStatus
- forbiddenStatus:  valid integer value is filled as per telux::tel::OperatorStatus
- preferredStatus:  valid integer value is filled as per telux::tel::OperatorStatus

**Sample input:**

telsdk_event_injector -f tel_network_select -e networkScanResultsUpdate 1 ,0 ,CMCC 460 00 14 1 1 1 1 ,CU 460 01 14 1 1 1 1
    Copy to clipboard

##### Update IMS registration status

To simulate IImsServingSystemManager event - telux::tel::IImsServingSystemListener::onImsRegStatusChange

Command: `telsdk_event_injector -f tel_ims_serv -e regStatusUpdate <slotId> <regStatus> <rat> <errorCode> <errorString>`

**Parameters of event injector command:**

- slotId:           valid slotIds are 1 & 2 only
- regStatus:        valid integer value is filled as per telux::tel::RegistrationStatus
- rat:              valid integer value is filled as per telux::tel::RadioTechnology
- errorCode:        valid integer value is filled as per telux::tel::ImsRegistrationInfo
- errorString:      valid string value is filled as per telux::tel::ImsRegistrationInfo

**Sample input:**

telsdk_event_injector -f tel_ims_serv -e regStatusUpdate 1 2 20 0
    Copy to clipboard

##### Update IMS service information

To simulate IImsServingSystemManager event - telux::tel::IImsServingSystemListener::onImsServiceInfoChange

Command: `telsdk_event_injector -f tel_ims_serv -e serviceInfoUpdate <slotId> <smsStatus> <voiceStatus>`

**Parameters of event injector command:**

- slotId:           valid slotIds are 1 & 2 only
- smsStatus:        valid integer value is filled as per telux::tel::CellularServiceStatus
- voiceStatus:      valid integer value is filled as per telux::tel::CellularServiceStatus

**Sample input:**

telsdk_event_injector -f tel_ims_serv -e serviceInfoUpdate 1 0 2
    Copy to clipboard

##### Update IMS PDP status information

To simulate IImsServingSystemManager event - telux::tel::IImsServingSystemListener::onImsPdpStatusInfoChange

Command: `telsdk_event_injector -f tel_ims_serv -e pdpStatusInfoUpdate <slotId> <isConnected> <pdpFailure> <dataCallEndReason> <apnName>`

**Parameters of event injector command:**

- slotId:             valid slotIds are 1 & 2 only
- isConnected:        valid bool value is filled as per telux::tel::ImsPdpStatusInfo
- pdpFailure:         valid integer value is filled as per telux::tel::PdpFailureCode
- dataCallEndReason:  valid integer value is filled as per telux::common::EndReasonType
- apnName:            valid string value is filled as per telux::tel::ImsPdpStatusInfo

**Sample input:**

telsdk_event_injector -f tel_ims_serv -e pdpStatusInfoUpdate 1 1 0 2 IMS
    Copy to clipboard

#### Additional notes

Currently, the simulation behavior for Telephony is as follows:-

1. Support for encoding of text messages provided by the client for `telux::tel::ISmsManager::sendSms` will be added in future releases.
2. Support for subsystem restart notifications provided using `telux::common::IServiceStatusListener::onServiceStatusChange` will be added in future releases.

### Location Simulation

This section has details about the simulation for APIs under the telux::loc namespace.

#### Overview of Location Simulation

The location simulation framework provides the ability to record location data from an actual Telematics device.
Applications using ILocationManager APIs will get reports from this recorded data.

![../_images/simulation_location_overview.png](data:image/png;base64,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)

Location Simulation Framework

#### Configuring Location API responses

The framework allows responses to each API to be configured via a JSON file.

Each location manager has its own JSON configuration file. Clients can configure these files for:

**Location Manager:** configured via `simulation/json/api/loc/ILocationManager.json`

Example:

**API command response for startBasicReports**

"startBasicReports": {
        "callbackDelay": 400,
        "error": "SUCCESS",
        "status": "SUCCESS"
    },
    Copy to clipboard

**Location Configurator:** configured via `simulation/json/api/loc/ILocationConfigurator.json`

Example:

**API command response for configureRobustLocation**

"configureRobustLocation": {
        "callbackDelay": 400,
        "error": "SUCCESS",
        "status": "SUCCESS"
    },
    Copy to clipboard

**Dgnss Manager:** configured via `simulation/json/api/loc/IDgnssManager.json`

Example:

**API command response for createSource**

"createSource": {
        "callbackDelay": 400,
        "status": "SUCCESS"
    },
    Copy to clipboard

#### Support for location reports and notifications

Events supported from LocationManager:

1. Basic PVT Location reports.
2. Detailed PVT Location of different engine types, NMEA, SV, Measurements, Jammer and Disaster Crisis reports.
3. Location system info change.
4. Location capabilities update.

Events supported from LocationConfigurator:

1. Xtra status update.
2. Gnss signal update.

#### Format of location reports

The location simulation has the ability to provide data to clients that is
prerecorded/captured from the target device in the form of a CSV.

**Reports captured via CSV currently:**

Basic PVT location report.

Detailed PVT Location report for different engine types, NMEA, SV, Measurements, and Jammer reports.

**Data representation:**

1. Each row of the CSV represents a complete iteration of the report at time interval T.

**Data reporting:**

The location reports are reported at the same frequency with which they were recorded
in the target.
On reaching the CSV’s EOF, clients can configure if they wish the CSV to be replayed
via the “sim.loc.location\_report\_replay” configuration in tel.conf.
If the replay configuration is not selected, the location reports are stopped.

**Client usage:**

1. The prerecorded/captured CSV file is present by default under - `${ROOTFS}/data/telux/csv/PRE-RECORDED_LOCATION_DATA.csv`.
2. Clients can configure the retrieval of reports via tel.conf by modifying the following fields:

> 
> 
> **sim.loc.location\_report\_file\_name**
> 
> 
> Clients are requested to refer to the documentation of these fields under tel.conf for further usage.

#### Recording utility for Location Reports

The goal of the recording utility is to capture the location reports running on the target device
so that the collected data can be used for the off-target SDK simulation.

**Reports supported by the recording utility currently:**

Detailed PVT Location generated by FUSED Engine type, Detailed Engine Location report based on engine type specified, NMEA, SV, Measurements and Jammer reports.

**Data representation:**

Each row of the CSV represents a complete iteration of the report at time interval T.

The report is represented by a string containing the fields separated by a comma(,).

**The tool to capture data is provided under:**

- `simulation/scripts/record_location.sh`
- `simulation/scripts/record_location.bat`

**Client usage:**

1. Connect the target to the PC.
2. Ensure that adb is available and restart adb as root by running “adb root”.
3. Run the record\_location script and capture the data in a CSV file by passing the file as an argument.
4. At the beginning of the generated csv file, the copyright is added automatically. Each line starts with double number sign(##).
If any new copyright is needed, please follow the same format by adding “##” at the beginning of each line.

#### Additional Notes

Currently, the simulation behavior for Location is as follows:-

1. Dgnss report injection is not supported.
2. Inter-manager dependencies are not supported.

### Audio Simulation

#### Overview of Audio Simulation

This page and the subpages provide information about Audio subsystem simulation.
Audio simulation utilizes the Advanced Linux Sound Architecture (ALSA) library and Linux sound devices for its operations.
The ALSA framework provides comprehensive audio functionality for Linux which includes recording and playing of audio streams using
the host machine speakers and mic.

Audio simulation supports the following features.

| Audio feature | Description |
| --- | --- |
| Voice Call | Predefined canned responses supported. |
| Playback | ALSA library responses supported. |
| Capture | ALSA library responses supported. |
| Loopback | ALSA library responses supported. |
| Tone | ALSA library responses supported. |
| Endless Playback | ALSA library responses supported. |
| Incall playback | Predefined canned responses supported. |
| Incall capture | Predefined canned responses supported. |
| HPCM | Predefined canned responses supported. |
| Transcoder | Predefined canned responses supported. |

![../_images/simulation_audio_overview.PNG](data:image/png;base64,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)

Audio Simulation Framework

#### Audio simulation system requirements

##### Linux audio packages

- The following linux audio packages are required:

alsa alsa-utils alsa-tools pulseaudio pulseaudio-utils libasound2-dev
    Copy to clipboard

- For example on Ubuntu 18.04, these packages can be installed using the below command:

apt-get -y alsa alsa-utils alsa-tools pulseaudio pulseaudio-utils libasound2-dev
    Copy to clipboard

- References:

1. [ALSA](https://alsa-project.org/main/index.php/Main_Page)
2. [PulseAudio](https://wiki.ubuntu.com/PulseAudio/)

##### SoundCard

A sound card (also known as an audio card) is an internal expansion card that provides input and output of audio signals to and from a computer under the control of computer programs.

Tests should be performed to make sure both ALSA and PulseAudio are properly recognizing host machine’s audio hardware. Notable places to check:

- Check to determine if the soundcards are detected by the system:

cat /proc/asound/cards
    Copy to clipboard

- Check to determine if the soundcards are detected by ALSA:

aplay -l
    arecord -l
    Copy to clipboard

- Check to determine if the soundcards are detected by PulseAudio:

pactl list
    Copy to clipboard

- If no soundcards are listed, virtual devices can be emulated using the following steps on the host-machine and docker.

# Start the pulseaudio server
    pulseaudio -D --exit-idle-time=-1
    
    # Load the virtual sink and set it as default
    pacmd load-module module-virtual-sink sink_name=v1
    pacmd set-default-sink v1
    
    # set the monitor of v1 sink to be the default source
    pacmd set-default-source v1.monitor
    Copy to clipboard

##### ALSA devices

Audio simulation supports configurability for ALSA devices and amixer control devices. User configurable settings available in `/etc/telux/tel.conf` are listed below.

| PCM\_DEVICE | This is used to configure ALSA devices.<br><br><br>To list all the ALSA devices, use below commands:<br><ol class="arabic simple"><br><li><p>aplay -l</p></li><br><li><p>arecord -l</p></li><br></ol><br><br>Example: PCM\_DEVICE = h3:0 |
| --- | --- |
| SND\_CARD\_CTL\_DEVICE | This is used to configure soundcard control-device.<br><br><br>A ctl device (“control-device”) on a soundcard is<br><br><br>used to help the user control several aspects of<br><br><br>the soundcard’s behaviour. The main use is to control<br><br><br>the mixer. To list all the soundcards, use below<br><br><br>commands:<br><ol class="arabic simple"><br><li><p>aplay -l</p></li><br><li><p>arecord -l</p></li><br></ol><br><br>Example: SND\_CARD\_CTL\_DEVICE = h3 |

#### Supported interfaces

IAudioBuffer, IAudioCaptureStream, IAudioDevice, IAudioLoopbackStream, IAudioManager,

IAudioPlayStream, IAudioStream, IAudioToneGeneratorStream, IAudioVoiceStream, IStreamBuffer.

#### Audio API response handling

An audio API response can be configured through a JSON file.

Audio manager has its own JSON configuration file present under `simulation/json/api/audio/`.

Clients can configure the inputs for JSON attributes of API request statuses and response error codes.

If the client configures the API behavior to mimic an error scenario by setting the response error code
to anything other than “SUCCESS”, the audio server’s response will be modified to simulate the erroneous behavior.

##### Example 1:

API command response for telux::audio::IAudioManager::getStreamTypes

"getStreamTypes": {
        "callbackDelay": 400,
        "status" : "SUCCESS",
        "error" : "SUCCESS"
    },
    Copy to clipboard

When the async response to a IAudioManager::getStreamTypes request is ready and the “error” field is set to SUCCESS,
the server sends the response to the client without making any modifications.

##### Example 2:

API command response for telux::audio::IAudioManager::createStream

"createStream": {
       "callbackDelay": 400,
       "status": "SUCCESS",
       "error": "INTERNAL_ERR"
    },
    Copy to clipboard

When the async response to a IAudioManager::createStream request is ready and the “error” field is set to INTERNAL\_ERR,
the errorCode in the server’s response is modified and overwritten with the JSON value from the error field.

#### Audio event handling and notifications

##### DTMF Detection:

DTMF tone on the voice call downlink path can be detected and reported to the application.
The application needs to register a listener using the IAudioVoiceStream::registerListener API.
The IVoiceListener::onDtmfToneDetection() method is invoked to notify of the detected DTMF tone.
In a simulated environment telsdk\_event\_injector is used to inject the DTMF tone in the downlink path.

Sample input:

telsdk_event_injector -f audio -e dtmf_tone 697 1209
    Copy to clipboard

##### Modem SSR:

In this scenario the modem crashes and the audio lower-layer notifies the server that the modem has crashed. The server
needs to notify all clients about the modem crash and clean all underlying resources used.
To receive this event notification, the client needs to register a listener using the IAudioManager::registerListener API.
The IAudioListener::onServiceStatusChange() method  is invoked to notify of the new status.

In a simulated environment telsdk\_event\_injector is used to inject a modem SSR event.

Sample input:

telsdk_event_injector -f audio -e ssr SERVICE_AVAILABLE
    Copy to clipboard

#### Additional notes:

1. Device switching for all streams only supports canned responses.
2. For compressed playback, TelSDK API behavior is simulated using PCM playback internally since ALSA doesn’t support AMR codec. The call flow and API behavior remain similar to on-target compressed playback.

### Data Simulation

#### Overview of Data Simulation

This page and the sub-pages provide information about usage of simulation for the data
sub-system that are part of the telux::data namespace of the Telematics SDK.

![../_images/simulation_data_overview.PNG](data:image/png;base64,UklGRvJRAABXRUJQVlA4TOZRAAAvXES8AFUPw7ZtwyT/f912k+wLIkKB2zbKeIejV0wVt7ZlkDVGswvx/p7AnCkeE6aoDAazFcS3nBg+cqCFySfuiGsZBRtW7UMqHDsqBDcMsdsdu58D3xDMp537mZsNk5+0nlARJ2K0OPs3S5Il5RIaXljwwoIXJixYMOGFDRsmTNiw4IUFEya88MKECQsmTFhwrpDO9///v2Pm5m7Hzaxv9OC7aPkmGlsjly6OwKZExXwDJZ0rBQzlAuKCgxo7CMcHBi0U8FtBSD25q6ZvF0c9G3USzEmPm7Cd2A4CBMkerWoZQawnGrDmKlNjpyUlKttFwYNqET2dTQS93zoKxSK8hh30FCxiGz1ZD76Ey0Jt+u8ikLFcRA+2h9bBB3tPrHQDHSlhLOLIl9A4pQ81jAVY4GZOrmQ8VhDId+KCqW172OyxBmOL7cNgsVgcFos7hB1CDqGHMAwOh8PUisHMUvtm339dP8DYtj1s9Ww75+TDWGMNBmsbFoP5CcODweKHw+CwGCwWi6sNh8PuH3TWf1qQbYdtmwObLmlQOg+JXwESpKV8Ym0A0JIkSQcXHly4JixMmDBhwYINCyZsOHDhwIUNBzYcuFp08ODBg2fEP6sqp6um8kW+F3n/MuJ+4cThSB+OJQgnCrU0YUVJg8KEuk9pYJiwQ+8XBqQL/bxo5ZUBozag7NhfkLYjPImSxooCE25MBwgjrpOGCcMChtQWpAXhxqFnwMK2Yej92pP25EnrR0U9M/Zz4USjBOFE4LCiYIcJmbBR2JAaHgaMJ41OaqlVUmudaKnsKD3BtG09E3MwODgYDLWxvkYf+b+9+GFw8MOLF2Hc1iy2+vDDwbE3GAwGg8HBD+cnBIsXgxeDwWKxWCwWi8U+Kwb7Lwu23bht7qNs7XbQWs4CAoQ/z0BjSznrP2f956z/nPWfs/5z1n/O+s9Z/2lY4NvgHfgWeAtwSaymPZJvBWbzNhBWSjOTksZBUcqavwt0QjtqW7gPQGhQjlbTARSamQ6AWRuyYZi1NAAlC4BqNX1OGgCbgnLkkhpG3vyyYLU8AJYEcE7mqE0iabXyNb9hZjoAF81vS2h++d8PefPrBQogMVrSalxq83MpzW+0iz/HRBZAic2flK35S/4x4RICsNojQq6Bb4A3QBOsgCtgvZK3QMWq6+AqWP80pm+C5uSbgNDKLPPnYEJIxg4Zlmj2FWvVIgLIDFvKcRozJxlhnCXMcYsKwDBnE0LZMhtCqvkZ0GxCIvTWZ4FZDQljv2AOp4RjblkP+4Sj0mxbhPLAoaBaOGe2VADTgrkY0M1vAiqAwrCimt+3zCHV/DmzHlLNX7BWVACZZRNTAcSaVUYFkDCHLSoAwzxsEhoJn9NTIoCBYVMQwbYCN80/IDQCy0w1/yTRbKZEPFNmnTQJqYDZBoTxIKSbvzlUrAOiYfqFYTuYEI6GuWgSjgGzzokAWiGz8qnmV2ziFtX8hlVGBaCYC6r5A80cUPEUzGZANb9lQzm2As1q2CQCKJgLWfMHE0Kj0MxTIpyWYZ0QUv0hs8179I+JNsbT7Yox+23Aojr4KvgKePHLoI2+DhSDGam5/ml8IwSa41dgF2tMEuasQ0hmmnmCJXY7BevkGwBrfBImllV2H2t0M+ZwQgUQMmcjKgDLPPk6IJSVw6cAW5z0NNuAkBoNmIs+YdyLmYerhONAse4TDXNaGNGuhCOzDgjj+wNm1SJabTVnnY8JqVbCdkrEPsoNF6tE7E3FHNwnIhg4UAGcxqwLKoCmYpt1iAAyw0WTCiBkHlLN71vmPiG1G7I2VJOOLdugI2n+FtWkOXOwSrVEwtzqELHHhk13l2hhzTomjDtTZjUljFcD5rxHBNsqWFPNf5pbVmOiYcZWc041U4vZDIgARgHrggqgWbDJRkQAmeWkeZ9otUJzQP39mBrm6S6hnLO2VACrCZucaomp4aJFtYSs+aeKedohGiZ3WCUsupZNSEh1WsxqQAQ78plVPgyt9m5UEWHMsB69eGTS9YrVilV5vP5pTGLNRb+LNQaKOSCkRjkzT7FEd5ywVk2ssTo1bINVIoCAuSAcR9OCOSAcR4FhHqwSyoIeYdHSbGIi9N6QORkQxq2QOZ8QsQ8dBmPCMdGsmoRyi5lDqoWHzNYnNCYhc9gngvUVm4yIvRkbTvpUAJY5XiWUhw4+EXovZJ1QAUwdAiqAQHMy7dLNnzepAAyzT0h1C2YzIQLoGzYx1aQZc+JLmj8mHEeZYvbHhHKh2UyIeCYOIWExzhwyqvlj5rBFhO4r1lTz92LDqk80eN9oDlcJx8whG1GOzEmLav6ETUAFEBhWU0K5lWiOe1SrGeasSyiHzJYKoK/YhFQAmWHlUy0RMsd9SfNnY0IjdCCkuk3LuiCkxr7DcET/mATj+Sizno1SWfPSLXwt1Nto3a9o1j8NcAQkITTAZsIiBINnwrgwYrP7ACyzUYSxMsw2ITTAQQ7CEWwmLOBmSsNNAIYKVhqAYdYJFTszm5AOQKtQ0sIltJosALiZajV583PJzV9IWs1980sDSLS8+bX75g/L0fyyP1ZbUvOzJQPQkgC0qwDoYI1y3fyFBZslwRaSVrPlbf5C2mol/ZjQAZTW/JY57J/sdiah8WbfNYp5aJeMEYKZSCEbT1dPTpqxJ/swgfnitVyKHX++Dca7837oybaNHh3GBmZiR4ubL8H+1IN9scP9QzvETPSQCU73x7EH+9qPaI6ZCKKk1RkH3otgNXJKJoZg4smg8F749yPVEEn65BijvRj7GmY9K4pbk4iJJNgkMZo9Y/mVt/svkb+uv1V+h//l9+trKbri9bm++T4juWgP8vb18dLC67l3pf4SemaHEHDP1VeW/RngtZtGorj1u/lKTmdOSuHCgeO75ZIzrK/E9L6kEWo9DzydhsYbc+EA8/AVq+vQLnJN6eXCK5beJxPX9sNnZeemML1wsFeeZFjjwR+dZtZz8xpPkDiOX0u8lFgwjveIBITykEtKbp3jaKv2xeD0vu+1MOEwrzYOGixtoSdY5+MoivYQb7b3S0t6JnzefCO4+hwJ3b4oRlYObzILX5Ddrj5/PXvH6tr7UJ7qGN3cIkDpEmuDoZZQBVw4APVgXNuvpfA82qNT7u03OVOWvH3tdakisqvPQXwXDkqK/fZLKb3Oy2mDuhWqud/RN46zXWSoaAtlly168XaR5+vMt19KemZfHa4+3wMHfeCBn+0bt45BRrpxCxJtQaGbMAiBML4l4fZFob1H2AEhB+By4UAE5whuR+tI++IW1VARYbUHBHAzgVGe29hvX7xxi7kux+112kP57ea1M+cHDc1onm07meN4DySjLz5jUNVRwXkROEL2YOpynOFICX+HRGivQwURyE1iqHbmXC8iaxCHSJiSBsCdJ8IKxCwQbVBS7CI65vreQuQQlMCiG7fkHIuBzxbMDnC85BweIjaTrENQECgtba+zHEcbZ7J1xCt5P0B5DqY9kTWlQCsipxKA2JxV17E7Pa46INfeRyLHkThWIsHJCxdeWvTWbbACtjisl0aETnbjR5WvONqYLUT0+w7WwSEgUADkCqHgCpBmt1zHXidE0sk5jvYk8M297T12cEzBSpkWTHxHghjS4cXebbBAtk5MxNgJgqrgJyD6UxLEEK6k2OuAUJvfxxlFwvbD37slwIdV9oRhKThBwLSEHlUCzkOo67RHcNv5huMB85BA1jrH0RaxWQIMdztyHTukDrgbyhvwPJKECwc3bsFFtCVqiZy3Dg4DuUScIRLi1KNKJ+9Jd3N6N8LpGJ5gAoIC+eQ9ajdiQUYZrbuNvaZCMOkFxouCp6OQE2huRtfex+BUB4/Yrt8EKQ54ugRP1qG+I7/sQGjDuC4cABUHkFjxDBoaPo5QGHj2DYEQ2QKzbN4u28U9l7HXVOAkDxLtyRBT1EiMyae+IZq8/xeh1Y0rrw4hb/VjU3uhnvVAWhUJ7l3BDCctQ1TBi+121n/OTgWH/iA0jSsYpYz2Wkz2T0NuWCl2OuoVDSyvBL7IY1M32ZxlhWlc+d9/Nu4OvdZurLVubLnVQ2EaV7D+eJI0uEzeO+s/n8+HTiPLrR5sUVjdSPw7qlXrfreB5WpsE7R81cByqwerlK6X/IQGzV7gyS7/a1x5IDbWNrL8Avx8mi09mzGBWmG4DvXQ6qwuJbvhKir1sNCgVkUYlpFBMILzDMaRptgWN2FXXEpUvcKoDVJ6smRRXuOs86uPH9TqcjTi1IodjaA1Ks2R6pyN8b0yXiv38+p9f+O+vTFv37iv3/3GvMKrvvvdp29ct+b9uHK9lsanNk5LziOC0MBak7M2cGv5el+97m/O4621vb0v39or/Or6atdmf/rJxUtJjdAZOJL55cr1/Ml+S99+WeFX+/v79767dH245RNkhqFYF83r8ZN7q2u+/brCr1ZXXN/t8ORlUoA2X5Jk+ZAGCaWX7z/Z31+3BoZX7N9/eMtKCXDdXAmDMwyVX3x3v7UHRPOttd5fHu+RHWHoTYDPweC8Fya8dd+aoLo9W+Ij+RXshnoIPTBUgK0tA/Ph9dlawHU7/LGVGpC7wEDRzSSno8N70M1P3qdyBN4E+JBWQv/oweoyZPP2unzBpQh2E+BHIRAS4BNvdAvCef4et0rY7Y3tUbtYGrhYBbbbf3IKuxjJVwFfCh6oSkcX11aHcJ6NagB6kR+ZSwQnaIfjCL2f1OMIlC3qnW5fOHj4rMGDbfiGda+9j97J7oWDdQT8B8ho7AD8syCgt7b88Bn5RpjRZ4MHty+uu3yD73vgs8FjM3rn7hLgv+/B3tXnlfTJcC7RXJzf5SY4ekyyLfiPz6M9riRCL9WJCA/+h0G4cUtGdOP/ResV9wvwUR07REEiyACrkFaSR0IC5QyOjlMSMGVQrefXHEfr9Ar47s2Hz7z9rR5y20k8ITubRNkhRHawzw70QjcPJU12kHJZ2pw2JOKhAyYNqjRXn+9RVdap3bz81djYKCPjBdnZfPm+RLC8hH1DFWWqT69j9OnnY3NHPFIUvXZMm/AJoshx2dx8Y84HQm7ztbUAoa/tII/yBPdh9PLn/bmQUVifWRWGiANyhBx/qPCZft/cqa6QmczFA/GFg73KobwO/O5sHNrek52dHQDMZeDDAScfiPMpxL6GIQZttIBs2EWCkiWJY+SAP9C4rHrOrwHdouMbt9xM3uPtyqmDPWqqVTeGV1wBKQePjSCiE/MFx+cl3OcsQw3Rz/kS5GP4iSEGbS4FdqAAwc7m58b/i8GnZQISREDBLyP/H3CyKfaumivbpVx2wDejdQ9/q4fyOiiMV6yC+IMXQbcIAPKVSEC/DEZnyE2APjGfcbcD0M8RIyoo8CHoXCGTr8IkGc1emwrBx9HsjZidUR1CJLnoC2CYB8MnvGt8F0xWKY0Lb8jXEGBMhLpIIMOBDs0mAmQ5mMRmf48CjaKQgZOaPsRDt4+RADqkA4DrX9r8gehLrheU905tDyN5ZIaeEpBtRD3Uk/kYpjiCP3hRAA8AUYi89AOO9YfRl0DfB4iDHPUDjoSo9wcvAiUI7CDBHhqx+atEcgx+mfCu+SF3m/zBiyjF4Cy2+QMgzciZfXoenVQn2fyxyH0gR4F8FYnkSOSpL0GrDxFAEvhCgCVCCGJvZ6UujWMAF04Bx4xlK0CQrOLkIbAfHHyBThJMT5ivQj4GgHWcytDK5iZ1QNqJD3vXoRdf2CQO7qAR04cEIC3hBxKjJdniB5A5Eo++ROSpv3RALcS6A3VMCZx0p06lO1kPe9eb2fz/ot4PwM2g/hecFIQAI6YvbQLwgRty81dFXaAKxIUqOCr8By/KNqN1eIJdQA7roALhXYW4+jzacsvxjVtXn6+74rXb8xnfvrjl4eliDwNz+sBmF5P3HE0wh1ey2w9ggY8lAvicdhRBcC9JpDyXEN5ViAv//TX02vvucetTObfXvA6SpCCoDydFSU5L/f8IaRAHZ/CwafMHwMEYcn4NGGZ94UPU1YpA6vsYZbLND4n5NY4eumDhQ8fcBcQH2LPqcPPamzI/fLZIYVFYGBjZ8bUddAx3k3iCHSADdCQXTGIlQs2FnMspwrQCzGOySzQpBUq36nD74jq8392FL/7YQRRtMW9f++PiJg94hbjpA184iBwxMGl43VmBItfeR6YLd5U25AH+aA9iP+IJoAylI73Hg/xmDW4MKG8X4jhS7EDrULrVh+OHz8RtHNAvEzgGScvRuHnjFgJez7R949aFgy1wx3CgKjiO1uHNw7ejPSDgjX8Bvj+sEGqQKvE9kcoE61AD/MYBpxeF2UbZahumvi0Mvjh7S2S8BRqkGWHYdS0wMzOECugGOelJrDyDx3dgEru5hxCXSaIC9iIQozjo7JguDLhwkoKI2mxHoNy4VRLrOP85Wy4ckGxJWaAHEq2hf3njFmIbcfW5i8VNuOJise6pMW9Af2AgPd6NZQZHgdHmPUabt/Dmm3AzfJrtyM3mhaYbOwydchNOoRGJDO728Bna7dr79G5CyHEUtdZd7NawwO2Le/hp1i8cvF45AJNktm+8ThXTZiTza4TQ1efOI/2Ti3tCYI+YX7PHXK9fLMzITHCrFnLB5L/3tnDxpHcF4o1uwTjN+8EpGosjg9XRJaSPIhOsFIoTEiiD5S9H35z78/07kM3996kdgfUlqusGhjM0yfzu9d2gm2+u/RPLAXCd7nBGKPMvIPvAO/vPn55IagW7VRoXeUxAQOnVwKdvzgO2id+/tHUCVKJCg7XqTiqNvnyvtQjVe//ZBU0IUC8SWEtsjXRdd0vFX6xIpicPWzvfuQPDm9ZEGL22+j9c2jljkHsircKCAKIi/GXw4OTpfXiurfH5n71/2eD0DOjFDrq9EhA12Hut9uzwrbld3+35PvzqOz/5t6efNMaPOiEGMXB2GGMs8iT68tV7//Hks58Iq745FqdU2Yb+jB8+/OTWSykJCUNosKqQ6Wg0urx1cXLySjj1n152m1OqaTO/OrlYrcV+ZC4Dz8AMqYFJqaWy1Nr0QEj1xz7J/gn23+L4OkeVbeiRadlOvhrAH63BGKt+FRS+mqaKkKq/+gnY7fZb1bSkqZdroYEZg27A8TCVkCqZdu73C1tNC1nn/wbRdPdei36nM7XLpDn0qsVz1IpZRsGiQotw7wFe/pV7q/7JaFkAqpb1x5OkXoI2xmuts7ZK6ToJOm+1YsMerNRLyLqjzHqxf0OGmh7w+zEPhKZxBdvqrBaNK6jmfic86z+/IynaaAjGGIYY9sZBLRWb9YeQUM0jAkFNa821U3Q4uj8pBFHKaUgYgpYdjHqFZ3+M+HR/5A86HUWTXjxG05jYH1rv/mc+7Ox2W52OYz9+nRgw9P6fJEZ7sBGsl39lE6P5SfP+ffn1C6pD0L32R6eZral2V1ud+Wj3hD56nRBE3RtbFZ7+/EjYjHbn+69fWD5D05jhZKq8/OGDVgSKUqFq573J7mno5X9Q4t5+FL2gGu5N6XagModHacR6U9BhZz5/rONelQ6TdtA5sQ0mxIhjCfBVPhr5kUiWAL8qi9wT1pF7tPqTbjdxFGFVqiK5oXvgqvRTWaJfh7WgFgqr/sSfcIVVQWBatqOGBgYveX+Sm2UbuCrkNdvqZj1Wj0Ot+nXbmk3LgWdgBmQt2yg9idbg9lKPV860UktTCb1aqbxyluVnanhwz60Ehvuf28FqM1kqXqKq5G4vP8Nx1pSuSldV8Kumaji/csa79RC8Q1Rlo5TnuhrbhMPcLhUvrtndHgyzLLv6UxCsLMuufuh4qYdz6oHWZzHM/MLw8qxENt0ezLI9eFa2UtlwuHEO4sOgraCJ89OmBNPTXrazUvMZTyoMu72xwyywS8I+Ka8nrpy5NUF1a0pLHW4cEsjFTk/HxdLwJrLM6UolZLM3G2xLaoXGnPd8yRw0Jdgmmx9ZjoHGyHlwPNuDbYZnNI6QGNg7cOcZdNOsmvIGKJEYxAtqMfhmb3bKKRqjSoM+MElxkdu4NZSZkiaug5BbAQuXERHehN7S++U04GID6atlOPOFQXnLS0rbvLHFbzNeDddUbvj2q2Xmdy6SiicA5dsGPkgdaeGbvvUIQogO4m0vqcQ3B0EAS2ghiQh48xsSRI58pzQ4JOH4JPW65LHkozBcJKL0hcg8bj7BB4bP8H11ukLSFyANSYMoLw+EKQR/eGFY6fslQVygvCTSyZMUDYcg2ILyuyfS1xOYltI3tnjmBz+FnP66yFOyIPIPqPHaFWQBrSiflAz9HWtEoA4iaYLoAFDPu8IYYwyJsZG+WvK3VcP3QKZi0KsBXZjRXTAAI/1Gd4k+T/rC+SIAn6QcUnJ0nqQiSwnePlqif4VS3AsqIpBC32jRsURAe0D6AOjVEDGfhamvvBgbINmAT+YnkNFdamQFsh7s+QCo1POW9++JfLWxIV+Q4NEbATG0Q+sgxntuFg+QnleFGN1XAnxtE6W9GS8crvA94AFWnO6TU+8BkXpgxntCMLoroNKOZPP1lARp3CNwBO4BMeFLdqSIzU9Tgeifgd5X6lGrhF6qE9aFybsBnw6TykZNKOVcl/Pu29qKVCfjSSoh/wAYEJz++rs/ThzGAWkLaBLcSwGoEdLU0z4QKuOKg8hhFLLuUCoKOK5Dr4jvju7Kq6TpBg08cU4i6QUR3aR7QBNqA1Dk+Qepl6X7Wp0pDwY+4AKGSpgrzE/ECtmvSV9QiG4PTGIvmK9TwNFbuRaSIdy7P04M/hBOGd1lvl47xLY6q4UXeyCQwWBdsEAZxrFCgIM16eguBhpBRndFD8gFjsLpr5Obr0s2w2xKZEvgKQWYgUPMdd6ZweQpb4YwP73CkpUHWAr6UCe1N4TmPSk4CPe7EeMskMig51PpAhs/qQPzJIUO18WhGZHBnoJ6YOQEDa+g3Yhkl5JjOX6SSoBBPC1hfg3xCXpPICxHjV5BIYI967K4uMYRK0ADQkNiSNohPekTyAOSCWxgdxeqkiBlevUGiBfUbRAe6iE75XWAzHDhPI6MBVioCWsR8NQDCCdrSlMuRWD1DE6VkEBa7F56MG5WZbDNSuVdKkdg9RYpywrDGVpsLj/jELaZjRv2BlAAPJYrOBtFZujwpY45dLPbB25EuS5sjOtahUvDbb0ilfcHkE3WLLmBDdiIcqXmR5hBmXAo1YO78wymZ7LhYGGlYJ2wL9taBWs/FqbWYjrfgeaZLBtOtoPkbcAYcP1rYA1SJrQWTudN6XNIPkdTGv6oYeeWWkEvlWfZEQODNNkMtnfnswyCNRtOGo7FAfciBmKWba/FrioUer7YPpp+uDuAW+2e3nX7tZDaeUSQ2hBVie4lMeXuog+3w8js92uxcyrJqWZg1Da4ZqznTiy1ZEGspJZiOS0Mxhhqg2FMqigsNKhVEeoGwZihOBhjDBNSwa0IwYwxqEYckfa7o6yBhXgwCE3DCmyUMtqT0bOiSjGlUjS5sdZ4sT8qLJasDvqT3LAHK6LKYfXQBTz71+BSK0jvCobz2Cp7WJAfmfofkgaG3N7YBKM7SKQXfp6rqgevUtXc18KywugNUoVqEtODgwBudWBasqKVBIOXYW8cLOvu3etIlPPAdW/2IVZ128INOKfUztc2NJYAnzFm5LL1QX+pY3cyHl85C9xqPB5MG/ZaSOO0JMC9M8ZrfbJKAYXzHia5HdRtSx2D+XCWwa/2VirHp9s3rbTE8Nt/XXM8AxBb7WBxCtOV2I8BnOmRbVLY5VoaNhyrbjttSjOYrpX8ePtc1jaBm5FTtrBAdOPMjsOFgy3BdnTtfcixUNoTKtfed8sZPs/XSf7PM759cWuBfgG+WaZ13Arrg6UOuC5oOmtKkwVVCN4gV5+LLHXhYN0B5Kvth88wxyCNMZTBisxl4fjhs4W61cPoNPNau2FiVBgU44KZZJA95qChWwvtDR9y4Ysg/WzfuAUBDycAn2TCgv2ocuKZ59eQUAXDsJLCBNJHNJVXN4S79CNAqUtAfvLtizBhwZULX/yxgyhav3AQPXwmchlUBlw4AEO77cjxclagiAhn+9rrUiNH05NO3kuQ5ljsbl+M1ilQBhNcONijjwdde5/iQHSvIlHvxi0SoAuGbiBVCo6jdTiK2472wHBu+TozOKfBeAe6R5HZ1HJG7YhtuIGjxxQwO/3ug2jLxdFmzDrzsWMhcpeEbXjcaAtz9fkeAxEx3AODtHJQb339uyXbuI6jKNqTEu3dfPhMnvxu3IJsgWNEbmAGexHAYZyzq0h3gDr9K/d2MphsZc95Avno6ThaLxFwZMcZx5FsLZepvKA/z0Bdgr1rQShQYhQy/bRcmmkpitXrndg7mYio8sVnxG4kMDuVyk244mKxvgwmBSDpFWb05vIkNvdSd2/WhnhDwCVEQQeQpg+ug7dlUw5N6j2sVUPITObigXgb1oHZCGYnV+wJIQBMcNuRm801RMj3UYRSjJz0N95jBh9lRLztaY8COhl1c08+eQ8kMZGFgAA40nzsajPfFDIRWty4JWqtu9itfISpEhKERf5BCt6gnkMKCyBFFtgPvjfPp0BnQ/Kejaj9ANgKgNWpJyCjIdIYJU2EQEXn4t/CogqsXH1eymUHty/iNLSNLjtwAfDe2wYAh4f/5OKeENhD82uAbtlgjDHG0Bb4rS0+YHY0Rndh3+gFfCTS74VTD3Vunl5hfpqCetJ354n1QR/r3VenQSyACn4f5FdA98zt4g8wiv+di32Pn+J3hC+Evq0b/rbBnPmDn6BEWfN7J/aVGieJpwKOmh6wKE8RL+hhmshwsP+DAOXbzDAz35OC9UlGd6FKipxELnMHihTa3cPvCB8KPRXdOPAmZGt/4FILjTdC9p7H3/1xkJbgygPwLl7xF5honlI8Gd2F9Z5KIfSJzUATv+FXfgI0XAIjvQftHI97hPb1FLwBYuCy4TGJNK07qznAe5GCgRVmQ4x9yDfjCgZHaAXYonougPo0o7u4Gtienv66a/IPUsJuYwON4q4jod94D+TQJ6knfW+NiAuce5gJwOiIIEV78XW8OQX1XAH05Vx3uFIGnpJ2G+BYE4Vwuycq1ADB5dugy1oAx1BegASCENnoKZV+QKcnHd0tC1C/AhYpekf4BGL1nd7wvXTDk4K2dgEZDCUiMOLCmeoKsXggDvC+YHfgt1uPgPqQe9LN7qCPTl+n7IAxiJTs1fG7P14FwTP6xGwZ4bDw1Agn76HhD4T5+97DK8T3wWZXoAEYWhD6QOcN6d8D1ZGXC7AjALcAXkhWoObTdKOKwsy1Yp6mKXDIXw3De/wEJKHrIo09eYDHP05ignquQG+3HkHpn/46BMiyqFUCkvk1AvId4WNAb6qeCjlVV/au6ekiEYQCYDtRTyrsRh9bb5CaVNAuNKGdPJqNFM4w3Ki6K69FRfez+4/Poz10uztkAfxuX1xf3v8zD3SPAVquwE5X1QXfxm47WmfidnfQ4vghvAxhuQ7xgkU3yQvx/aXyn3lgS3HjFnU/O3G7O8IC1AfjteU62OsuI+Clabo0fjarprwBthR75F1hiNvdCQsoKNaX6zCVB1fOMoPu8JrDMxpHWxV8uzsIuDy7Eq621nO1JHCGb5mTppTBNvOGgybGlgIIAJARAia7ijmLBWcpTd4Gtnn6EWwzm/xC8rYQsjSGb3eH4e1Xcngl1nVP/vtbQxUMuTFLhR+Nu0qWyO8s4oJswcPAgrjdHcJxqIR7UFVRRDCcpZE1fHpzdweu22ylcvtcNvC7TQTKOly5Sd3PjrjdHQCsVsA6LhQnJAzOVEq0YR/PYLplw2ktlDzWOQJ7V5fdvNaFm7nkNuzjppRlkLwmy1YqP1wEjt5BHN+45ckhmgKIQQfhSGmAWng0mf/eDBSrWTW8cpbTPrc10hHg73v0Wz0oJjBqDggdyvvT8XC4J+D6rUf6hnZ5pca0Kjbv8Mvdhv2cSn7n1TS9fJ+8xxjDpUd5LXQXv7h7Nj0VaP3nl7v/hMnXq3tZQxVs3LOjvusGNCkqjNTGv0uiIpWt1opabCHU+plPmryEfML4epMq2LpHLqexk+sEvX3MA5HmKYks20Kt1c7+7mmv6hVZTpw01yvGGGqDMcawUeqhUKt1enLSC+JqV/QyIowxhuhgGGMi0KpS87GZFETwhDEDNtSEDLzXm4Uz48TD8JK20LdjDd2CNUcylUSGGM92Q9cNjG5RFMVUHSnCDB1L9U9GkACu4tQ3fS/WKgYvq3DXhQmHOSS8iohuqbrp+4pTwku3u7KsMKotltxQZa1FmFshtMxriVwQhmhV2l7ZIgq5T4QPePavYW0MHNzggmtViyqyvAgdY7Jmy4CEODqPS7aKoSha78nHPKCntrEGUsgexIBsPYPzRK3WgCvZqXpNwIpd4jUw5iQh7i0BG7LM2DpyxyO9JRDN8dqgp3bVY4KvFm0gmhNhKCGXLB/RLui60QYWaQacLOqqqhM0uwtjbB1QU7luVRGGfEHKsoNur+xduWHWmokl6LladmGN4QR4OQwNg4r9a7QqEtK7gprsnsLAYdioSDuIgX8T9JZ4Bqde2I4iiXBvCbmStyHybKPHpDd2mSR4PZqikN4SGE7iCq8jTTTcYwJTZY2sw5aNnhMKxVkXu7e0UwwtCfAlH9USqbRcQ6UmPrRktPLzkiBasP+6IGtSmthpB/0/QF+ZxSrFlEoGBQolNVqlfJxXDBmLFKlqwAGR4oQtSo0WGGrGBYNsA/oUUt5CS+USbkY0hWrBFVUK01dlIfwGFqLHYocrAxq+xySJ4pm+Q0sCN72xUe1qhnPHNtMkrhhjrNfEeY8xXDrclBMF96bAsHNo0kQTu8CkEmp5/PWhXFZCJ4LRHSQKtVz1vFSgJfPDQykVOnmep/qFbmDkBiZG4SUSPQgEW+brF4++BgPh04Fp2YqvVxixQcLE4twM3KO+UKtum/7j14Kvx4TPtgs3MDnnsVphpEak2vR8e6mH5We6cua5gOtKzfUel55JEK1+PFnqseFwqaToBLQUihMSSAMTNQ7608m8qZwJec2Jnw/3Ps+EUHsrlePdhv0mVXTQzlZRRDCkQUI76O8Or6qEvixYobT66uV7fHTeCFQDfvvppRwQoR6MhPbhulry2dw9t334DfUQ5n4Fht4P1vl0CNPTXtaUxgvqEAxUokKLMIMyRR7fnrQ+Qwa4bke10NYJaGP3ahWcESbmdA7dn37HoC/lFWBP1I2FeogiDAI0yRwMoZvjht1SDNgN9eAnqQECchqMZ3uQTTZc6qB2hMSc97B6UAvnGXSzM+VSicQgXlCLwTd7s1NO0RhVGvQhnOw04H/oP7UPWKlpERbngZbEu8kh72GB+Elq9K6gVViYekmVeNqKDXuw0riyG2utG1gwcRbYxhXsYNQrGlwm7531n1osKSjwCUqTk1kAzTJEU/8nfWOLv8787o+n6W+8x9dT93IP+CnllP7Gme/3x4Xuk7QM0dSTAPgk8k85IFXfRZQjmmXFNU0qjJWutfGAv23gA6fuvTTFgyxqsEWoQKATAplJniBNXUSzsUGZkQM/Fz41ygsmbauzWng9nqbpFX4KFw/43gPme6moJ3TyD4APtHu15LvM/DR9weKRxAKpXAdjube8uyuk5NGkIgRh6Hh+L/OXhaRQRj4gtm/rRoTnhdHaeK2vrIvPQmy8HVdgbkkxoHyZRa6SARMY8z0KxwmqCAFkIIsGy16HA7R337aWn8JcSfhcAVF444UtCuu5Powx2tOBss49gnd//Dfeg/XuyXDSUv6BEKA2A03Rg3ryG+/BRJV/kMqieeGogHoOT1Og7Dhdp3wcrqfpEl4FhmsO8HRspGh4RQ27UD0XpECRBiiJBHYPGEBPSTS4C/bujxPDt+tCm/IBrjXL3bRRyuMt8JjpCd4M6roCDLnkiAdMH0iQRYPgJ/Csljj+Aw4BET61Taw/niReDpCyRLWycIXFAKwMCzoawdMUFIhw/l7hRPjUNlH9k5ch9HTA4zNX2DXv/rjjBEEVAPxEuplEFo2QAj5oPk76AE4VJHwA9evJey8YDbLcgKbgMbEgVpjzvwurot3IFUk01G6YF+CcFOVT30YMkMBu7gC56fvIA8z8FFS7IqDn19BIotnAZhhouEH4QOrlF0wKA1m9VPi4sZDODKb2k0Tj4npM+gko1waXWz00hON3X4asgYWgP/ksmMaVX4BvrDVctwbOehMNur2iXoI2Rn8XNKz8AnxWcay0x+KcNprrJVWy1e7QerFBYV1lfo0XW2lk+QX4ll00sMwMTg55g8tlB2chB5FBvGAB5XAK3nxJ0IYL50VkWaCtOcCPMJSBVe5+Cd1kTWnKpQiwjq6YMSiD5fRg3KzKYJuVyrvUjqC35gAHDFXBajGMlxw8Xi05GLwJ8GGtWHJ+NodudvuSXyGxmgNY5PH+YAbbW9xzWydgPRE11QrSijbR6XnrDqZns+GPFpaCGRKrOYAxQ7EW05XKGTS3LBtOtgNZYwAGzg5jJEzo4vTLpgTHM1nWrBpOGg4uqQYygzHf5ubRZLgzg2E1pflpn9O0ZAgNUiS8Fi62754OJmOo1WSwO23Y67ZaGEhqhFEarAo9uQG4e7a93bC/+2q01+3TusPtTAmuxb7/+xdA9Rfb/cU5tRU/wgypwbBReIkdS1tBFudU6kQJsMW63QWRjW3ZyUvCGGKDMcZwVPi5965LsV+btteZElyL9XrT8ququaavuTQgORgmVUvGuyxduf3YMzpVwmgxC4uKx6tZYhegEAxotEQuSDdGFWpM77aZd8MWs9PObk9V09nrRWHgrivrAMpBnc7nndgwwlCV0rio1WCHu1G02y9qGeBSK0ythri3H0XzUaAFk1LzS8K6MNVo0P7u3GF3WjW/jfNY8ivRjLA53507a93s3QV6E+CXkanRMO3MR7sn3f2TCcHIApLLTlKTQavx7knv/v3m/d1uQYQUkcy/xvqdk9V+p9Mfn5zYUc8JEX1k5YpppoX06DQ2DSbg0uZOmbYwHN4rdKMJhuZplWeaXqV5QePJZsYYWwtjzJ/vDA4zvzCNKxiljPZgL/Sw5gPSCPXgUbtoXAFHoW7qJpt9PzRe7Grsmt5usFtzAMa4tgcM1xzQuEKlSnLS4DJ576z/1FchPS74XFjxR6dZ4wpsk8Tq+hrIoze2YkpF7QaNminagBSpqqpQYw4dvHCL4dB6nQgqWnuwD0OIfoDVedSMvXCLYd2iGhHQuWFvHNQE+oc6P2kVXrjFcGnHOkYbvbGF6cbknX7ohVsMG4kcEqGlFrCZ46gbeOEWw7pFfbRBpZhWUZU4zZbyFgMqpkrQu2cwx1FnCccEK4+VCslz31/KWwyovE7QPLuDpbzF/gBKsu4oa2Ahb/Vj07ACa2M019noqdrGrR788SQSJPanS3mLLansrlZTjLX6XC3gNz1yHEWtpbzFli0keZBoL/Y7qkUStC92W3bdlgGWc2A/JuqdY4mGPkdqSRW0G6U8ivolBHOu7MHQ8hUcjLTFNIOIKiUYYzwig9P7vl1GvS4YbQybJA7jOFbaxnlidJiHRid5brXJ84R1mMfaAA8VxwVb4WWSPFbCI2EVxoUxRRwqncRxolWYF8aEsR9FTRRMUZ5gYiqYQovg3AUTWk4kwVgRjELBFCgYIZ8XbItSg7E4GAWCMTiYQRQ1cTCaRTAwOOsymAIHw0Qw1hQuggmNNspqb8jy6RVNaVuEXPiTVr85CU3cHAfW9MdTo7PxuNDFeDxkPR33jQnGvdgUzV7GatBrKTUc92MTTyaZDqe9QaKy3jTWwWQSmLg1zpSa9ppRtNpshiZsjocgGAuDSVAwEyoYXwTTVyoYT2IT9yeZLgYwmFasg/4kMGFrnCVq2psWPGw2YxNORDCtXsvqoSwYHYzHsU4mOBhbejCD5rTQwwkZTC+KVsfjUASTaQbB5HQwExBMbsJ+EwQzpYIZ2nA69hM7aE5DEIwNJ+NMmVZzGpowC6w3ZNn0WuxMMe1nWsFi0MvoU8pqoaBZCxm2SjFQEh6WtVVKa4M92VhltbbKUh5GeAyjaLKAwWi3wQB5Khhb3mAsCsbgYDTRYhp6wGCIFlvwYIwsGGVN3OqFpgZHc7/TsajhsNBGe+MqWqs4UMbqWjmqSLQy3no3zSoOTW0cnfWnVnvuBwoHk6RGznSaa/bcmMJXNXLi0LL3hk1hPB3Zane4PEJbo9mLw6yU9nDEg0FolkWoYWE8OoNMebhrmpiZeVlE0YqtR8f3i5oaJmu2jA4kmXr2RRwrD4exyvCy6P1Mq8CwR0dr9nAUw6ww7L0KXId6qK090CK+VFJ7dYog1hVH7fEX4Otwar06uT/UNe/JezruKa9OGOS1N2D6xlhbA7/swCjPvllX1o6mVrkoEW3swpdhFE0qQN7oBWnQCmmxSm4yVSSV1FgqGO2uFgvwp4m+KDLrElvEQ38wmC58ae7vd6cVUAZ+lodKu6C0JquQFqvkJoszSRWTxEG2gI3VmpyejPoL0SR+oRsYae0yVu66G0kwaK6O/sQvVUDpfAL5wU8iv1QR+t1eP3PzA1hSky0dLfYn/gRqMldIGmuysI3V+ZVf6SxEk3DLVvKywghrl5YrbNwcdTqdX/qUyafM/v6FL7/5oz/6mxXg/n9/5k90nDL2yzGCMESTVUiLVXKTqUSRjTVZ8Mb6TaeU33XhBqZpcimPwEvQn+RmWYRy9TIFIjWm59tLPQyO5/P5SiUY1Pr6J8vP0HC4VHJ08g4A3WQY44431nz+5WT3qIZRCcBDVVBxrPRyiHPauJksrMZuf6nH8XxvdlUFEu19dLzbsN+kio43domuvDgApskwIeufgBoH/elkPpx1okmGLZPUQsspCZoK9aCTwLgY0MRBfzDMsuzqTwFFWZbtjO+61jv9jA90k4W+htcZyw76u51qrNYX+/n4yKVeBL+hHsJhUHXiLhP55kim/cEs2wOQsmzesNdC22+/Drgmc1nFSGh/dyfrZJMcH3FLA+5C7rlWmJkZCKg0en46zPaApKwpjc+oQ3A7wGuy9hfgUF8DKazz6TDrbJNM+udpBNhdJpPceDFAsFCm5vYYUBeGvb1ZUzpy45LcOKUHZJNFHt+edLixspXKpQ5X1kB8ouXQh4sqoWxOM2Cxlw36Ul61AcQmu5HDwoRP51nHfze3kDzoDfUwnLQMEJzIl8zBHsA4btgtxWgH0E1WrlvQJD7o+B8hZx/VbVRBZM57Kg2OZ3vg4qOlDmpH7QCwyW5kl5wG41nn/yLKPU8IRmFxZLB3UAvnGcBoSlPevkZAAJvsBk6E1QP3y6zj2TlyZQOjsA6TxAtqMaCxc8qttgDdZISQNsYCAGeuHWEUFuqhSoP+SiXA2MtOOW0L0E22bqgklRf0QcB0YZcESQWpSpZeOMDpnLbFKCPAoKModDi1Sywfcq4Dm+93eKddujk6y6cqNVi4GA4LszyqMrAeGu+4wsZar/XJarI76kRsob06GGPgALk1Bwy6i/Ulqnp1qsjo8lgW/QJ8nWTWq6P7RRe3SzyYLo9ysI6btdgqOlsdZdZjcU4b05lxZDw7ZRFilOZfo5O46MQFFRqvDmOMgQYEVXPAOW28exXDQOCewSo2Xn4FfRNPvHwVBE4+ThpZSALj1SFGxdA3xmrPXgWFw0aViWy9ZDbuBTc2aEeXchJ9oFl1q4R6l+e8t5yskv1agq3Rt5p8psaUzkXvmH2zB7lh+nrtvw3DfPS51qXiCQgpN1GIAGh9qFl1N2tdXKiHJM6VXia9Lpjywmt3qGR0aYVnqatP8VEWSP1qjd/FoY3V57wW/ZMROOLI3OhlKHtxxO0UD7kgKbIg/NbuOD5t6JKm1BNsUPuBKJATBKu/wwNkWSZoRHqJkVqoh6w3SRYhVukyspHOxJe0DQZmd9ZgD2oGu0ik3wxazRyL9iFzOwX10vnR0VxItyGXVljoQP2Z0IQRHaYbQu4QdM+q2n1kjGYvtyC462rGLtYXrlVWQKpqA8E2YkYP00SGg/0fBChfZmY+lAI+mQ9JgArIf23i0FKNokqhOCEchXoofFs+0NDpztraHZyWZiL/zGC6goJtkJYIjuaXVmC9tpT50colIQE2U5piyDdzOJoDjWpGPAw8HKrVfR2mbaL04qxSdlLwdJgN8HRU+gFOaAXYono0ePOMmebSCq4GtsNUWTeaGWyC/kAtzptUlX0FDJoIwJCLIAWlzTzDm1NQTw46VOSCmcNhtSQc5l7vsgMoOswmuqzMj8DBnRm1cmcNpCtICjo96aWVsgAGW+1qvtBG175nBp/TmssIyGCoLgAfHT4kFm143so14LAQQuStO2uQQ+nmxUaaphKJtEyqabrwD5RQyEMqS1zYKy1Tszlh1OSuabKxKRfMTJ3yZkbnmY6+pbs1ycr8CEm5Ao3j8AJLIH1QHaksMtL5yqVU0jUsgztooXa60FXcruDGLz2u9PAwRZ7knw6cBOm6bWtx5KtJWWmnKXBYeaNd1mDn5mgO6rX5MMU/k1DPFTAVEFXazG0xvHP0HSTzaxYX6YwXANQ+C19lQUnbXFbSGdc02cBDBIlDSheJ4MYGFtsg6kmF3ehj6w1Sc2PRgEKmoRtD2mwgpaQblQpM7yn9B+gidBQ5geRP1EWTSdsWe9XEbq9Z9e8jkx4y6P2kbXChJwR1XeCcRDiMnKVC5C31KwwPUQHJBUYliksAGIizgLDfCCJduQRa5S31DOYrwcgRxExqmBKxJm471LZ0h3RFHGWrjVXxBqDjUDMIPmqF8wTICcRA6bBCsMpyiQtiILtyiWiDQwZlbe4C+hAb1iQEJG3bTqHm4VKOJtsagSFYmyWORbNC1SNoo/Nw+MTb0fzOGj4/VykrQYmbj+ZgwoGoDsIU9QQzcBJQtkLNpL6zRmoSbQeaVTrx2s1KLeplwYcT5Q1oM8POBYAYC6Up6sGI1AANDjEbFbC5ZEDs4ltIBR2BBy0hq4IPvEMITaLtANLpSzWxX4Cv89VkYcEHJKkjk7KjwliNVkqFwFLF0RyAD7lQZ4HSdiUSlFxlQ6yKWpiVS2VmZY4PG2FmIpZlOibMFuV7DiimdkFJ4f+GN0BSOERJgNEB2PmR+F80OpONlVbgT2Q7XXpow+MrGJgCKnpRxGEJIA+x6oRP5rkygTVR21WlRVWWVfcV62HR/jlVAPCTgcGMGTkI1u6kBNCuvRSBj+WAlAEQpY1yHbW50mCtuQTwlzbDG/egnCShnaZuIQ5TEW0H2lY68boavFwyCNI5rSsB+JNyiM6LtEVGQD8/3KZIQSpACaPtYrbHooa5Te2GBi7wDA9sPpSlK40wiLVrQAHJdcbiTyjFu9GAVnKBu92O5rBtUUTtFLDs/gX4KiwW6euCqQyO5uinC41m2twGHM0h6KcVTQFuw8wHz+Jiv0UL6Ja08SQaCqedYLsQShVYpQzgsVk6PwJdJ5I7a6WANTeotmujZMailmtqUe85IF9NKgDws9OGRxfgQ4L+//zou/5Pa7xyyTWwj0J3TRYtG6K/RnTb8JRc1zODKcvK/a0DqYtpwdLQyXYiWg1JoSzooslwm5EWG8tt1GT/dJH+GtmK2DxjJiamAuZHgqO/esQz2codBDWjBR/kdEs1u0kVvVI5oR2Wse/phlrVi2uuiN1g/+doLmd+yGszXEVGm0ERenDosVFtMdZwBdJmMU6sHaIXskrqFLwQZcbclq7A2bSlAU8OiTKrugtVFJV4kypwRL6WiArNQgHqos3wvPEht6VV0PkR17RToszAxoaCl+4BEhg8KzJjcN4EnJkC+a3NPINcWnGLbEYLmABSjyYeq4VjBkRXLomHwUMrcvIeQOwnQ74bPufbrrorYRB7uV+AH1s+HJEMjbvMUL4PNPpK28ywz+PkKKSAJtakbbfgaSvI9LD6VlGJYs8G03MVjmoO4AWcGUxM6SUVynHBJDUdxMUkkGq826KnFnarB7ukvImsKvzSPTweUJSMLWzVYl/oISOGQTAcpZHteXbCIPdw6KoHR9/g6bBlvTpJkbDXeyAoaoa9OgxjpIaJ/aH1IO8KVuDGBYPSsK3T1WJRvp/ppWSlLn3ZgfLwD9TLUnNApJcMfWML49UhhPS0DAs+MhA4KjeNLFXiXm32jXvGki927BJ2cyP3LjUtwmilzqO69K0emDXXx/+ZB0w+yNTivDF4LfZq7CqKurBQD0rpOsl9ZHCYKpBUc0DcdEHdNgcZs1NOy3YA3WRlEa5CvGABBI7sErwn6sZYAt7nEfGCI5CRNatOeQO0BegmIxVha3FBwFKHa0cYcntj++NJsigHgVr+F8YFGk1pyqW2gN1ka3fBKnePAUDD4coGRlN9mjRLSk4PxjOAsVJ5RuW2V36gmyzSy3bG6vSWNaV6PEgIkqLwrQxfMgfDDFyMG3ZLMW4cDYQmu4FdmBbz3WGnM1uprNuoghkKSyPLwsSczgHG7tk7OJwD3WRhrq0hTPhSxzzr9PtJLSapDEkRTq2MMjW3Jxm4fhnbcJzbOmkH0E1WGcbaR/J4/0edzvxuLZQ1xlBYHBlGCn4+BZWbStaUJnVbAyiEtQPoJsMYrwvZTM+XOjrbWFlTGrgHnoGkYGO11CRKaP90OAPQtSHLmtJ427U11lZANxmp1r0sDceq2zrZWFnWrBof8VjDYEWlPIezBPiMkUKm/cG8KQHn0pDNhuMjswG8iLEN3fWW0CYLc3/9nUwXuy1jdbBJblpqBFqPUy8NCRyFemgqFzJ5zM2ljuOmNMuAotnOSuVu3+RpydoLuCZzCWO+zc2jcWcaazZbqdxdcMsB7rcfVVRWGI526buh0mTu1m0N+3QwGR8ffwkCHY/Hg9Ojfi0WSN7GneNt0OwslU1mlGU7YyVr/p13O8tYx2tNsl2LBbFngPkKAUWFe6rcuGqCQrGt4Kj/C9dtOMAg190+q4U8dvLN8I23S1eTFbq0xkrXG2vxNQmNHT8CcGcZjLuuy7C2RaKXjjaIfMWOJckChiQpthNVr4BtsqYfGlc/mO8QK2yNsVYXYZM4qyYBL6XmlwSKOkyq3LjPsbqmemmqgECpp+bhDf6NFugmK4sQv1P+B13LF1ljeaofGmC+NmDfjrUKigj7qpTfdlIZ4FC1uV1uzi0tTWapJnNR5Qb+nRf1nybs+tewNpoX6W4evehaAYbfV0AzdjoaF4tzfo1n76ti0EzIyjPYu78gG1P7RtvCs5OERQ2ccGq9OnE21LVv4rFqZKHwrVfHKlUL35zUEKogqAT4rI1nRyUebsEMXTcwHC0MrHffHGhP19vEf9Nt0brfLRb7zOBWFEVN7fZnMIqyZlYOsphNN3Z/2rcTgZJx1tSmG3uAKt6uQFFVsGGLIOm0mLnVSdw1Sjfj8pSkE5fPquqTxKGHgxgGwVDUp0mFBis0W/CRmtobw9rLrWuJXBDIqsQ+Ro9baDQwi5lNN+hGUQuMo7qqmTEw8Dsxx10Dk1TWbwIxIBpHjqXpAuMoEmpZ04+iTiKFWDFdOADUTRFozaQKVq3uKzA4G2v1YlwEhsozhE2zaziOYodOggQy1g5JJ+akE9FEGcpWWScBAg5waNfqGs6iFuiEucV0oZ5utkBWraqEQaxrafNrTDgM7KJ+LXYtiriTQBHTzcA4jaDVYuZMAuwXaWCBgUGYbga14k7ilqxrgJ7pZjWYmcFQFLs37rki6xq4q+nGNCj5JB0apJtFUUSgmy0UStbUNGDPFoDUa3Eramrv/0Boa/y7GUlTlxeYreKkQ5JRuFlQRESWE49UZTvIxnDtG+o+MnEnwU+AFl1TPlr0iqQrVDJ0Hsui6rqTVbYWTqLdPBC5OXa9GajFEUQ3M6DjZnNJYD1oDXNgda2Sx7rmjQmn1sXkPWo3jHQ3cDoqY9NFcKtrRK3MxW4EJe2WdY3pZsCqqhIMsho49Cv31k3isoMWmBTjBk46USfoghpRJ+4idBNYtIRwU5ETZ0qCnIYDn6DKrnM8rIVXSRZiFhTYwwMW6+km72myrRFY+txeyvvXqQmO7LS84SVsRnu5/yGUZYW7MZbAH8UuOFXtCSmSpeT/+TCco9q2OqvFYkylWazYm5dsaLmmdquHoDVQi5CkNSi8+c017WBoPN8KDEllvkdHBaGX+0Pz5ViDpe83jeaaa8EqNfNuC53EoVmsE+A9+H+oODYONbVbPWS9frJo30yc5/4PE/teEFg6UZG1ClPF7+O+OC9RtfEw0bVy2ITGht65ggqywmjNXDNHG62CVqBMnGWhLrJBbNVwECQ697NCh/4gNNYfBJaDga90MRiEWmeDgDkeDJROBoNY2+EgMyYeDBJT+H7MSTAYWpUPhoUIJtbFcJCTwZjCH8S2pGCUCMYEKBjh6edEMJkkmMBdMLkIJsHBaCoYJoNJ/EHOKhhk1sYimBAHo+hgMhFMNgiULJghDIbJYMLSggmUDbJhqEHEzDV0mNlZhBb/APoiVfiCbFiYIvNjazM/V5z7mdKJ7xdaD/2cdez7wCPWKvCH2sa+nwh5gR84+ILSgglAMIlJfN9h6AeaQyIYG/hDA4MpUDBD18GIdOwyGEMGo1wE4+NgYiqYwM+Vy2B07GdFCcFkIBjQojkVDCbwHfIsKDiJY6trdSwB7+7RslFKGS3qsVVKaeSBlKzwMJqtsiwUNPCQGluJcXmC0UQwTAZjKyAYC4LRZDCmtGDKpWSNNBguKRhLGdtEoX1r7njlR2BuZIE9I/FgGhpPRj2lNBJT5baTNK6AyyI09RKK4bCoR/yIesvdGonBpVaYegnTzv3Me93qQbKLegmt+53Ac+Hc/grI6yVMTk691zkX5fbtzNRJ6O2eFp4L7/D2QNVHMN39rtFeC5/fbsb1kc+is9tjz1VC+/apr+si1+f4J6cDD3bdgXp7Xh/Z2QanvdyLXcFu7nemuh5SUwWxWvibswuJNu23XkbaOenVO9AmsXphb/dFIr3w81xVPcGQqua5FpYG2YTwls3VqYPWul6xRWsb9hf2hQOQKlSTmB4cBIKiA9OynbysNpyTCBeFZS78LE5sPeLkVBIGg9793a6/kOqhI1HOA9e92RcQLdyAc05tL8Ibf09gNtnpaLXX7DulVTCbYR+VVqZYFz7WGOSGbT7FGlnCnGR9XHLDHE8JjYKZqQAGlrUaYI1poNnELazhF8zJkDAOFHM8oAIwzEPCcWCYLRFda8hsQkJxEDKrgNAYKubQJxxDwyYglAdWs5pSjsy6ICymIbMNXDf/NDdsqOb3E83KJxomMMwhYdEPmTUVwECxVlQAgWETUwGEmtWwRTd/OKAC0MwBIdWyzGZANb9mU1B/NrGs+RNJ88eGmWr+qdJkAP1M1vwxs8379F+0IiMCyC3rnFAeJJot1fxDw1y0qGCZTd6nHFkrKoDAsompAApJ8w8Vc0E1TKyZqQBaCWtDBZAZNsWUan7NKmjRzV/4VACGOZ8Sykqz9qkANOukNemNu52T/VErXsgXeyBb9aC/1LE7GY+PBUTrPmiMWoxKSbHx74QA90929yOn7GbMqhehst8N2QSnWON+y3LSP8Ea3UBz3p1jjUnCPCWkoqFmHmOJeadgU3SwxsnEcDLYxxqjjDkfE8aTkHnQIZQzyzwmHO8r5oSIbrfHbH3C+NRnDpuERi9m9keEo6/YNgnl08RwcX9OODpkhPHJgDmZEKF3Y9bBiJBqKVZU849yw/GIaJimYvZ3iQh8ZtOkmj9mE1IBNBWrARVApjkez4kAQma/QwVgmJtEdLsFa3VKWIwN24wI9nTAHE6o5s+ZsxER+0AxT4hg7xeaVWeOpVaZTRARUlPmok9orAbMQZcItpWw6d/HGp3ccEE1/9gyDwmL/Smz7ROhn+as41UigGbCdkAEcJoZDseEcq9gzgipaGCYJ0Qz7casFdUSq4rtkGjSzlRzOKFaImcejogApoq5Tzjuxw6n1F80wybfne/vnnRGvSzRC3eYKLeD/tlgPpxdVQmOdj463m3YaxhPQrIZf+ILs/64sz+P5ieuGEloEazmgn1MXzEPZFABAKjs6KAGu0R2dIh7Mk4J5aFDj3DsWAlNh2zulrkgo1KIg6HRDvuu8Wn2VwVdGfdLItud01ABlIPefnmYn5SXmGa/NPbHgjlNQuWi1dxhVUKrQwQbuyDYn7tkX8bJRNCRsUsz7Mxp+u4ZC+5Tza+5KBu7EvYhJ6NeKyt4Ib+r28HidJhl2dWf2oAIpDauBWWipInEDgqUGKskSGhS1rLmiX55Fhwo0aZc2q1KijCO49Ay6yRGJSwMa1MQGkqzViHWKAwzJRUrzUxJxZaZk9itY6hYEoBlNpSjMsyKisdq5iQklDWzpiwSZm1j1wEkhtlSwVrNOqGC1efYhJQjM6MAcPPLWs2W2vyERqKZbdmaP9GsbVimVoutpgMIDbMuIQDlJgD53w9ZAO6bXzFrVb7m17LmdxNAac2vCqr5NZskdN9qzKzo5j9XavOrcjY/U1KFZm3CsEiUNcwLuM2x+qdNabbBi8Mhg/KtJpdSOmO0Z6lc8M4a89HnWpeKJwBlljrSwje9tCKEJHYbaZvbrtMU0qWDFLoi0nJvmM3PaqGkMrFOpLA+OFupvKra2xx47Q6VZi6tsByUy47mBHyYAoSloym1KwdkkAvFXrYzr8dpYmCRjsgz+5ONXipwp2d+BHJQCgokRUMrwm/tjuPThvlHJK2jOaTtfLqw20ixOB5sUftB6CDxGE7yBGmabsLsdBFrRKQjTMzpfJPYSGfiS9oGA7M7a7AHNYOdH9JvBqzAXpdW+BCAPqV2YHHI7UMGT8BtkThRTwokUlmQM5wpmQ+doNpAeO3OJrRxw24phkiHFpuD4aYBUlUb6LYRM3qYJjIc6NnAkRMSdnhbHUhDDjI7BChfBoM3KThIkksrUCVN28QBqA2zUnlG7UikI6fB+PPNAgyK7qyt3QEecITUdurNj4gvbZBwKGYAJnpVtB3B0fzSCqzXliIJEgQDNMXAcAbGekBj4+yccqsU58DqQS1sLW8maSpSCmYDHIahEgtwclbkvKN2DR4yltkRPSNUzwUwSJpLK7ga2A4S6iaYbTfgOhblIF6wieCswkyQSrpDKRpj8Uy2wofpDFaR2eHNKajnChCknJnDYblxzVCco0qD/iYyPwIHd2b0CAkkIgA6bpxeWqFo8yF+IHBQhrYrCzDIClgMFmZBxE5ABkMpBoCP+x4SizY8b4VIgRGSnoFdaDvXgINHCEmQ0s3lRhM3YWZ8ypsaIfHRX12TrMyPkJR88h7oIa3dkdq5Ag3A0EIeJKiOvOrPtNMUOKz8/TXYbTmag3ptojN0Zw3qIY7mKTmW47bUTg42brcRdJAQeJRI1KoXQ07ClTikdJEIbmzQPuiRXF8wCbYT9aRhSYJ0NTMYRSN6Anj9of9Ud1J874WKiaGxgLTNsMwqIAx02vzzatCWTblxPQ8HTcGR1pNY4Uux0wYDgMCdNQbXWs/wfXyPZmuOwJ01OFN4foSuGjh06qEZwfR83xVHG13M1E4bEBZ31sDj4Zvj3VmDAkfkRVHgYsi2Ywhu44tvIIGfhQ8d7qw4teq9EC9YbLXVbQd0290ZuOQIXMQ9Y1DvaA5u2iDqiftGzI9YeK3doa+xPpqDFXiBZaXgmoU4B/YO3C3JLN0gbo4HNFA9cIUlKIfiW4f8ZT6c8cpnaye7O8xGeljmI9LiZZAqpvLgeLYFF2YoMUHgQ8wltB2vw/bRXz1qt0WCg6YSKuhBZqec60ycw7fMSVPKttYuEHxzPDcczVNQnNUjcR8HR+aSq8Vb6lcq5kvWlKZcKkU6Ctv8cLglwTfHkwPOPeERGkhivHKJuq8dwcqlWcV8I5s3HDSJRDp0xTw63qo3LleI3VKnLrhdJh8Sku2UBHSjKmN90JfU3wAiHUbOb+7uZFuQjRTfHE+K+ID3xJsR3aQNYn4NSTo/qowvs+HRua0TJtKplD5o2MfZ1mhYnpzj6+Z+dtgH+6VIF8tIlSqhNYaDBVUwE+uocqkWNuzHTSnLBCrKQ2vqB7LGRDtwpFi18GiyUvl7M0Kk2XC+W49zKTeYiKfQobw/HQ+He4Kj4XxwdJNbXiTuVbZWepS77qJhv3s2PRUQTc+OtmuxWhhw2zcwE/VEIi2VrdaKo4WgqLWGSokatpnEvFNonpPIsi0okpNEUUNDNKz70yj1UFBURtWa40XDhjERFGGMWW+L/tB/zvrPWf/5Q/856z+fpxZMKkERERGpSi33UkVglKp+EYmAh+Kq9FNZoqPRA0HRaETjxBP/ZrBRyKvbLi9OXr36VDh0cnHrsrVJUkoi7lF6En356bM37+PJW2v7yfXZhvcFQ8PhT37yzbV/94uLlzT2DVFvqyc9ePXsz35yfbfn+4Kje/evrf7mPL64qAFbE/FmjbYMLl999/5+S3cER6u2vLb6fzb4jhxdvCOx6auna7f9v+BozaafvHfLSsW7Rw3oy2ff2V+/TYBW7D+//+OXtmh3gmJqfnq4OglY2392IeWVWDcseNl877MWgtb+7B8sR6w7iS+Z372+m9Bx/2O6DEqRDrUGRn/WmoSN5884FekOxt7o8kkLgWsPL3mIRbry90a3Nht0rrz0U+Y7oAADuki0XIgCm4rkFg/FusI9RxfXVt9cdsAsP/RIJf3XJig7wpAuO9he6k3q7VQgTy9MTazjwcnmsrP5Whijr/PbN4+3TfFI3+iXny7Bd2fT8XLKVzYdw0+HOULlt8v9U+4ljKHXY2C1Q5r+9OXICeWNUS+PN3cqj++KqkSPMWgARY2lyAwFyqPxphz8iT6gL4wnevxnP3JMhQcOhxKjn6C+TfQZKZsQYtBFDKUQj4Hbn/0oegzczoPsNkbsCKHzjvmjMWG+6fB4c1MAPHA4lBh+AmhU1+byTwNA2gL56s9+9NH5R3CARSStHfEEIo3tSIE+UAP2rc6jLtZvkykS1S8DDzGWe+zUewzjHD+KRKYUkYrst1O/5tFH0Vcg5yNRPvqzItWAcl4kLZjEHEBqcsf4EchMm8IFDsxonFQmArn800L0cQRcHEEQIYgUHGaqW3P5F6NHY8H4kUhNjx0DMPACGs4V0Pgos3gmV4CsRxwIEvudd/IiuXLesT4vtP7sR5d/4ZEjAmMUsfw06k2dr2czvhw9FpzH1f4sGF9tPkbdIHyU2SXQ/qcvgw7Q+FF0HtT6CgnoKH3kGAkVMOQDoKNH8BB03Rr4eB+9EhYB2GH8iOaxGDzBJCayleuFKOcdQaiy+ViCo/FNUi4/+pfRL16OzoPTXW54XNdGHN0lFy4QVRyf8+ej6Lx8M+Eu0pjLhdD8SJwNdySA+VcIYHybokodGzFEkmyWrQgDx+MxOJ7jDpCqhLV8M/B3okKHlh+DKH/6MsFPX4bHlM7XtxebX4FPhXej2AEVx48i6qCMG376MnV6C+lhIpDFUE48j86DYXY28W51bsaP6Pk1NNAO5DuwcLmZ6E3h+TU7gB2cLIl+FBD5BUcY4nzgz7op70qHyR3JjOAdQgZHgI3Gjx6LL6QcoQUtKAFSAxiSAVLzjinP+ihk83tjfw1exCS5lomUkejBNCdxlWnRAqQGNKQjk984ouxXY98yCyLmxZHZ0klFloibVJkiXZAqrI4eCGAEvGcPakDHTJRTTkeH9/bvCNv0nfe4VTJxDm0ZmA/vCx2fvU9tse5jZAgT8+MnQsdff2qlhliXolo1L767f+eOoGU0+fhWLNKdizESWi/ff7IvWDN37uxf3+3whCYVZiKdDMW6+OLa6vf29+8I09rWdGW8Lu1cxBsXjC7TW+89ie/t3xEg7d+7f/iJSb1IzBvSlCabo0+f8ef7AqT4z764GNWAoot7w1MtFPry4tNPvnj28Ol3hUNPHz589vE/nNx6KXklYaKeiO4ly4COLi9OTk5eCYZOTi4uLrllK36Exb8R8Oq5E0stWcKhVVHwf4l/DZOqDAtNUBSHyhhdT3zLAUJTc4DR3NhSzvrPWf856z9n/WdRww==)

Data Simulation Framework

#### Managers Supported

The following managers are currently available in the simulation:

1. DataConnectionManager
2. DataProfileManager
3. DataFilterManager
4. DataSettingsManager
5. ServingSystemManager
6. SocksManager
7. NatManager
8. L2tpManager
9. FirewallManager
10. BridgeManager
11. VlanManager
12. DualDataManager
13. DataControlManager
14. DataLinkManager

#### Data APIs Response handling

The framework allows responses of each API to be configured using a JSON file.

Each manager has its own JSON configuration file present under `simulation/json/api/data/`, For example

**Data Connection Manager:** configured via simulation/json/api/data/IDataConnectionManager.json has API command response for telux::data::IDataConnectionManager::getDefaultProfile

"getDefaultProfile": {
       "callbackDelay": 400,
       "error": "SUCCESS",
       "status": "SUCCESS"
    },
    Copy to clipboard

The JSON file holds the default values and could be updated dynamically by the users of the simulation.

#### Data event handling

##### Update dual data capability change

The event injector allows you to inject event for simulating dual data capability change.

*Sample input:*

telsdk_event_injector -f dual_data -e capabilityChange 1
    Copy to clipboard

##### Update dual data usage recommendation change

The event injector allows you to inject event for simulating dual data usage recommendation change.

*Sample input:*

telsdk_event_injector -f dual_data -e recommendationChange ALLOWED
    Copy to clipboard

#### Network Interface Configuration

To simulate data calls, the framework requires physical interfaces provided by the host or docker environment, to be configured. Each data call would be mapped to one physical interface.

To configure which interface should be used, in tel.conf update the following configuration:

sim.data.physical\_interface\_name = eth0, eth1

Here the first data call that is brought up will be mapped to eth0 and second will be mapped to eth 1. If the client attempts to bring up a third data call it will fail because no more physical interfaces are available.

If a host/docker is limited in the number of interfaces it has, one could use the following commands to add virtual interfaces.

##### If the host machine does not have multiple interfaces available:

Considering the host machine has only eth0 interface available, the client can add the virtual interfaces using the command `ip addr add <IP_ADDRESS>/subnet dev eth0 label eth0:1`

Now user can update `sim.data.physical_interface_name = eth0, eth0:1` in `/etc/telux/tel.conf`.

The first datacall would be started with interface eth0 and the second datacall would be started with interface eth0:1.

Any further attempt to start the datacall would result in failure to start datacall and telux::data::IDataCall object will return NET\_NO\_NET.

##### IPv6 support inside docker container

Docker does not have IPv6 support by default. Users of the simulation can follow the steps below to enable IPv6 inside docker container.

$ vi /etc/docker/daemon.json
    
    "ipv6": true,
    "fixed-cidr-v6": "<SUBNET>",
    "dns": [<dnsAddress1>,<dnsAddress2>,<dnsAddress3>,<dnsAddress4>],
    "experimental": true,
    "ip6tables": true,
    
    $ systemctl restart docker
    Copy to clipboard

Once above settings are done in daemon.json, we can enable IPv6 support with the following options, while starting the docker container.

`--cap-add=NET_ADMIN --sysctl net.ipv6.conf.all.disable_ipv6=0`

#### Additional notes

1. To simulate data calls, the framework requires physical interfaces provided by the host or docker environment, to be configured.
2. Listener APIs under IServingSystemListener are not yet supported in simulation.
3. SSR use-cases are not yet supported.

### Thermal Simulation

#### Overview of Thermal Simulation

This page and the sub-pages provide information about Thermal subsystem simulation.

![../_images/simulation_thermal_overview.png](data:image/png;base64,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)

Thermal Simulation Framework

#### Supported interfaces

IThermalManager, IThermalListener.

#### Thermal API response handling

A thermal API response can be configured through a JSON file.

Thermal manager has its own JSON configuration file present under `simulation/json/api/therm/`.

If the client configures the API behavior to mimic an error scenario by setting the response error code
to anything other than “SUCCESS”, the thermal server’s response will be modified to simulate the erroneous behavior.

##### Example 1:

API command response for telux::therm::IThermalManager::getThermalZones

"getThermalZones": {
           "error": "SUCCESS"
    },
    Copy to clipboard

When the “error” field is set to SUCCESS, the server sends the response to the client without making any modifications.

##### Example 2:

API command response for telux::therm::IThermalManager::getCoolingDevices

"getCoolingDevices": {
           "error": "INTERNAL_ERR"
    },
    Copy to clipboard

When the the “error” field is set to INTERNAL\_ERR, the server sends nullptr as the response to the client.

To configure simulation with the static configuration describing the thermal zone, trip points and cooling devices in the system, one should refer and update the `simulation/json/system-info/therm/ThermalState.json`

#### Thermal event handling

##### Thermal events

The following thermal events can be simulated by changing the current temperature of any thermal zone.

1. telux::therm::IThermalListener::onCoolingDeviceLevelChange
2. telux::therm::IThermalListener::onTripEvent

Sample input:

telsdk_event_injector -f therm -e setTemp <tzone_id> <tzone_temp>
    telsdk_event_injector -f therm -e setTemp 24 126000
    Copy to clipboard

- Above, 24 indicates the tzone Id and 126000 indicates the new temperature to be set for a thermal zone.
- Based on the new temperature, the thermal subsystem will calculate the events for trip and cooling device level.

### Power simulation

#### Overview of Power Simulation

The power simulation framework provides the ability to support for the power management simulation.

![../_images/simulation_power_overview.png](data:image/png;base64,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)

Power Simulation Framework

#### Power simulation Abilities

1. Provides ability to exercise and control  behavior of the TelSDK APIs for power management.
2. Currently, only PVM machine is supported.
3. A client can register as a master or slave. A slave client can register for LOCAL or ALL MACHINES.
4. Support for suspend and resume events.

#### Power simulation state change notifications

1. Suspend/Shutdown Triggers

| Triggered For | Slaves on Local Machine | Slaves on All Machine |
| --- | --- | --- |
| Slaves registered on ALL MACHINES | RECEIVES SUSPEND | RECEIVES SUSPEND |
| Slaves registered on LOCAL MACHINES | RECEIVES SUSPEND | NO SUSPEND |

2. Resume Triggers

| Triggered For | Slaves on Local Machine | Slaves on All Machine |
| --- | --- | --- |
| Slaves registered on ALL MACHINES | RECEIVES RESUME | RECEIVES RESUME |
| Slaves registered on LOCAL MACHINES | RECEIVES RESUME | NO RESUME |

If both Machines are in the same state and incoming state request is the same as the machine state, INCOMPATIBLE\_STATE is returned.
However, if LOCAL is in suspend and ALL is in resume, and if incoming state is RESUME on ALL machines, LOCAL machine is resumed.
There’ll be no situation of ALL machines in suspend and LOCAL in resume since this deviates from target behavior.

3. NACK/NOACK behavior

If slave doesn’t send ack or sends NACK to acknowledge suspend/resume event notification reception, status sent to MASTER will be NOTREADY.
Within 10 seconds if master sends a RESUME, SUSPEND/SHUTDOWN is halted else system moves to the suspended/shut down state.

#### Power simulation support for events

The framework supports injection of the machine availability event to notify client via @ref ITcuActivityListener::onMachineUpdate, if the LOCAL machine is available or not.

Sample input:

telsdk_event_injector -f power_mgr -e machine_availability <availability>
    telsdk_event_injector -f power_mgr -e machine_availability AVAILABLE
    Copy to clipboard

Valid values for &lt;availability&gt; - UNAVAILABLE/AVAILABLE

#### Additional Notes

1. The power manager service, master app and slave apps all run on the same container.
2. This Framework simulates PVM ONLY behavior. Hence, API behavior is as per PVM ONLY registered clients.
3. The simulation device on which the framework runs is hardcoded as PVM in the power simulation library. All slaves registering with PVM are treated as a LOCAL machine in the simulation framework.
4. As of today, suspend and resume are only state change triggers across the processes using the power simulation framework. The host system on which simulation is running is not really suspended when a master client issues suspend.
5. Modem activity state is a canned response via  JSON configuration file.

### Sensor Simulation

#### Overview of Sensor Simulation

This page and the subpages provide simulation usage information for the sensor
subsystem that is part of the telux::sensor namespace of the Telematics SDK.

The sensor simulation framework provides the ability to record sensor data from an actual
telematics device.
Applications using ISensorClient and ISensorFeatureManager APIs get sensor
events from this recorded data.

![../_images/simulation_sensor_overview.png](data:image/png;base64,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)

Sensor Simulation Framework

#### Configuring Sensor API responses

The sensor manager, sensor client, and sensor feature manager have JSON configuration files to
configure responses for each API.

Clients can configure these APIs as follows.

Sensor Manager (`simulation/json/api/sensor/ISensorClient.json`)

Example:

**API command response for selfTest**

"selfTest": {
        "callbackDelay": 400,
        "error": "SUCCESS",
        "status": "SUCCESS"
    },
    Copy to clipboard

Sensor client (`simulation/json/api/sensor/ISensorClient.json`)

Example:

**API command response for configure**

"configure": {
        "error": "SUCCESS",
        "status": "SUCCESS"
    },
    Copy to clipboard

Sensor Feature Manager (`simulation/json/api/sensor/ISensorfeatureManager.json`)

Example:

**API command response for enableFeature**

"enableFeature":{
        "status": "SUCCESS"
    },
    Copy to clipboard

#### Support for sensor events

The following events are supported by SensorClient.

1. Sensor events for multiple configurations
2. Client configuration update events
3. Buffered events for sensor feature manager

#### Format of sensor reports

Sensor simulation can provide prerecorded/captured data from the target device to clients in the
form of a CSV file.

**Reports captured via CSV:**

This script records sensor data captured using the recording utility provided for the sensor
client. By default, this script captures sensor events for UNCALIBRATED\_ACCELEROMETER and
UNCALIBRATED\_GYROSCOPE with both ROTATED and UNROTATED configurations enabled at a 104 Hz
sampling rate.

Note

Once captured, sorting has to be done using the utilities provided.

**Data representation:**

1. Each CSV row represents a complete iteration of the sensor event at time interval T.

**Data reporting:**

Sensor events are recorded at 104 Hz with rotated and unrotated data for uncalibrated accelerometer
and gyroscope clients. On reaching the CSV’s EOF, clients can configure if the CSV is replayed via
the `sim.sensor.sensor_report_replay` configuration in `tel.conf`.

If replay is not selected, the sensor reports are stopped.

**Client usage:**

By default the prerecorded/captured CSV file is stored at:

1. `${ROOTFS}/data/telux/csv/PRE-RECORDED_SENSOR_DATA.csv` for sensor client
2. `${ROOTFS}/data/telux/csv/PRE-RECORDED_SENSOR_BUFFER_DATA.csv` for sensor feature manager
3. Clients can configure the retrieval of reports via `tel.conf` by modifying the following fields:

sim.sensor.sensor_report_file_name
    sim.sensor.sensor_buffered_events_file_name
    sim.sensor.sensor_report_consumption
    sim.sensor.sensor_report_replay
    Copy to clipboard

See the `tel.conf` documentation for the usage details of these fields.

#### Recording utility for Sensor Reports

The recording utility captures sensor reports running on the target device
so the collected data can be used for off-target SDK simulation.

**Reports supported by the recording utility:**

This script provides sensor data captured using the recording utility provided for the sensor
client. By default, this script captures sensor events for UNCALIBRATED\_ACCELEROMETER and
UNCALIBRATED\_GYROSCOPE with both ROTATED and UNROTATED configurations enabled at a 104 Hz sampling
rate.

**Data representation:**

Each CSV row represents a complete iteration of the sensor event at time interval T.

The report is represented by a string containing the fields separated by a comma(,).

**The tool to capture data is provided under:**

- `simulation/scripts/record_and_sort_sensor_data.sh`
- `simulation/scripts/record_sensor_data.bat`
- `simulation/scripts/sort_sensor_data.ps1`

**Client usage:**

1. Connect the target to the PC.
2. Ensure that adb is available and restart adb as root by running “adb root”.
3. On a Linux machine run the record\_and\_sort\_sensor\_data script and capture the sorted data in a CSV file.
4. On a windows machine run record\_sensor\_data batch file from command prompt to capture data in a CSV file.
Then use sort\_sensor\_data scipt in a power shell terminal to sort the captured CSV file.
5. At the beginning of the generated csv file, the copyright is added automatically. Each line starts with double number sign(##).
If any new copyright is needed, please follow the same format by adding “##” at the beginning of each line.

### Platform Simulation

#### Overview of Platform Simulation

This page and the sub-pages provide information about usage of simulation for the Platform
sub-system that are part of the telux::Platform and telux::Platform::hardware namespaces of
the Telematics SDK.

![../_images/simulation_platform_overview.png](data:image/png;base64,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)

Platform Simulation Framework

#### Managers Supported

The following managers are currently available in the simulation:

1. DeviceInfoManager
2. AntennaManager
3. TimeManager
4. FsManager
5. SubsystemManager

#### Platform APIs response handling

The framework allows responses of each API to be configured using a JSON file.

Each manager has its own JSON configuration file present under `simulation/json/api/platform/`, For example

**Device Info Manager:** configured via simulation/json/api/platform/IDeviceInfoManager.json has API command response for telux::platform::IDeviceInfoManager::GetPlatformVersion

"GetPlatformVersion": {
           "status": "SUCCESS"
    },
    Copy to clipboard

The JSON file holds the default values and could be updated dynamically by the users of the simulation.
If the client configures the API behavior to mimic an error scenario by setting the response error code
to anything other than “SUCCESS”, the platform server’s response will be modified to simulate the erroneous behavior.

To configure simulation with the static configuration describing the meta build ID, apps build ID and other details, one should refer and update the `simulation/json/system-info/platform/version_info.json`

#### Platform event handling

##### Platform events

The following platform events can be simulated using the telsdk\_event\_injector.

1. telux::platform::IFsListener::onEfsBackupEvent
2. telux::platform::IFsListener::onEfsRestoreEvent
3. telux::qmi::IQmiMrcListener::onOtaABSyncEvent
4. telux::qmi::IQmiMrcListener::onFsOperationImminentEvent
5. telux::platform::ISubsystemListener::onStateChange

Sample input:

telsdk_event_injector -f fs_manager -e efsBackup <eventName> <status>
    telsdk_event_injector -f fs_manager -e efsBackup EFS_BACKUP_START SUCCESS
    Copy to clipboard

### Security Simulation

#### Overview of Security Simulation

This page and the sub-pages provide information about usage of simulation for the Security
sub-system that are part of the telux::sec namespace of the Telematics SDK.

![../_images/simulation_security_overview.png](data:image/png;base64,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)

Security Simulation Framework

#### Managers/Interfaces Supported

The following managers are currently available in the simulation:

1. IRandomNumberManager
2. ICellularSecurityManager
3. IWiFiSecurityManager
4. ICAControlManager
5. ICryptoManager

#### Security APIs Response handling

The framework allows responses of each API to be configured using a JSON file.

Each manager has its own JSON configuration file present under `simulation/json/api/sec/`, For example

**Random number manager:** configured via simulation/json/api/sec/IRandomNumberManager.json has API command response for telux::sec::IRandomNumberManager::getRandomNumber

"getRandomNumber": {
       "error": "SUCCESS",
    },
    Copy to clipboard

The JSON file holds the default values and could be updated dynamically by the users of the simulation.

#### Security event handling

##### ICellularSecurityManager events

**Cellular security scan reports**

telsdk_event_injector -f ccs -e sec_report threat_score <score> cell_id <cid> pid <pid> mcc <mcc> mnc <mnc> threats <threats> action_type <action> rat <rat> env_state <state>
    Copy to clipboard

- **score:** An integer representing threat score from 0 to 500.
- **cid:** An integer representing unique identifier of a cell operated by a mobile network operator.
- **pid:** An integer representing physical cell id.
- **mcc:** An integer representing mobile country code.
- **mnc:** An integer representing mobile network code.
- **threats:** Bitmask of the threat types described in telux::sec::CellularThreatType.
- **action:** An integer representing an enumerator from telux::sec::ActionType.
- **rat:** An integer representing an enumerator from telux::sec::RATType.
- **state:** An integer representing an enumerator from telux::sec::EnvironmentState.

Example: `telsdk_event_injector -f ccs -e sec_report threat_score 250 cell_id 3 pid 1 mcc 311 mnc 030 threats 12 action_type 0 rat 4 env_state 2`

**Modem SSR**

telsdk_event_injector -f ccs -e ssr <status>
    Copy to clipboard

- **status:** should be SERVICE\_AVAILABLE or SERVICE\_UNAVAILABLE.

Example: `telsdk_event_injector -f ccs -e ssr SERVICE_UNAVAILABLE`

##### IWiFiSecurityManager events

**WiFi security scan reports**

telsdk_event_injector -f wcs -e sec_report ssid <wifiname> bssid <bssid> is_connected <coninfo> is_open <openinfo> ml_algo_analysis_threat_score <score> ml_analysis_result <ml_result> summoning_analysis_result <summoning_result>
    Copy to clipboard

- **wifiname:** Name of the WiFi network (service set identifier).
- **bssid:** MAC address of the AP.
- **coninfo:** true if the device is connected to this AP otherwise false.
- **openinfo:** true if devices can connect to this AP without authentication otherwise false.
- **score:** An integer representing threat score determined by ML algorithm from 0 to 100.
- **ml\_result:** An integer representing an enumerator from telux::sec::AnalysisResult.
- **summoning\_result:** An integer representing an enumerator from telux::sec::AnalysisResult.

Example: `telsdk_event_injector -f wcs -e sec_report ssid wifiname bssid 02:13:37:a9:50:09 is_connected false is_open true ml_algo_analysis_threat_score 100 ml_analysis_result 3 summoning_analysis_result 2`

**Deauthentication report**

telsdk_event_injector -f wcs -e deauth_attack deauth_reason <reason> ap_init_disconnect <info> score <score>
    Copy to clipboard

- **reason:** An integer representing reason code why disassociation or deauthentication occurred.
- **info:** true if the AP initiated the disconnection otherwise false.
- **score:** An integer representing threat score from 0 to 100.

Example: `telsdk_event_injector -f wcs -e deauth_attack deauth_reason 7 ap_init_disconnect true score 25`

**Trusting an access point**

telsdk_event_injector -f wcs -e is_trusted_ap ssid <wifiname> bssid <bssid>
    Copy to clipboard

- **wifiname:** Name of the WiFi network (service set identifier).
- **bssid:** MAC address of the AP.

Example: `telsdk_event_injector -f wcs -e is_trusted_ap ssid wifiname bssid 02:13:37:a9:50:09`

**IWiFiSecurityManager service SSR**

telsdk_event_injector -f wcs -e ssr <status>
    Copy to clipboard

- **status:** should be SERVICE\_AVAILABLE or SERVICE\_UNAVAILABLE.

Example: `telsdk_event_injector -f ccs -e ssr SERVICE_UNAVAILABLE`

##### ICAControlManager events

**Reporting load**

A precalculated load is reported whenever load is reported to the application as per time interval passed in telux::sec::startMonitoring() API.

telsdk_event_injector -f calc -e load sm2 <c1> nist256 <c2> nist384 <c3> bp256 <c4> bp384 <c5>
    Copy to clipboard

- **c1:** An integer representing how many SM2 operations have been performed until now.
- **c2:** An integer representing how many NIST256 operations have been performed until now.
- **c3:** An integer representing how many NIST384 operations have been performed until now.
- **c4:** An integer representing how many BP256 operations have been performed until now.
- **c5:** An integer representing how many BP384 operations have been performed until now.

Example: `telsdk_event_injector -f calc -e load sm2 12 nist256 5 nist384 9 bp256 7 bp384 21`

**Reporting capacity**

By default platform supported capacity is reported. This can be altered as shown below.

telsdk_event_injector -f calc -e capacity sm2 <c1> nist256 <c2> nist384 <c3> bp256 <c4> bp384 <c5>
    Copy to clipboard

- **c1:** An integer representing how many SM2 operations can be performed.
- **c2:** An integer representing how many NIST256 operations can be performed.
- **c3:** An integer representing how many NIST384 operations can be performed.
- **c4:** An integer representing how many BP256 operations can be performed.
- **c5:** An integer representing how many BP384 operations can be performed.

Example: `telsdk_event_injector -f calc -e capacity sm2 4000 nist256 4000 nist384 2200 bp256 4000 bp384 1500`

#### Additional Notes

1. If the host computer doesn’t have the correct permissions, please execute “chmod 0666 /dev/hwrng” to set the correct permissions for the random number generator feature.
2. In the simulation environment, ICryptoManager does not perform actual cryptographic operations. Instead, it returns predefined (canned) responses based solely on the API call made.
Input parameters are not evaluated or used in determining the response. All responses are retrieved from a JSON configuration file located under `simulation/json/system-state/sec/`.
This approach allows consistent simulation behavior for testing and integration without implementing real cryptographic logic.

Last Published: May 20, 2026

[Previous Topic
Building a sample application](https://docs.qualcomm.com/bundle/publicresource/80-PF458-7/topics/building-telsdk-based-apps.md) [Next Topic
Sample applications](https://docs.qualcomm.com/bundle/publicresource/80-PF458-7/topics/sample-applications.md)