` to the end of the URL). When you enter or exit a geofence, Locative will send a `GET` request to that URL, updating Home Assistant.
From 95176dacaaf373f5e15080ca906903e0b6928ace Mon Sep 17 00:00:00 2001
From: Robbie Trencheny
Date: Sat, 30 Jul 2016 12:34:41 -0700
Subject: [PATCH 03/61] Add Facebook page to footer
---
source/_includes/custom/footer.html | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html
index fb00e0429d9..3e44ef7394f 100644
--- a/source/_includes/custom/footer.html
+++ b/source/_includes/custom/footer.html
@@ -1,5 +1,6 @@
\ No newline at end of file
+
From dabf5b169c079761815821d352789faf3ec3ead0 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 30 Jul 2016 13:50:29 -0700
Subject: [PATCH 04/61] Update
2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
---
...ustom-frontend-panels--jupyter-notebooks--directv.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
index 9b0173e69bd..a62aad664b8 100644
--- a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
+++ b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
@@ -28,7 +28,7 @@ I would like to do a shoutout to [@fabianhjr]. He has started adding [typing] da
- Allow components to register [custom frontend panels][custom-panels] ([@balloob])
- Add example custom_component [react_panel][react-panel] showing custom panels ([@balloob])
- Light: [MagicLight/Flux WiFi Color LED Light][flux] support ([@Danielhiversen])
-- Script: Delay support for [Scripts][script] ([@Teagan42])
+- Script: Specify a delay [using templates][script] ([@Teagan42])
- Media player: [Russound RNET][Russound] integration ([@laf])
- Remote: Option specifying custom timeout when calling Home Assistant API ([@n8henrie])
- Thermostat: Integration of [KNX] thermostats ([@open-homeautomation])
@@ -114,4 +114,4 @@ I would like to do a shoutout to [@fabianhjr]. He has started adding [typing] da
[KNX]: /components/thermostat.knx/
[Nest]: /components/thermostat.nest/
[filters]: /topics/templating/#home-assistant-template-extensions
-[Hyperion]: /components/light.hyperion/
\ No newline at end of file
+[Hyperion]: /components/light.hyperion/
From f38c8274e172593596c278bcdebcfedd02a3783c Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 30 Jul 2016 14:21:27 -0700
Subject: [PATCH 05/61] Add G+ link
---
source/_includes/custom/footer.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html
index 3e44ef7394f..4e69741e097 100644
--- a/source/_includes/custom/footer.html
+++ b/source/_includes/custom/footer.html
@@ -1,6 +1,7 @@
+
From 4605f2ea475ae79c080b774ad4e27feff51047b5 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 30 Jul 2016 14:23:18 -0700
Subject: [PATCH 06/61] Update description
---
...-custom-frontend-panels--jupyter-notebooks--directv.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
index a62aad664b8..9b819601cea 100644
--- a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
+++ b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
@@ -1,7 +1,7 @@
---
layout: post
title: "0.25: Custom frontend panels, Jupyter notebooks, DirecTV."
-description: "This new release of Home Assistant contains support for iFrame panels."
+description: "Frontend became blazing fast and extensible. DirecTV support added."
date: 2016-07-30 12:00:00 +0000
date_formatted: "July 30, 2016"
author: Fabian Affolter & Paulus Schoutsen
From 02ee5cde79cc995825632ed77e58263917eac2b6 Mon Sep 17 00:00:00 2001
From: Corban Mailloux
Date: Sat, 30 Jul 2016 17:47:35 -0400
Subject: [PATCH 07/61] Fix copy-paste errors. (#705)
---
source/_components/panel_iframe.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown
index 846887b005f..b10cfa9690e 100644
--- a/source/_components/panel_iframe.markdown
+++ b/source/_components/panel_iframe.markdown
@@ -34,6 +34,6 @@ Configuration variables:
- **[panel_name]** (*Required*): Name of the panel.
- **title** (*Required*): Friendly title for the panel. Will be used in the sidebar.
- - **icon** (*Optional*): The API token of your bot.
- - **url** (*Required*): The chat ID of your user.
+ - **icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
+ - **url** (*Required*): The URL to open.
From c941c029dd57dab5c7421f158afd0fcd14115fce Mon Sep 17 00:00:00 2001
From: andrew-curtis
Date: Sun, 31 Jul 2016 07:49:06 +1000
Subject: [PATCH 08/61] Update hdmi_cec.markdown (#701)
added 'note' style to relevant paragraphs
---
source/_components/hdmi_cec.markdown | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown
index d5267e82308..6a21b04cd69 100644
--- a/source/_components/hdmi_cec.markdown
+++ b/source/_components/hdmi_cec.markdown
@@ -39,17 +39,9 @@ For the default virtual environment of a [Raspberry Pi AIO](/getting-started/ins
$ ln -s /usr/local/lib/python3.4/dist-packages/cec /srv/hass/hass_venv/lib/python3.4/site-packages
```
-If after symlinking and adding `hdmi_cec:` to your configuration you are getting the following error in your logs,
-
-```bash
-* failed to open vchiq instance
-```
-
-you will also need to add the user account Home Asssistant runs under, to the `video` group. To add the Home Assisitant's user account to the `video` group run the following command.
-
-```bash
-$ usermod -a -G video
-```
+If after symlinking and adding `hdmi_cec:` to your configuration you are getting the following error in your logs,
+`* failed to open vchiq instance` you will also need to add the user account Home Asssistant runs under, to the `video` group. To add the Home Assisitant's user account to the `video` group, run the following command. `$ usermod -a -G video `
+
## {% linkable_title Configuration Example %}
From 0a7f5ba73807486eef7ab8b60a93de8c3fb492c0 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 30 Jul 2016 19:12:46 -0700
Subject: [PATCH 09/61] Fix typo
---
...-custom-frontend-panels--jupyter-notebooks--directv.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
index 9b819601cea..795a8ec9145 100644
--- a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
+++ b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown
@@ -16,7 +16,7 @@ Starting with this release, we are extending our extensability to the frontend.
We have also seen an exciting trend of people starting to visualize their Internet of Things data using [Jupyter] Notebooks, which are a great way to create and share documents that contain code, visualizations, and explanatory text. In case you missed it, the [blog] post by [@kireyeu] shows an advanced usecase while our [Notebooks][jupyter-notebooks] in the [Home Assistant Notebooks repository][jupyter-repo] cover the basics.
-This release also includes a bunch of new integrations, among others three new media player platforms. This means that today Home Assistant cna talk to 26 different media players!
+This release also includes a bunch of new integrations, among others three new media player platforms. This means that today Home Assistant can talk to 26 different media players!
The brand-new [iFrame panel component][iframe_panel] allows you to add other websites as pages in the Home Assistant frontend. They will show up in the sidebar and can be used the same way as you open the frontend in your browser but all within one view.
From 467b18738aa56b5d30ff08ad0d4aa9d069e1f7b4 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Mon, 1 Aug 2016 14:38:38 +0200
Subject: [PATCH 10/61] Remove whitespaces
---
source/_components/device_tracker.locative.markdown | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/source/_components/device_tracker.locative.markdown b/source/_components/device_tracker.locative.markdown
index 4cf6d1539b6..8c98cdd88d6 100644
--- a/source/_components/device_tracker.locative.markdown
+++ b/source/_components/device_tracker.locative.markdown
@@ -21,7 +21,8 @@ device_tracker:
platform: locative
```
-Install on your smartphone :
+Install on your smartphone:
+
- [Android](https://play.google.com/store/apps/details?id=io.locative.app)
- [iOS](https://itunes.apple.com/us/app/geofancy/id725198453)
From 86f274f323251431898ac5ef3df3bbee2ec9aaaa Mon Sep 17 00:00:00 2001
From: John
Date: Wed, 3 Aug 2016 00:34:19 -0400
Subject: [PATCH 11/61] Add node_event documentation and example. (#722)
Adds a node_event example and updates the scene_activated example to utilize the object_id rather than the entity_id.
---
source/getting-started/z-wave.markdown | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown
index 6cd3ab4f618..1c8b2ce85a0 100644
--- a/source/getting-started/z-wave.markdown
+++ b/source/getting-started/z-wave.markdown
@@ -92,7 +92,7 @@ Depending on what's plugged into your USB ports, the name found above may change
#### {% linkable_title Events %}
-Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch):
+Some devices can also trigger scene activation or node events, which can be used in automation scripts (for example the press of a button on a scene enabled wall switch):
```yaml
# Example configuration.yaml automation entry
@@ -102,11 +102,25 @@ automation:
platform: event
event_type: zwave.scene_activated
event_data:
- entity_id: zwaveme_zme_wallcs_secure_wall_controller_8
+ object_id: zwaveme_zme_wallcs_secure_wall_controller_8
scene_id: 11
```
-The *entity_id* and *scene_id* of all triggered events can be seen in the console output.
+Or a basic class device reporting it's level via a node event:
+
+```yaml
+# Example configuration.yaml automation entry
+automation:
+ - alias: Turn on Desk light
+ trigger:
+ platform: event
+ event_type: zwave.node_event
+ event_data:
+ object_id: leviton_zwave_static_co_11
+ basic_level: 255
+```
+
+The *object_id*, *scene_id* (Scene Events), and *basic_level* (Node Events) of triggered events can be seen in the console output.
#### {% linkable_title Services %}
From 64e63e42e4169178611d0efa744c8863606e255d Mon Sep 17 00:00:00 2001
From: Matthew Treinish
Date: Wed, 3 Aug 2016 00:56:20 -0400
Subject: [PATCH 12/61] Add ac_mode option to thermostat.heat_control docs
(#723)
This commit adds the heat_control option add in change:
home-assistant/home-assistant#2719 to the documentation for that
component.
---
source/_components/thermostat.heat_control.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown
index 2b698f9cc11..1ec08330364 100644
--- a/source/_components/thermostat.heat_control.markdown
+++ b/source/_components/thermostat.heat_control.markdown
@@ -33,3 +33,4 @@ Configuration variables:
- **min_temp** (*Optional*): Set minimum set point available (default: 7)
- **max_temp** (*Optional*): Set maximum set point available (default: 35)
- **target_temp** (*Required*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup.
+- **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device.
From c18453b8608e0d6de5fb66320af0445bd5f2de4f Mon Sep 17 00:00:00 2001
From: HBDK
Date: Wed, 3 Aug 2016 14:15:05 +0200
Subject: [PATCH 13/61] added kelvin and mired mode to flux (#703)
* added kelvin and mired mode to flux
changed to suit proposed changes to the flux switch in this pull:
https://github.com/home-assistant/home-assistant/pull/2665
* changed as requsted
---
source/_components/switch.flux.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown
index ddb70a13ced..b78679e6693 100644
--- a/source/_components/switch.flux.markdown
+++ b/source/_components/switch.flux.markdown
@@ -35,6 +35,7 @@ switch:
sunset_colortemp: 3000
stop_colortemp: 1900
brightness: 200
+ mode: xy
```
Configuration variables:
@@ -47,4 +48,5 @@ Configuration variables:
- **sunset_colortemp** (*Optional*): The sun set color temperature. Defaults to `3000`.
- **stop_colortemp** (*Optional*): The color temperature at the end. Defaults to `1900`.
- **brightness** (*Optional*): The brightness of the lights. Calculated with `RGB_to_xy` by default.
+- **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are 'xy', 'mired' and 'kelvin'. Defaults to 'xy'.
From 12ee1f0cca3c39299840b22e438b4890bc534103 Mon Sep 17 00:00:00 2001
From: Marcelo Moreira de Mello
Date: Fri, 5 Aug 2016 07:46:02 -0400
Subject: [PATCH 14/61] Added whitelist option to InfluxDB (#735)
---
source/_components/influxdb.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown
index b53e983c2b8..439c198b9f1 100644
--- a/source/_components/influxdb.markdown
+++ b/source/_components/influxdb.markdown
@@ -30,6 +30,9 @@ influxdb:
blacklist:
- entity.id1
- entity.id2
+ whitelist:
+ - entity.id3
+ - entity.id4
tags:
- instance: prod
```
@@ -44,5 +47,6 @@ Configuration variables:
- **ssl** (*Optional*): Use https instead of http to connect. Defaults to false.
- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false.
- **blacklist** (*Optional*): List of entities not logged to InfluxDB.
+- **whitelist** (*Optional*): List of the entities (only) that will be logged to InfluxDB. If not set, all entities will be logged. Values set by the **blacklist** option will prevail.
- **tags** (*Optional*): Tags to mark the data.
From cc4c4990a8e598acc0fe991684d84cd101086436 Mon Sep 17 00:00:00 2001
From: John Arild Berentsen
Date: Sun, 7 Aug 2016 11:09:48 +0200
Subject: [PATCH 15/61] Update z-wave-controllers.markdown
---
source/getting-started/z-wave-controllers.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/getting-started/z-wave-controllers.markdown b/source/getting-started/z-wave-controllers.markdown
index 44d5495b3d5..3a40dea161e 100644
--- a/source/getting-started/z-wave-controllers.markdown
+++ b/source/getting-started/z-wave-controllers.markdown
@@ -22,7 +22,7 @@ Upon first run, the z-wave component will take time to initialize entities and e
| Aeotec Z-Stick Series 2 | ✓ | | |
| Aeotec Z-Stick Series 5 | ✓ | | |
| Razberry GPIO Module | ✓ | | |
-
+| ZWave.me UZB1 | ✓ | | |
## {% linkable_title Stick Alternatives %}
From 786d4b8eb7ccb64358a5d60ce2c4ab7def8b38ec Mon Sep 17 00:00:00 2001
From: John Arild Berentsen
Date: Sun, 7 Aug 2016 11:23:14 +0200
Subject: [PATCH 16/61] Updates for new options and events for zwave
---
source/getting-started/z-wave.markdown | 66 +++++++++++++++++++++++++-
1 file changed, 64 insertions(+), 2 deletions(-)
diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown
index 6cd3ab4f618..59912e5c6e4 100644
--- a/source/getting-started/z-wave.markdown
+++ b/source/getting-started/z-wave.markdown
@@ -92,6 +92,66 @@ Depending on what's plugged into your USB ports, the name found above may change
#### {% linkable_title Events %}
+**zwave.node_event**
+HomeAssistant will trigger a event when command_class_basic changes value on a node.
+This can be virtually anything, so tests have to be made to determine what value equals what.
+You can use this for automations.
+
+Example:
+
+```yaml
+ - alias: Minimote Button Pressed
+ trigger:
+ platform: event
+ event_type: zwave.node_event
+ event_data:
+ object_id: aeon_labs_minimote_1
+ basic_level: 255
+```
+
+The *object_id* and *basic_level* of all triggered events can be seen in the console output.
+
+**zwave.network_start**
+HomeAssistant will trigger a event when the zwave network is set up to be started.
+
+```yaml
+ - alias: ZWave network is starting
+ trigger:
+ platform: event
+ event_type: zwave.network_start
+```
+
+**zwave.network_stop**
+HomeAssistant will trigger a event when the zwave network stopping.
+
+```yaml
+ - alias: ZWave network is stopping
+ trigger:
+ platform: event
+ event_type: zwave.network_start
+```
+
+**zwave.network_ready**
+HomeAssistant will trigger a event when the zwave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` HomeAssistant will feel sluggish when trying to send commands to zwave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake.
+
+```yaml
+ - alias: ZWave network is ready
+ trigger:
+ platform: event
+ event_type: zwave.network_ready
+```
+
+**zwave.network_complete**
+HomeAssistant will trigger a event when the zwave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network.
+
+```yaml
+ - alias: ZWave network is complete
+ trigger:
+ platform: event
+ event_type: zwave.network_complete
+```
+
+**zwave.scene_activated**
Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch):
```yaml
@@ -102,11 +162,11 @@ automation:
platform: event
event_type: zwave.scene_activated
event_data:
- entity_id: zwaveme_zme_wallcs_secure_wall_controller_8
+ object_id: zwaveme_zme_wallcs_secure_wall_controller_8
scene_id: 11
```
-The *entity_id* and *scene_id* of all triggered events can be seen in the console output.
+The *object_id* and *scene_id* of all triggered events can be seen in the console output.
#### {% linkable_title Services %}
@@ -115,7 +175,9 @@ The Z-Wave component exposes four services to help maintain the network.
| Service | Description |
| ------- | ----------- |
| add_node | Put the zwave controller in inclusion mode. Allows one to add a new device to the zwave network.|
+| add_node_secure | Put the zwave controller in secure inclusion mode. Allows one to add a new device with secure communications to the zwave network. |
| remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.|
+| cancel_command | Cancels a running zwave command. If you have started a add_node or remove_node command, and decides you are not going to do it, then this must be used to stop the inclusion/exclusion command. |
| heal_network | Tells the controller to "heal" the network. Bascially asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. |
| soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.|
| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".|
From 04350e62917b40249ef05578ac9c5cc1d699c6b8 Mon Sep 17 00:00:00 2001
From: John Arild Berentsen
Date: Sun, 7 Aug 2016 11:27:11 +0200
Subject: [PATCH 17/61] Update z-wave-device-specific.markdown
---
.../z-wave-device-specific.markdown | 34 -------------------
1 file changed, 34 deletions(-)
diff --git a/source/getting-started/z-wave-device-specific.markdown b/source/getting-started/z-wave-device-specific.markdown
index 1c04e451af3..adfef28bee5 100644
--- a/source/getting-started/z-wave-device-specific.markdown
+++ b/source/getting-started/z-wave-device-specific.markdown
@@ -22,40 +22,6 @@ The option is commented out by default in `options.xml` and is a default key. Ma
It is best to pair these devices in Open Zwave Control Panel or other Zwave tool that can show you logs while pairing. Test the device before you save the configuration.
Make sure you copy the newly saved `zwcfg_[home_id].xml`into your HomeAssistant config directory.
-##### {% linkable_title Event basic_level for automation %}
-HomeAssistant will trigger a event when command_class_basic changes value on a node.
-This can be virtually anything, so tests have to be made to determine what value equals what.
-You can use this for automations.
-
-Example:
-
-```yaml
- - alias: Minimote Button Pressed
- trigger:
- platform: event
- event_type: zwave.node_event
- event_data:
- object_id: aeon_labs_minimote_1
- basic_level: 255
-```
-
-##### {% linkable_title Event scene_id for automation %}
-HomeAssistant will trigger a event when a scene is activated by a node in the zwave network.
-This can be a press of a button, so tests have to be made to determine what scene_id equals what.
-You can use this for automations.
-
-Example:
-
-```yaml
- - alias: Minimote Button 1 Pressed
- trigger:
- platform: event
- event_type: zwave.scene_activated
- event_data:
- object_id: aeon_labs_minimote_1
- scene_id: 1
-```
-
##### {% linkable_title Aeon Minimote %}
From 2132158ec6c1dc32c5d01b530826652ebccee1d0 Mon Sep 17 00:00:00 2001
From: John Arild Berentsen
Date: Sun, 7 Aug 2016 18:29:12 +0200
Subject: [PATCH 18/61] Alphabetic sorting
---
source/getting-started/z-wave.markdown | 52 +++++++++++++-------------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown
index 59912e5c6e4..a0ea9ad7d75 100644
--- a/source/getting-started/z-wave.markdown
+++ b/source/getting-started/z-wave.markdown
@@ -92,24 +92,25 @@ Depending on what's plugged into your USB ports, the name found above may change
#### {% linkable_title Events %}
-**zwave.node_event**
-HomeAssistant will trigger a event when command_class_basic changes value on a node.
-This can be virtually anything, so tests have to be made to determine what value equals what.
-You can use this for automations.
-
-Example:
+**zwave.network_complete**
+HomeAssistant will trigger a event when the zwave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network.
```yaml
- - alias: Minimote Button Pressed
+ - alias: ZWave network is complete
trigger:
platform: event
- event_type: zwave.node_event
- event_data:
- object_id: aeon_labs_minimote_1
- basic_level: 255
+ event_type: zwave.network_complete
```
-The *object_id* and *basic_level* of all triggered events can be seen in the console output.
+**zwave.network_ready**
+HomeAssistant will trigger a event when the zwave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` HomeAssistant will feel sluggish when trying to send commands to zwave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake.
+
+```yaml
+ - alias: ZWave network is ready
+ trigger:
+ platform: event
+ event_type: zwave.network_ready
+```
**zwave.network_start**
HomeAssistant will trigger a event when the zwave network is set up to be started.
@@ -131,25 +132,24 @@ HomeAssistant will trigger a event when the zwave network stopping.
event_type: zwave.network_start
```
-**zwave.network_ready**
-HomeAssistant will trigger a event when the zwave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` HomeAssistant will feel sluggish when trying to send commands to zwave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake.
+**zwave.node_event**
+HomeAssistant will trigger a event when command_class_basic changes value on a node.
+This can be virtually anything, so tests have to be made to determine what value equals what.
+You can use this for automations.
+
+Example:
```yaml
- - alias: ZWave network is ready
+ - alias: Minimote Button Pressed
trigger:
platform: event
- event_type: zwave.network_ready
+ event_type: zwave.node_event
+ event_data:
+ object_id: aeon_labs_minimote_1
+ basic_level: 255
```
-**zwave.network_complete**
-HomeAssistant will trigger a event when the zwave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network.
-
-```yaml
- - alias: ZWave network is complete
- trigger:
- platform: event
- event_type: zwave.network_complete
-```
+The *object_id* and *basic_level* of all triggered events can be seen in the console output.
**zwave.scene_activated**
Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch):
@@ -176,9 +176,9 @@ The Z-Wave component exposes four services to help maintain the network.
| ------- | ----------- |
| add_node | Put the zwave controller in inclusion mode. Allows one to add a new device to the zwave network.|
| add_node_secure | Put the zwave controller in secure inclusion mode. Allows one to add a new device with secure communications to the zwave network. |
-| remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.|
| cancel_command | Cancels a running zwave command. If you have started a add_node or remove_node command, and decides you are not going to do it, then this must be used to stop the inclusion/exclusion command. |
| heal_network | Tells the controller to "heal" the network. Bascially asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. |
+| remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.|
| soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.|
| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".|
From 0827a7646bed489675fd87256ef742e8f8387a7b Mon Sep 17 00:00:00 2001
From: Landrash
Date: Sun, 7 Aug 2016 21:58:50 +0200
Subject: [PATCH 19/61] Corrected reference to wrong line in code. (#744)
---
...measure-temperature-with-esp8266-and-report-to-mqtt.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown b/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown
index a9a37c646e6..4708b214852 100644
--- a/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown
+++ b/source/_posts/2015-10-11-measure-temperature-with-esp8266-and-report-to-mqtt.markdown
@@ -75,7 +75,7 @@ If you have followed the previous steps, you're all set.
- Open Arduino IDE and create a new sketch (`File` -> `New`)
- Copy and paste the below sketch to the Arduino IDE
- Adjust the values line 6 - 14 to match your setup
- - Optional: If you want to connect to an MQTT server without a username or password, adjust line 63.
+ - Optional: If you want to connect to an MQTT server without a username or password, adjust line 62.
- To have the ESP8266 accept our new sketch, we have to put it in upload mode. On the ESP8266 device keep the GPIO0 button pressed while pressing the reset button. The red led will glow half bright to indicate it is in upload mode.
- Press the upload button in Arduino IDE
- Open the serial monitor (`Tools` -> `Serial Monitor`) to see the output from your device
From 45c86f163197c870caf402342f3e2d73139e1a86 Mon Sep 17 00:00:00 2001
From: Teagan Glenn
Date: Sun, 7 Aug 2016 18:59:24 -0600
Subject: [PATCH 20/61] Update documentation to show unit system (#717)
---
source/_components/notify.aws_lambda.markdown | 2 +-
source/_cookbook/configuration_yaml_from_bassclarinetl2 | 4 ++--
.../_cookbook/configuration_yaml_from_bassclarinetl2.markdown | 4 ++--
source/_topics/splitting_configuration.markdown | 4 ++--
source/developers/rest_api.markdown | 2 +-
source/getting-started/basic.markdown | 4 ++--
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/source/_components/notify.aws_lambda.markdown b/source/_components/notify.aws_lambda.markdown
index 1eee6770b08..64c9c229926 100644
--- a/source/_components/notify.aws_lambda.markdown
+++ b/source/_components/notify.aws_lambda.markdown
@@ -66,7 +66,7 @@ The context will look like this:
"latitude": 44.1234,
"location_name": "Home",
"longitude": 5.5678,
- "temperature_unit": "°C",
+ "unit_system": "metric",
"time_zone": "Europe/Zurich",
"version": "0.20.0.dev0"
},
diff --git a/source/_cookbook/configuration_yaml_from_bassclarinetl2 b/source/_cookbook/configuration_yaml_from_bassclarinetl2
index 91af768b15e..f745782619a 100644
--- a/source/_cookbook/configuration_yaml_from_bassclarinetl2
+++ b/source/_cookbook/configuration_yaml_from_bassclarinetl2
@@ -4,8 +4,8 @@ homeassistant:
# Location required to calculate the time the sun rises and sets
latitude: 37
longitude: -121
- # C for Celcius, F for Fahrenheit
- temperature_unit: F
+ # 'metric' for Metric, 'imperial' for Imperial
+ unit_system: imperial
# Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
time_zone: America/Los_Angeles
customize:
diff --git a/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown b/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown
index dd69f051804..2d0c634caa8 100644
--- a/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown
+++ b/source/_cookbook/configuration_yaml_from_bassclarinetl2.markdown
@@ -17,8 +17,8 @@ homeassistant:
# Location required to calculate the time the sun rises and sets
latitude: 37
longitude: -121
- # C for Celcius, F for Fahrenheit
- temperature_unit: F
+ # 'metric' for Metric, 'imperial' for Imperial
+ unit_system: imperial
# Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
time_zone: America/Los_Angeles
customize:
diff --git a/source/_topics/splitting_configuration.markdown b/source/_topics/splitting_configuration.markdown
index 40d3ccd5b93..4a2898eb92e 100644
--- a/source/_topics/splitting_configuration.markdown
+++ b/source/_topics/splitting_configuration.markdown
@@ -26,8 +26,8 @@ homeassistant:
# Location required to calculate the time the sun rises and sets
latitude: 37
longitude: -121
- # C for Celsius, F for Fahrenheit
- temperature_unit: F
+ # 'metric' for Metric, 'imperial' for Imperial
+ unit_system: imperial
# Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
time_zone: America/Los_Angeles
customize: !include customize.yaml
diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown
index f8fd4f5429b..e9dc9cc6d3b 100644
--- a/source/developers/rest_api.markdown
+++ b/source/developers/rest_api.markdown
@@ -89,7 +89,7 @@ Returns the current configuration as JSON.
"latitude": 44.1234,
"location_name": "Home",
"longitude": 5.5678,
- "temperature_unit": "\u00b0C",
+ "unit_system": "metric",
"time_zone": "Europe/Zurich",
"version": "0.8.0.dev0"
}
diff --git a/source/getting-started/basic.markdown b/source/getting-started/basic.markdown
index 0c1b80f1730..90df0ccd559 100644
--- a/source/getting-started/basic.markdown
+++ b/source/getting-started/basic.markdown
@@ -22,8 +22,8 @@ homeassistant:
# Impacts weather/sunrise data (altitude above sea level)
elevation: 430
- # C for Celsius, F for Fahrenheit
- temperature_unit: C
+ # 'metric' for Metric, 'imperial' for Imperial
+ unit_system: metric
# Pick yours from here:
# http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
From 79850a1e24bd2a6cf51dd6af5efd16281d09f267 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Mon, 8 Aug 2016 17:48:24 +0200
Subject: [PATCH 21/61] Add initial docs for panel_custom (#750)
---
source/_components/panel_custom.markdown | 40 ++++++++++++++++++++++++
1 file changed, 40 insertions(+)
create mode 100644 source/_components/panel_custom.markdown
diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown
new file mode 100644
index 00000000000..067d151d3f9
--- /dev/null
+++ b/source/_components/panel_custom.markdown
@@ -0,0 +1,40 @@
+---
+layout: page
+title: "Panel Custom"
+description: "Instructions how to add customied panels to the frontend of Home Assistant."
+date: 2015-08-08 11:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: home-assistant.png
+ha_category: Frontend
+ha_release: 0.26
+---
+
+
+The `panel_custom` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar if wished and can be highly customized.
+
+To enable customized panels in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+panel_custom:
+ - name: todomvc
+ sidebar_title: TodoMVC
+ sidebar_icon: mdi:work
+ url_path: my-todomvc
+ webcomponent_path: /home/hass/hello.html
+ config:
+ hello: world
+```
+
+Configuration variables:
+
+- **name** (*Optional*): Name of the panel.
+- **sidebar_title** (*Optional*): Friendly title for the panel in the sidebar. Omitting it means no sidebar entry (but still accessible through the URL).
+- **sidebar_icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
+- **url_path** (*Optional*): The URL your panel will be available on. If omitted will default to the panel name.
+- **webcomponent_path** (*Optional*): The path to your component. If omitted will default to /panels/.html
+- **config** (*Optional*): Configuration to be passed into your web component when being instantiated.
+
From 24d3f6adaa6518038cc3a60fd73109af45b579cd Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Mon, 8 Aug 2016 17:52:35 +0200
Subject: [PATCH 22/61] Add details about math, comparision, and logic (#749)
---
source/_topics/templating.markdown | 34 ++++++++++++++++++------------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown
index dbaeb0e2d5e..0918ded8050 100644
--- a/source/_topics/templating.markdown
+++ b/source/_topics/templating.markdown
@@ -21,19 +21,17 @@ This is an advanced feature of Home Assistant. You'll need a basic understanding
Templating is a powerful feature in Home Assistant that allows the user control over information that is going into and out of the system. It is used for:
- Formatting outgoing messages in, for example, the [notify] and [alexa] components.
- - Process incoming data from sources that provide raw data, like [MQTT], [Rest sensor] or the [command line sensor].
+ - Process incoming data from sources that provide raw data, like [MQTT], [REST sensor], or the [command line sensor].
[notify]: /components/notify/
[alexa]: /components/alexa/
[MQTT]: /components/mqtt/
-[Rest sensor]: /components/sensor.rest/
+[REST sensor]: /components/sensor.rest/
[command line sensor]: /components/sensor.command_line/
## {% linkable_title Building templates %}
-Templating in Home Assistant is powered by the Jinja2 templating engine. This means that we are using their syntax and make some custom Home Assistant variables available to templates during rendering. We will not go over the basics of the syntax, as Jinja2 does a lot better job at this in their [Jinja2 documentation].
-
-[Jinja2 documentation]: http://jinja.pocoo.org/docs/dev/templates/
+Templating in Home Assistant is powered by the [Jinja2](http://jinja.pocoo.org/) templating engine. This means that we are using their syntax and make some custom Home Assistant variables available to templates during rendering. We will not go over the basics of the syntax, as Jinja2 does a lot better job at this in their [Jinja2 documentation](http://jinja.pocoo.org/docs/dev/templates/).
The frontend has a template editor developer tool to help develop and debug templates.
@@ -55,6 +53,13 @@ script:
{% endif %}{% endraw %}
```
+[Jinja2](http://jinja.pocoo.org/) supports a width variety of operations:
+
+- [Mathematical operation](http://jinja.pocoo.org/docs/dev/templates/#math)
+- [Comparisons](http://jinja.pocoo.org/docs/dev/templates/#comparisons)
+- [Logic](http://jinja.pocoo.org/docs/dev/templates/#logic)
+
+
## {% linkable_title Home Assistant template extensions %}
Home Assistant adds extensions to allow templates to access all of the current states:
@@ -72,7 +77,6 @@ Home Assistant adds extensions to allow templates to access all of the current s
- `closest()` will find the closest entity.
- `relative_time(timestamp)` will format the date time as relative time vs now (ie 7 seconds)
- `float` will format the output as float.
-- Filter `multiply(x)` will convert the input to a number and multiply it with `x`.
- Filter `round(x)` will convert the input to a number and round it to `x` decimals.
- Filter `timestamp_local` will convert an UNIX timestamp to local time/data.
- Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data.
@@ -117,7 +121,9 @@ Print out a list of all the sensor states.
Paulus is at {{ states('device_tracker.paulus')) }}.
{% endif %}
-{{ states.sensor.temperature | multiply(10) | round(2) }}
+{{ states.sensor.temperature | float + 1 }}
+
+{{ states.sensor.temperature | float * 10 | round(2) }}
{% if states('sensor.temperature') | float > 20 %}
It is warm!
@@ -179,10 +185,10 @@ The other part of templating is processing incoming data. It will allow you to m
It depends per component or platform but it is common to be able to define a template using the `value_template` configuration key. When a new value arrives, your template will be rendered while having access to the following values on top of the usual Home Assistant extensions:
-| Variable | Description |
-| ------------ | ----------- |
-| `value` | The incoming value.
-| `value_json` | The incoming value parsed as JSON.
+| Variable | Description |
+| ------------ | -------------------------------------- |
+| `value` | The incoming value. |
+| `value_json` | The incoming value parsed as JSON. |
```jinja2
# Incoming value:
@@ -194,9 +200,9 @@ It depends per component or platform but it is common to be able to define a tem
# Format output
{% raw %}{{ "%+.1f" | value_json }}{% endraw %}
-# Calculations
-{% raw %}{{ value_json | multiply(1024) }}{% endraw %}
-{% raw %}{{ value_json.used | multiply(0.0001) | round(0) }}{% endraw %}
+# Math
+{% raw %}{{ value_json | float * 1024 }}{% endraw %}
+{% raw %}{{ float(value_json) * (2**10) }}{% endraw %}
# Timestamps
{% raw %}{{ value_json.tst | timestamp_local }}{% endraw %}
From 9ba7da10a154af23840792fe8a64e23f85296ae3 Mon Sep 17 00:00:00 2001
From: Teagan Glenn
Date: Mon, 8 Aug 2016 09:53:21 -0600
Subject: [PATCH 23/61] Proximity List and Configurable Unit of Measure (#698)
* Proximity List and Configurable Unit of Measure
List of proximity component and valid unit of measurement configuration
* Add type to code segment
* Add default value to markdown
---
source/_components/proximity.markdown | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/source/_components/proximity.markdown b/source/_components/proximity.markdown
index ed45ad2aa00..f58c5b46bea 100644
--- a/source/_components/proximity.markdown
+++ b/source/_components/proximity.markdown
@@ -47,6 +47,7 @@ proximity:
- device_tracker.eleanorsiphone
- device_tracker.tsiphone
tolerance: 50
+ unit_of_measurement: mi
```
Configuration variables:
@@ -55,4 +56,19 @@ Configuration variables:
- **ignored_zones** array (*Optional*): Where proximity is not calculated for a device (either the device being monitored or ones being compared (e.g. work or school).
- **devices** array (*Optional*): A list of devices to compare location against to check closeness to the configured zone.
- **tolerance** (*Optional*): The tolerance used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes.
+- **unit_of_measurement** (*Optional*): The unit of measurement for distance. Valid values are (km, m, mi, ft) [kilometers, meters, miles and feet respectfully]. The default value is kilometers.
+To add multiple proximity components, simply use a list in your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+proximity:
+ - zone: home
+ devices:
+ - device_tracker.tsiphone
+ tolerance: 50
+ - zone: work
+ devices:
+ - device_tracker.elanorsiphone
+ tolerance: 10
+```
From cb6bce4520c3d30ad0224d42db473061541c87fa Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Mon, 8 Aug 2016 18:36:53 +0200
Subject: [PATCH 24/61] Update for new panel_custom component (#751)
---
.../custom_panel_using_react.markdown | 12 +++++--
.../frontend_creating_custom_panels.markdown | 33 +++++--------------
2 files changed, 17 insertions(+), 28 deletions(-)
diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown
index 687e6a00933..552eff7c219 100644
--- a/source/_cookbook/custom_panel_using_react.markdown
+++ b/source/_cookbook/custom_panel_using_react.markdown
@@ -20,11 +20,17 @@ This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC]
All you need is available as a [custom component](https://github.com/home-assistant/home-assistant/tree/dev/config/custom_components/react_panel).
-Create a entry for the panel in your `configuration.yaml` file to enable it. Set a title if you like.
+Create a entry for the panel in your `configuration.yaml` file to enable it.
```yaml
-react_panel:
- title: 'React'
+panel_custom:
+ - name: todomvc
+ sidebar_title: TodoMVC
+ sidebar_icon: mdi:work
+ url_path: my-todomvc
+ webcomponent_path: /panels/.html
+ config:
+ hello: world
```
This video shows the example in action.
diff --git a/source/developers/frontend_creating_custom_panels.markdown b/source/developers/frontend_creating_custom_panels.markdown
index 34fc4c0bd97..0c1e82da327 100644
--- a/source/developers/frontend_creating_custom_panels.markdown
+++ b/source/developers/frontend_creating_custom_panels.markdown
@@ -11,30 +11,9 @@ footer: true
Any component has the possibility to add a panel to the frontend. Panels will be rendered full screen and have real-time access to the Home Assistant object via JavaScript. Examples of this in the app are map, logbook and history.
-Adding a custom panel to your component is easy. For this example we're assuming your component is in `hello_panel.py`. Start by converting your panel to a folder. Create a folder called `hello_panel` and move `hello_panel.py` to `hello_panel/__init__.py`. In that same folder, create a file `panel.html`.
+Create a file called `hello.html` in your /panels/.
-Your component should register the panel. The minimum required code for your component is:
-
-```python
-"""A minimal custom panel example."""
-import os
-
-from homeassistant.components.frontend import register_panel
-
-DOMAIN = 'hello_panel'
-DEPENDENCIES = ['frontend']
-
-PANEL_PATH = os.path.join(os.path.dirname(__file__), 'panel.html')
-
-
-def setup(hass, config):
- """Initialize a minimal custom panel."""
- register_panel(hass, 'hello', PANEL_PATH, title='Hello World',
- icon='mdi:appnet', config=config.get(DOMAIN, {}))
- return True
-```
-
-The `panel.html` contains the needed building blocks to create the elements inside the view.
+The `hello.html` contains the needed building blocks to create the elements inside the view.
```javascript
@@ -87,8 +66,12 @@ Polymer({
Create an entry for the new panel in your `configuration.yaml` file:
```yaml
-hello_panel:
- who: 'You'
+panel_custom:
+ - name: hello_world
+ sidebar_title: Hello World
+ sidebar_icon: mdi:hand-pointing-right
+ url_path: hello_world
+ webcomponent_path: /panels/hello.html
```
For more examples, see the [Custom panel Examples](/cookbook#custom-panel-examples) on our examples page.
From 0a2b0e23271cfd093a69cac63ca5c813fd3e6eee Mon Sep 17 00:00:00 2001
From: Robbie Trencheny
Date: Mon, 8 Aug 2016 17:55:37 -0700
Subject: [PATCH 25/61] Add OhmConnect docs (#754)
---
source/_components/sensor.ohmconnect.markdown | 34 ++++++++++++++++++
source/images/supported_brands/ohmconnect.png | Bin 0 -> 3160 bytes
2 files changed, 34 insertions(+)
create mode 100644 source/_components/sensor.ohmconnect.markdown
create mode 100644 source/images/supported_brands/ohmconnect.png
diff --git a/source/_components/sensor.ohmconnect.markdown b/source/_components/sensor.ohmconnect.markdown
new file mode 100644
index 00000000000..258b9b22aac
--- /dev/null
+++ b/source/_components/sensor.ohmconnect.markdown
@@ -0,0 +1,34 @@
+---
+layout: page
+title: "OhmConnect"
+description: "Documentation about the OhmConnect sensor."
+date: 2016-08-08 17:05
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: "ohmconnect.png"
+ha_category: Sensor
+ha_iot_class: "Cloud Polling"
+ha_release: 0.26
+---
+
+
+The `ohmconnect` sensor will show you the current [OhmConnect](https://ohmconnect.com) status for the given OhmConnect ID.
+
+> OhmConnect monitors real-time conditions on the electricity grid. When dirty and unsustainable power plants turn on, our users receive a notification to save energy. By saving energy at that time, California does not have to turn on additional power plants and California's energy authorities pay you for that.
+
+
+You can find your OhmConnect ID under "Open Source Projects" on the [settings page](https://login.ohmconnect.com/settings). It's the string after the last `/` in the URL, i.e. for the URL `https://login.ohmconnect.com/verify-ohm-hour/AbCd1e` your ID is `AbCd1e`.
+
+```yaml
+# Example configuration.yaml entry
+sensor:
+ platform: ohmconnect
+ id: AbCd1e
+```
+
+Configuration variables:
+
+- **id** (*Required*): Your OhmConnect ID which can be found on the settings page.
+- **name** (*Optional*): A name to display on the sensor. The default is "OhmConnect Status".
diff --git a/source/images/supported_brands/ohmconnect.png b/source/images/supported_brands/ohmconnect.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3aaf1b38bd1d69dae654d97a630887f800e183c
GIT binary patch
literal 3160
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
yvM9
Date: Mon, 8 Aug 2016 18:44:50 -0700
Subject: [PATCH 26/61] Add docs for the Foursquare component (#755)
---
source/_components/foursquare.markdown | 61 ++++++++++++++++++
source/images/supported_brands/foursquare.png | Bin 0 -> 45770 bytes
2 files changed, 61 insertions(+)
create mode 100644 source/_components/foursquare.markdown
create mode 100644 source/images/supported_brands/foursquare.png
diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown
new file mode 100644
index 00000000000..62937a43e61
--- /dev/null
+++ b/source/_components/foursquare.markdown
@@ -0,0 +1,61 @@
+---
+layout: page
+title: Foursquare
+description: "Instructions how to the Foursquare API into Home Assistant."
+date: 2016-08-08 17:20
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: foursquare.png
+ha_category: Other
+ha_release: 0.26
+ha_iot_class: "Cloud Polling and Cloud Push"
+---
+
+The `foursquare` component accepts pushes from the Foursquare [Real-Time API](https://developer.foursquare.com/overview/realtime) and a service to check users in on Swarm.
+
+```yaml
+# Example configuration.yaml entry
+foursquare:
+ access_token: ""
+ push_secret: ""
+```
+
+Configuration variables:
+
+- **access_token** (*Required*): A Foursquare API access token.
+- **push_secret** (*Required*): The push secret that Foursquare provides to you in the app dashboard.
+
+#### {% linkable_title Real-Time API %}
+
+The component accepts pushes from Foursquare at `/api/foursquare`. The route does not require authentication.
+
+Foursquare checkin events can be used out of the box to trigger automation actions, e.g.:
+
+```yaml
+automation:
+ - alias: Trigger action when you check into a venue.
+ trigger:
+ platform: event
+ event_type: foursquare.push
+ action:
+ service: script.turn_on
+ entity_id: script.my_action
+```
+
+#### {% linkable_title Check ins %}
+
+To check a user in, use the `foursquare/checkin` service.
+
+Parameters:
+
+- **venueId** (*Required*): The Foursquare venue where the user is checking in.
+- **eventId** (*Optional*): The event the user is checking in to.
+- **shout** (*Optional*): A message about your check-in. The maximum length of this field is 140 characters.
+- **mentions** (*Optional*): Mentions in your check-in. This parameter is a semicolon-delimited list of mentions. A single mention is of the form "start,end,userid", where start is the index of the first character in the shout representing the mention, end is the index of the first character in the shout after the mention, and userid is the userid of the user being mentioned. If userid is prefixed with "fbu-", this indicates a Facebook userid that is being mention. Character indices in shouts are 0-based.
+- **broadcast** (*Optional*): "Who to broadcast this check-in to. Accepts a comma-delimited list of values: private (off the grid) or public (share with friends), facebook share on facebook, twitter share on twitter, followers share with followers (celebrity mode users only), If no valid value is found, the default is public."
+- **ll** (*Optional*): Latitude and longitude of the user's location. Only specify this field if you have a GPS or other device reported location for the user at the time of check-in.
+- **llAcc** (*Optional*): Accuracy of the user's latitude and longitude, in meters.
+- **alt** (*Optional*): Altitude of the user's location, in meters.
+- **altAcc** (*Optional*): Vertical accuracy of the user's location, in meters.
diff --git a/source/images/supported_brands/foursquare.png b/source/images/supported_brands/foursquare.png
new file mode 100644
index 0000000000000000000000000000000000000000..492431843b5511556dd5071ebd03543a64ea8765
GIT binary patch
literal 45770
zcmeEug;$i_7w!xojdTh!(p}Oy(j`cTbO_QVA>feG-Hn7G4bt66cY}0Dmvr3W6ZCig
zguB*tjS4UCiCxcr_C7}g-pEOyArm13001;8Nl`@r0LB9V0D2(8L!Ssxjy6L70@^D|
z2m^`+h<`!9L9&t5um=E8u-)#dWT5|EaWEGkQ-A#iBw}r64B}v7XJR1}
zLZS1-hSC-@y8Vg8&)X{X&0#{n@9(`*;6Vva){=
z3o0P<{ZE)#nOK}aaZBvCQj
zr}zHV8v@r*#Y-3Qj=?caA>1aCkS4M70hJyc4nczJZu+)4N{}VsRVJ(Gc@t@&K@;ak
zcGY!#iS0Bo@tYBjt&LPiNN%OuW}N1)6Fe=R@?n*=an_lkb0;Z>Yk3$7@PD5-%$^$E
zMg+DML<}__t8t`Z>eL!GSa0$U>`;f8yShdXt`r)#`Fajn_`81TS|%4YOeAsWEX=|U
zos_dTov84cazzAYg2hS+RYHFP5BF7Z^NY{9bPo%OP+qdH%B6aYHEz%&g#-TkH18nw
z(E#M0+nlAj4@cchxp0ZrbK%XkDmVhVJV=B$z2p6gchj;`LwCLpA{HmR!Wo%)d?sV2
za%bM{^yS33OXu(OA$v+s$M)_SQ%z^_iFLS?f4P(jlhQNpvqV%G+5ZFz$Mk&v1kAAi
zvD>3=7|jWChLt()>fW?3iL0ujXP^P!S#8OpIBWVfgg*0{E%7-uiw2FTg0bR~a2=}g
z_e?Jvi#o?-rz9*e`U-=tMUs60vSO`s_R7;R+OsiS81xMJ
zK_z1%izUKZmeW;s>y#V9heuCP>wQ7UFsM~it0r7l<5BR%l%Bze1XBT~Rf}ie(s@6=
z*6)ph&|wB~VxVb6`=LG<5e)MkfbN
zPS=#rlTq27wym$iti=s-U<>i`!+9?ywESXvD-9<@%ULa+HN9moV5Yq`ewAQrBnLiyf=4|0t#eq!_l=M)p76zgx&Vh^
zmB^SlqT?p>C4D(Nxe~YZ2*Ss_HJXk~YIgNa24`*;
zxA!{gKi?|%@gQOGTUymn%-^GpUR*bpGC266chCZcNs$FiY?jD&c^y1~AL#Bd)24cv
zl5Dsh@}I;WaJ-%#hSHQ94z@+Er!y-{ax3%tEL0a62a`w@ZTzw_fL#>?szA4<10OKH
zu0FFI^~=$pKS-ti=u0mY+h#13MAZ;WbiJW*Qq2QiEcVkkv4j=0OxHkWLBN``{;?nD
zVB1R0u!B5iywZaYnX&@uHxpv^T{Y9&_E!*#E=mJ-W1I0dyt^a7B5fhiil
zxm$hse`?WVg5umjtz8XEcBr&WI{5
zFc9k+9@}hRbgQBFpME@R5xGk)-BSbC+PU`b@`H$(_XuF@;F66x307uhV|F0758ejE
ziudyH{_s7A3MPH2^MV$1xIIAiX0{5zCH`yJH*WZetce<-y~KZ@F!T=QDPHgMFndTu
z$PCNOIx(vYmT5Qu&yy$MeK?8rpBdxd!leV*Z&*3yU%Y`ye*0lTBs*plYytbz1VyDb
z*|NsZEKcmj9~4Lhuv1kSf8QZD38olgg9*4h65wn&ac+yv?)P~Nrd~vw?t)&r;AsH{
zpeeu>&tHN3bW&R;7s$^*^-1ahf02O2^PtFizcM6+*%bfX0rb%{0Z-8$ER?xQQc}cU
z=v^)EZ<3}rQq>|KAass$=pArK)MjD(d?p5eyW43`RV*%+n8^nQI{?6Jg7j6jx{y9d
z7PJWHRIx=w!LV<-sdkn)s<>%}`~?dHY||(}Jk6C`@gRpndLGp$M51KfS78)M=VB@C
z!0W}tt@J^%-RT{I-8O^;)+b#;L>24s3ZO_(*2RQxR-q|L`-5?9E=KHsBINs%LeMcxBLM2;Vl~C$8PvLdj#J2v
zB*&-=wo4SepDVf4IMOQs@V)y;@}+e9Qbi0n533rG%|C
z4B#?4TKVF_^Dc;aV4k)hd(=?0OFn2m9RcYLV5dde@@>RtW*N7;_x4^pCq8ma%ol@9
zzsc+nsKa~?;GzgTP)7k-mLCRv{tT-P1UzXj$}1Y^FJSm>CTXy~VMy}Sb7AM(&$ujM*zh^imj-_TF_jDqEXm3Hp5jZZpGCQ4jTn^)
zK*S}70~;>8hSsd?OJD<|;X%6=K-r}KjFRq(2;F9C?bc@UQ}ktaPB;<-<^yd~c#zFS
zNZ5rjFAoqdzq$KXC>0P%YS#IOJq_8z(Ev`hVk&dM-q_t=;X&Lfmdkar3*CFda1vs`
z+a%YWoQ|#>-C6nTKgbGYkt}FHWRKD2CHW5+%{2pd6`9G{tEQFpXyC=$X{6;6vkV$m
z0PTJjKwaX)q2eErYF>N5EY20($x1WJGz^^*em`Q~5P{)WKm{LYr&{(_hmya)&TwwO
zzLP=x}m)F3reyCetMH`0!WQ`p;I=p+@I_FaXv&OQil9
zm+n$~SZR|G1_$8!m2OroeAG|ol%JDPqM1_S``XtV?CFu=(5K4mMBLv{;*Z3)9ZKBc
z;@KWna=?cwab882B<^kQ&w>&YosWlPI~}f#QVbsU7HTuqn#ADzwBNgDq>>)1G}ey9
zw(tBOA}^6Td<8u3woV{|kC990L36CNdTMI`h+H`p0%G+dfrj9$CWrVF6}vspyD0Tu
zwEf}zP|8RF2HM1?J5S@lb)tcjquh!;f@F)}L7e!f{!3$ktk_$e>6OX9Ny85-9pFrZ
z{YeSka|{6cu?c%AiO{K4m@6k-d?&Glj!uZkW3@eD_)nfX5rj(9pxadw`zEfp8wn(y
z5}gc)OoKHINr9AHkE_4?iQi$n4D%TtR5QU$PW@j}-F$toxbHe|73oZu3VwI|m^Q~>
znYUj_4)eg?&47i)@F5-Kv;0{cDLewmqKxSm{gZS)-iK9c-T)px6u2wX8r6jchd(Ne
zA;V&*U8A-FvXleg14foF-`V|SQ+H^d~|9vmZu3LZJJXC!|x3dr+0C3G1Hdd@QgG-`Oz(2o?5
zm&U-WO5)mA>IzI+%~R!O@H9NseVdQih<}fb9h&_$vJ(K&7W9RYstb%;8yLx3c#!(L
zSjC%xq{*gHykg}Z?X5mS^2|TB2YFUP!*h!BWIox3%vB}St&epo?I=6+&gH#DzFf3GzGF2!y?MHT$-IE>`^x(}}^w3doKO
z1L~7)q;BsU5>NW%G-6ovxXGLQaZOKanGn3Oc|K($zC(1mS{bDi$I{G!2k{-_a8gTm
zIXx;Y^Il=59qTF#(`Pw;GG8=4{Mvt?sl)u45YfeKwY?_&EgC%wF!Vjts2yw%M&%J}
zPEyLY)Ycah8OL@Vd*iP>t2$!#%e&~Oqov;GpQEHZ0h3on8*mB)UkZ4TJ;YsRR6GM9
z-|H5xf2h7d18Yu3CSd(ZYVy#yn=-11Rqn2_c*A3M_%zdooiK|M^ZKLkIX3%ymxCgs
zF;3jDBDaN6FM*{E_emjE|2&LaP|6w+J2AL!3P1pX9I6!&MPyMOMVq$gs{RHzVXo-vqhfW5~#DZaZx(O@UdV6_evHgH~m9vTCQSB`=H)O7|DhwOTYht
z4+a!`5F>vzg}*cvJD+u07n48H-e8lYu|8>NyinD`k{SQ0agzc7BC)VVAh(uE!j<8@
zzol@8ZNa`m&5sziG60OU%}gLIx;
zy@8vStjy8C9BQ1v{2-y5hzHL+V`hqqow@IH^VD-v3jUrsSHNo>inUd*9Q1CKA
zDz4mlminQ4TYLADoE3@}Ye9Icg|Ds
z1}^jNjsG|B%XHh;AH<)MBowp7SOBF`>(=IfI1uZvtZum
zlY$D!31}tjMZ-M=YJ9x@nWgG}&}6n2;t2cBp7q%3ky`*?Kp}F#5&T;>rJ1N!D+qwd
zn11Q9uzz~Z7T~q|Ot?GgAxIWkpxb#4kKAO&2P~*{<<=Usn4B#_3#MDT){j6Se0a+P
zt_%bQvY-S8le@yO06dW-%>cr$Kb(3HlK%$@&018@%*{0U2_aTM<+z5bAn%7%m`5g1
z5@7=8yXc>Kw;#IDgodk@UjepyN?flZv)10`Q2SNTxH7CHY&b9Nk=?`Q<5QuA|8+sp
z)H!hzu
zqK8`&qg?b1FT2H|$EWr%ZP1SEji4O{P?$FdKUN1&BTT}NWJ?$(yJk)W*V+*firm71
z47^VSIKSvai355v?E}H%fO=ETH`}Q%nwGkEjB2+qaqg3^2fk*DEWeNExQIG9UCzz0
z+0h{bKuLg9R{ftm-~sm(nxzijP$9S-hqPc#kYj57rhT%}j;IBLhg<`fDcVc)>^n7T
z%Kj{cDIgN%y}0y$T4JfXCwE_N5&UE#w3hST(@+S#~hyI71va&BJc&FH!);Rz^5oe~)Fd9I7WY
zRne9lJ|uU~t8RcH+jK@(#=qYKKr}(JvmmmyGsmhKgL#(Rf+9k8!xMH5i
z%7Vgh08ii^iJ6fsl$gPSX4v&U4*(>(V)A(*xh#8rG?jqC$bs;QG
z`4&0;49r$XNUT;x@tnHeprb~vLisK_s`>TH>n<+PyFXp8^k?@etYpH7N8O48*=rHx
zlluy{*QsLvS#Tvul@yN=`U>ZDgQdlI$K4W*J9)6ydX+k&4-oOGb`g(9B|NBG!EM*0
zmHiRUOWJkbC8U(tz0|(@VjMvjY}@Rwb8DcJ!$477inP8v{vi+|Fg6S$I0
zJ>%}Aj(@9Wx+*NexlXCsOf2(l2>_*pN8TN}HD;n%89>R81H^@RyOhQ6EiO
z6;wxRk@ds}1mjJC2A^EBvEQ0@Ac
zOL(wy(N1}&T5{_m0OgQD{9Y}|Pc^$;Q6F^92^~~$KoRH9d*2@(YTfR3!ng7NsUsY4
zfkd7TDj(L;G#J`6?X{{Qf(jiMOn1W7?4gbh7%Pb3KT3(3dwcn40qeT`vVS-Tv=^NY
zZxhPp(cKYu<8(BQ8jELIm=;(4j@6|SbH(5Szx%e}{72iF%uF0Dkq06I`~&{~hytg2
zyQW^en{&aS$%Y5r7!G=|ocj!=!o)!fNDZA%wwJB*rv$tzt*Xt}Zco=egKZxb!gbF~
zLn>m`QvH-*F*4f$?VcDk=FK(I9yUCTSh~xAkF5a8Vyp*Bd=HyYzx(mdhQ?DpCERQs
zl(dFD;;)UZnvF>Xv$#xBlN~2dOYnGDFjWV%t))!}
zsV1Q`$@N4f)hBQ;bw1KT?fWWEO-=W6LNTF7aNb5U*TTwM1HkgfWdxf#)$A!$v>J@N
zYPe+m7&f}c%z0mUe*4h}#T$4Klt$p#@=Ktgf^BY-hHcBP>+T`jzOcWv{?Fbl$)Oy<
za+8l?X$Fb76k5%?61`2G;SQKZ(FZJd@(RE(HDOEe2D5(`dFTvV-j{c~Dno>XLu=!w
zQ|LQzee(cO)sF()9-nXbG3C$hnz3kNj&Qj7VA88sFvmC1Ae_kO@I6DKkhlhPJ*LuFb6CKwcxi!+;B+L84}0_mWJuBPXKSC
zD1{yHt5LO$_`#uBp|;f4a!D|5aDHP}udAE@jN|_E$lBC3D%j{7J_HJ6FCwMn0EAzGl75w_
z@BZ-jbU$da*jegH`DR*nCyxr=5d<5`Vf7OWr&_i;ceC0zF(_X`5?8~hJ^Ga8uOCTI
z8CCd(UfKs8Lfv(^NU>>m6Rk^Uf3LxSC~ROj
zC|{C?HsF?O`a-PzRA(=lFSlIOVV?Vg(lnCh=A^^cjL!*uP&V6vCwc+U4o7Dq=0nH4
zdF)=t{a?=@)0Cf^qyvEd+jwh*1;C9AAkHurJXKL3%v$HK+onWVGpYY6j*OwBDp5Zm
zP(`OUdy3l#|E%#|5Lz*lK(J-UtL`Rj&Z}1#@HYJ0J%=8ULDdKUQ>y!yA}yzgNEvDn
zHu#7WFpL4%4cwQ%>b(4vVDm$4dP>Sa0skQyHzlETgRe~UXfT>K#$sOWxxnc!$=&lI
zsEd5RPKu>cEdg+L&OvLKHzR)M60qUd`H2sdGrai)bbHUejI7*BzZdKv5f`oKY`TgG
z$vp)QXi)kc3nj0@VZ`vJr#>s!kbYc^0fzr`{`W2NvpE74J4YskpOGZlW+huAqalHJ
zWT^DZ0N%lF57Wzfnmig}U?jH()Y^L=`X4foq#hk~vpHlh+s?vG(;4aCbCiqZk0m-@
z$98nBY#g0;g}Nv)b!o;JREVfZ4AyR7u@rW#}ZhZx%p%w(8IJi>fcLViAr;
zSheCYA0f#QD#?V#64^Og8zg1N&>LWi#ZwIH+d$h>aYqTcp_mN%`6Z-=0`oQ_*;i(OZs24IsB(+55^kQ5OFfkT%8ba`B8ZHfaK4FkjKiS{=RDQDj}RPWpt-E
zsXudembxh0cjjfsJRP8X8l6)eqDv|aj?N18^6YckkuOOXT*dnIm?0>J6rsvN_nv*O
zq^d)5^Aw(R=D2Co_0|j2`L$_cFNIHbpmsZ7wBKYAfI;;#;dpfXp$wVB{wVnk8RvHxIK95dKvAogoTfur9YS
zsf}xTfDi!Es>J;i79HK+-BdIxPTNw|oLw+f&0KGv)<%+=P^E_?17N;fcHMCGyRy`z
z)=`QpD
zEY9g6rvQ-HUwOcQ7Bw=_O>dtQx}9NquEe@e(tpKkS{=1nVN<^ymm~0V)mm{=${-|e
zlr6~pSH#cA>J6Z9M}-Kk<6a4(Wrmr+D-f7zUUSZ}8}d-1-`?#FB?%pcuO*u*CxyhF
z{nZY;6m*!!ia04fb0dsI{dlmT>EWzVTV#Kfx^Ub|M3dRV$X!~;-_zV7B)Ii*0Jqgi
z>DDqA4*wk%@gdc-JJXY4hu-Kl-7Yk*9vva+Ct#*K&et)R5BG4us&MNC0QHxbxvB2m
zDCs%1f}vgWqr;n-zb3NDCmH?G`XRsG7G3+!8+NZPeEr4-^8hbD0-KX@0OsPP>)H6s
zY^9i)VU09A>y~myKk`^#2X-mg`ins3&3B#n9N*-o!ueT0RzmY|>vK9)-QuJwYVM7T
zzXix`PYX7PgZPQk6sYKkdgjt8h4ruXqK`wI|AN`(Zg(C>}5f9;r_tWO68+(Y|CW
z^23wjyPcCPbYut`XS%o5%QwGy>@3PuhY@zHMe;Xvp79|f3q5kv9O!im@9*(<9CMgw}5?%C_RgZKnKJ0W5vIOS*#xJ>XC_E
z&IzM`chqUyo4B5_KL2;9239;aj9&ky;UJ+o
zX^?=&GxsifQ7XLtv1A%ZEZV!kYT*Uj1`zV;FYb?pw>>K4-8D_8G!3*?OaIPTcFBg0
zVTOz{!!mLN-yQ_Xqc3A@3B86urps%aks(v(2>n~VC|tS?4V7c5uTO$~AM**ciWgu8
zOQja&pdWR9BWbty}G*n`k}2N`?OC{U-a*m6R9rQfdfF9#dW=N)JRsU*pQam?*%C!HOAXG6o
zHO{Cx^s_F@f^>4pyrTqX%uj&bQUe_^aYaZ6OVl|RfkO-zj>I9y^K&q<0~KB@H?YR7
zVR&4{b+3?>R~YyI1q*KySRUD9Vlz`287)}QOEOqci$Q5w`|9+jgXn2Q#HX&e#MFd7
zQ+`}U7EwNZerwv%n0)a-!o5SK6*mmw=;SU)R6+h+6n
zWp-PNcvlsE`R&)A4r_zv7josFc$KsFMl2?d1|N_6;`8A?$^pv7NhhX{J6J9^&8vnH
z+*WWGpJyLwOYrUcDMd@DSP+|z8%b4=dmm;7TF>1`i@A<%)-MFcTHA>ic3L0UsiDP@
zU5ghk7;(Ej-pkV#PS1e@=SR@RwQgycFQ68_tqT!UTq^!prOWPpNv{^{AeF>Tk+eK2
zzpI%seqfA==NCexigW$+OFQ#plgJhEBp4dy!nutWyKJnN{xfDL`XxKtuKHT;&FFLX
zC+i<s}Kj&pn&Qk8T~GkKVKwGgU-aCiAH?al8TbA5>JaQrGa!qGCZoi7jQQZ1
zz@7Fh7CgfhO+Fu?Z=Q(MhTN~TZmwEm>4mJ^F-N2;4`aLe{_fU}e5e9O?{!@zWNpS+
zJjomic9uuw#CpG=E$W^)YG2)k
z$K?W?m|v+kEI4JVZ5`pN&?m=APtas92_K0+Krxgn|A+wdvA^rbH7OhRQzN!WJIFB*
zvOO!)tr@02foR|4&!o1mBmb!TE1D!o7e<>BFacMvl_$g0T((`8r=P7YPRiP>;aECc
z%y>OHK5OoZbzI2QDfduLLRH$2y-5Ttq0&d&QF)NQ2{xk+O;L1>0e8RVn_^*R}(N$!w>O?r#H5INk6`bE3X4
z$K{Y5pZujiazI_2J007`CS&%(7@QI(*+1iKio=l50^~R^S#~)t{VPVSd{lIDFLjja
z*LwCR;YO_rEY=@8>dsxqFZLWYd0l0Y6Z
zA`oj63nnE82;F^k^}IMKbO+p8YExxo9)+#YxA9ne~4C
z{$|Phi~Ohpc8Ph)o4-LA@;kHXb!?W5ey_RjV>=Fd9S$4{H&YBuX1P3fO+K*|C%dkg
zia$NhC=DH%Akxk*zlAd^&reOeeFR>22?kMu{JbL|;FMZS*&TiQi<50|>mm%;Y
z^{R{eU2)^jxIAd|R}YfuYj88)5p19*zRw#ur|bt@Nlo(BJ7J)?joV-EU{-NAt=iQy
z^F4ZE*C6=ZRY=fW%!!%N+DG-pn?+q`-qmH^PkdyZ!*8#Mm+j4c
zh4eljsNpQ_b3%G?t))xi*ykI{D}ihre|J5BZCVP5FW6gl(^k^{V9OUGh~>nrzee4-
z=UTDqx2L1Ia2`+g*RNd>%hdtwj@>o2M;XVnrYHLI4L%A7{>3YC+x^*o=AAUV-(bG}
zIWqb0@<<`&5HIk}Y}RvDlVSm#_w!7d=-YdgUNyxd1K~d%#>31yX$m_A#{Nec?r@qE
z03tOpm1xB@OwslH#ual!{pF)R
zW)zQz{c0Ty6;e*y6J+<^n7Utk*(ow6%@mF=VUSM=&kAOP-$(GVq&4%s;yETZ?`F3FC581zwUhWSLnrkl4WtU?6Ru@-#
zhR>yaLHM$KcpTa{+*yiU_X_wM+Tmb7tW6H!5Hw1>hPP3mBp+kG!ND}&u=4MUGt%iM
zu^zU42tGpFdu#6yA@~%^(5)911_k`BQ5+~dbua;KUfZrVXJwefVG7ttWGOB3k@fI#h^GsMBi@);lKYUCMZ})
zJgu++A`6V?uheUD^jcrg#?!_S7uqZ{KOR`!=d0!dM2Dzn1l6w4QXub^YGfz>=!+n?l|m@V4=5*>;m0#7CkK*wwl
zbUqx;%Z5^$Q5C0=<*L%2b?tv|f#7(x0X_#gh6L`-^D+(!wxhLdzCxT@|3owm1?Ql6
zVEPDg`P1FOI5De@&db=x^#2cc03$k-0phD&k?8Lcuf}B|3nWL@RY*@Ko37xT%T0C1}waVCcGx4^WMg?hqLtmvI64$OPOA34qoY(
ztWb}Fn4k%MmU)r?c*E}ACLmXs+S)BFp7)t4ujU%g_0=!Xq3J?RN<5eWMudE7K$g|=
zpFTHLU^0LfIUg+h=X;$Rd}Ah2jG*ax{A;J(Uq^O824Vub(k;Cw3di;5=6k&x_Zz&R
zz}%nq>+d^#Dlkvsn&yibs_D#qXX&0oqdVQ8{A0}RAi5CPiMddC(BZGUtn&gT%x^p<
zG7v5LQ~7rGv5hmmeGUiepLW&H|4zxaKIVWnB0jz~y7(Icnxf4uGy7pNE7Ep_Qz(eO
zx==s!Z*{`0()w*YeBEF(Tk$HWr}uwSn%)4m2ibsy^$TA_ye2se)w|M?wVp7jtDtnh
zr2QwnB+}+$K?QvYo@-q}Z%^6)ddNN5>uS`3X5^Yk)cJ;0ge2C#P!is(3`cBT;EX@<
z$>}nbx>Z-FxA}$K#esK;otnP>ojK)8hch;nm;={;3;c-lFbrWXzYO*Q_=nd(FI(us
zEsdbGZ85hs3#i4(s6hYW(Uv0Zaru#0$JAeGCDXYOr!p6jJsa_4zN24+(ktr4dTFeh
zPx`iWQce;L|qPn`e3
zEe8TmSa#RtIQeLIvO^VB?RvPnGo}tt%VHmtxC`mfpdh81L0(i@>lh_bkYHq&g{uIoCBdWue2b$
z)y0}}6db&jn(+VEm4HSUZ+vqw%wmg6Rd3y|I0O`L1l``jfB5ovm-hcZ`TrXDe_jJ`
z$kWZO&u1`z2QQ`3Vn`~?ZCmXQnKFC$4x#6PQ8q3|H$#UrI`+-`ybV+}k#|z*5{T*j
zaph%}pQwK}5p>kP{?^eYUw)=tv40rFkB!wMQmS}rn@~M)J2Zax)R^_iun;~qC0gO9
z41x0xb-@*Pgsaa*MIYX!!qs|sILL+W=Jw`iGX2=sFY~{iebc%)9O!WZue+1GG#jo1
z|Ndz#KZjcasv8@q+;;ILLCK3BoU>0qbJqR>|FqBuPYWSjGpQ&K(O8w(QsqHFq$@O4
zj1+$j%0oiX=2FNN!1vyiNW|6YT-oy2$oL5#E-0ax)|OrJvktvlCzTQ@K#xD@)U|n@
z5CX0#a41^SFk?45mYp3N7LS~yI*L+A<6=ZxRiYB^Kh5`hor!xPM6;xs#J{;6>lSTd
zwz}y}CA*u*E=`&}^HS9aID0BjC#UxgQ-5|P{Au2_r%9f0R*buiU*ic;(;zedxAbw_
zaOTv26H;q~W9L;PKtoj6^I4IvdCnwl3s!~w%oTRe5kqRK26t|{+uklzYP^WtjM1+eU&s|8UWD+yrFUKg
zF2&?i0k=*2wPD3Jf7|A{l`H8)Ez8sk28Q
zRO+v_ROpZmP~n=|VrFgIAm+FbLkj=K!b)udid6-K08TlwR%4gXS**;@uQ#3;8s3nC
zrJ2EAUzD8q!0t4#fXh1AR|j0^R&_Q)%aOv9Nq4KyG0C3SEwZ(j!03Xb6d`r(AbML%
zl3$agZ`#Z|zYd_oxs8>M6)NtfW$ZjLYWV3!e%T3&^-M&gYbZD0l)mXnzixZ!Wz#3!
z`LkK;6d^lspJfuwn4M=Wx8y-m)p9LaO(CY
z+=b8@B9zOc`Mf~_4*Z{;iwSFvy^7xnp1zJ~dqO{`!FgL@={=OR
zsUVv`cV4dBbs1Osbe~ytPo7lJvBev~Oua>?+`f&nJV<}oG6y({vJpUE%Kra31T&kHGrx^Tc(XV2`?`-4q_4Ha5YJU5jAE;1suFWq9-tnE2A#pPEFb(D$GHaDC!S)Cp
z-B1y~8VqKbn8mR`QXu^alTFv;ewJE@e{IO7K3RkM4&hvpyTsx~cWXI9Ey;$o%&U(*
zf>h~ZekP)Dqd197NXpfd)2aEaF$YCLP)!W?Epr8(>3n`PHiQhdTeL-VP76Ndr9GEY3CTeD7`S4Yh8e0`VA!>6kjCzUGrz4gIq)%J)D=h4+z7(l#NxD8lH4y^4lYTg2kQ6EQ54gpo^Sa@~
zK;7w^el9_;vqJqh+oZA9=kavJ7X$Au5is4*;Iv7e(4Sgp+nX2)2N@f)K)d#XTluf6
z@e8sp#t5^dyuOdg6C;@H)g9NrjpU56)a5I=zO*Jw%So^iI-*rcRtSgc@x`G3b}l~u
z$15TlY-xZ(WM`~p{ASeTW^3zjN%jz-wxd3}uE^BuFFTvifI*tEce~Yf3q#7RWptQh
z%yg>1@I2g%tPevUSy|vZrINa~prL-QVN=CK>{$wP;}H9MM!j*XPUe!l3Vr2-d{%%z
zTITfujTuha2lruz=J8F16@c-OL>_kP&*D7=>_o56cGTz?!nL}FEk|hHn`J+rYC#ZR
z*{3?JW~6(TXqmsUb1zg0yp(6x!)nuSUETN8e0LqucWNoWN}F?_h3GRF(sqN-sNQ({
zEM7~y&T0G3vS5ueY@qwyh!t`YlBR|s;c^rIsHMqt4tz|UHgMCf?8MX
z>f(O+x1dS*7_O6evO%`EJE&(j$coYh_TwU6RWHeZ6zjD~G%>K_TuZ>%F%3W_I-*#d
zJ`Ek$S>os4*g)gAYH4_Pcsb}Q4%r$$+De<1DcfBfHOl!IajS12G+Dp44M8VsPs=DM
zZp|9f^vs5N8>|-H5{jxAhV=rjZf3)KrK%}M_p7@IvG5BsUoly{6d+=>$%@za6`P$`
zrusc}s6w8X3;Nb&!ZYnYzZa*HE|VGR3@t*^vOyMKAmNORBa<9h28fJ}k!v>Dd$Q#@
zAH>Lad!_>B;y->yD)H_V1s;(P%8EAh&3X$A|EDp3oDOO~n?3;Bq%v(@j;E=C|CZE@d?WP)P)~8`*
z)A{0Z2u$Yy_7L9B9kG}QPuy*5G3uj>26B|ftj}s9!XokPwwC;pl;us48YL!6FAqV)
zlRrx{4i(d1cM`n)(ysXA2N!{KBvAGF7SokT*p|Vs@%9BJ>|W6jev=tTI>%Gxz>VVS
zJ=8vyCeMU5uIO1IpH$aWM0cv9F*u_>E^PHTH*e=lW+gMF08ZJn^Vz;`ZQcbKuEsG{1HS)`AW+8`uf6FF&>+8~uqEOPcYB4pt{rwSY)8&5(|J_P<+^O2^1
zW<}<&AvusxChQBkk!$PwT0a>tobg17IYxBEq@}Tcg;ZJeeM7*($wHB%uR7S!KJUKXM@uUPeXGV0jZE>(+tjYY*ACL-RJaX{6sDtdxoZf
z;iLW7&vdY_hZ**HfHRK@UEcS
z2&6zS`+q|tlEiaeS(C??Q~b2B!SZ9Fax;2cm;2}N2HVhEsc%K7@*h}FnT&_NQiP&r
zM97kfa2E6RycCUpJ1^&J_IY1PzqwMtWeBsA8oAb=a*`|a{m%w)?0%__<*bCrU^Dx4
z`1z2F;HzN5*y6i_l}j#ziQhQ%;Z#@SX0WsD5$wOC#uB3E37P90@q~{L@lyl#2-O{L
zToqaZDx4>btEN*oNsXGyS-?5=)bOWjD<-G`7;-PNR@_6{P%Zn!HTQ)AUIyq=!Lccf
z)dH4|88yXbhfNAaZU(=@fOVooEt>PVMwN8ZUTFbR*CmFyo)y$jSWsY}O$I-y&Cx$$2lNi%CezZ=*^zK+7c7Wm4@KFB}<*+t|cb&JgDUQ7@;(C-)nuz`xGys
zf0b?Ob;_62b7LYjJ;g>}s-?(si(cjC
z*t679$fxS@!}W$1#{yfL-lTvx6K^ny8fj_k9F9~G?Vdxataa%N*V$IwH2#j*dB?uj
zjt3PxulMdVE=ulMrO4GOyu)qyg}85nBx&oH7&L_U8mI4X^1V*iwSx$mbADlfUCwUIBe~^KMN-#D0bTJ@chy`?pipUQw#$
zp2$(r0>Y*!_=w;%1&-Ja9QZ`_+KB~CXsT9>#Ou8N8coAu@eEy~yy@_V<^k2O??(Hk
zJ9?BkPiWU;;HZ|T5I|QT*(IwaNr5X;_$GaXs$1hUXSR30-??M)ukIY`p?E55^cfvk
z(cMDF2qA^HBcO2CcD*6(I2y?i-K_M*KegPsp`H{X;J*FN;`x67OF*>0-Hg0mom34N
zSOK=Z6*cEl7wdS0D00uhGTVF+(C{(mc7h3s<0b;2b%QeJs2{$-$({u-*}4UnA>RDU
z@O*q(9lN2=PL!JMBM+ZyhkuLi5n>bC~^VFX7rsFq*K8dw?D+v^m64y-^Tu*S0ow_tL@0SgXuIJ
z%+DkOQujVOIV=l0eaiK}G=KSZZ*HoCla5igM8MU7AwoI{LiaFbnsRXY*0W;%fD#ZhBN)x`7VUNmspMC#D3|v7kp9%ECVbB
zLO}`livIk+#FE#o3x0q7Vonk#QEJuOR0#nWEfC1;@H)FOsqy?_6-=~@=Ct`IZ#b%{
zcHej&I{nUM{KTq(_UFBF;3ydUoOb;{Q+;Homw2lDSx*F3#QEXgyU*Lz)dHY(qhieV
z#K)WM>}P)1(#{=Pzt`enxeepT6B6OiE~|91Ae9Vuvh<|gMX(zF50v3uiMFGJ-x?h3
zrfMkszS{`ECj@*F!IBo1xi`#T0pp>DwhEvf;l9VAgEWr$5;T90g_d2GJ3Db=RI4L&
z@aWm1{ej~j@w$a$>SFsts*R~#G>ca}N0?Bd{LmDv!M2Mnc-9`%CH(^!h&jW)0NYqj
z*MYig!O1r)NrXVGb}+Pnfb_woSghnR9T~)=OwttLBhP?+fN_j1p+~?S%%DxE{&t^d
z{yHV@Wc-xX60iTXfylW@!JUikBQxJF(J4hfOg_+BL~cU+6d%NGU&=X54rlw77=U0K
zBYdRUI|heme$Yhtlg@qlhPS|i@e3F!5kV;0gD&bIkyr5#hrN%mboxhV0xwO3z{}CV
zQLhYhnSgA9hVu}t2*OQ_Xt=EaAnktE!L}n+3H3k0$Y2QuF)aIb#q%L;UpD9AU%YVE
z#hrYi96e|)ov(irqq22i`$8;5OxsQ_3zP=2a9e^}P~6Fe*%1cHjK
z*Zn#M$EhN3`S+4%Y;c8Bba&o|vE*}+6$0%5*7CeC!A>Gz_r0KTTPNfCGmBpI*&}B?
z%e8`HDIQpH{khsLyb0PQ*}vp>Qt_tA3(D*jOfd3L80mko*QLvG)7&%hQ#v`s67oA8
zr|)CpXchvX7>IRa|KP)artAwm606p?$Ue?Q2t*&qkUN3ciC0?pWOk6rJvk%*V@MdA
zK-xS*to4)Uy#<12D~gs+8V~~ahR_855&Amp8wR>Lv0v62fIw~<69qw6YXH&KMUoB2
zoG7*hNe)b(qP5sPf7Z>*S#TKfDbbKvO-bt5YKpr${c924vFtSpTj=7I&}zQbKKOH@
zA$NM!v^{?=G{jiynD^8;tXyStBS)4^ACd#>#hr}N9}v|=7X|4LP-gpFzjpMl^X^Zq
z{KOb!79pJ+&R>4R8}TfCEM2;j;~Kkpg6yFUh!D6C`#3j=3!D12!Lwk;OKJqhpC1fN
zXD0jd>~8zo?|HsrB@14|;GSvUf^eBlh{}K&cte3CCk+|>A?rfNy6(aDkDd-mH;E$d
za>MEmrKsInU@_^D{Qqos6#r7*OsQ#?nLR3ZV8u1ZVa*t4K3cg64kKIka3jT|n1g&~svJZlU{@lE!*Botyz`3-sbt*D*`g^+{
zOngYlhs9!N!1%>DYs8QQp-To3bmHDT*TiGj?!Du@f3kf+tt^Kv=;SZa
zZ^-2EluteuGs@3FTPA}7CWl?yFHSC8`W_R3Xe?0fyptA;nd=X80l&(Ez+l>DVzUa{
zawJAkN4M@7LIW0`xEKUseT;OIXP|ZIXTh-bap2h)l}YkBa_lSmjwbyBw!Q%MrHD<<
ziQ+6-HHBQ%r2=3g>p|z88i2g`@a0H1{)bWAE$osXI73fl}6yv^J+DOQ4x*
z$fYe}l46hK!)xvR_-FiXpPM?1ZfEeK>AZ8~$qU||++2UV*G}}WaPa&TSvE%;c~1_7
zh5SwG9~vopQrcPmmyPd{)h4VutJpq>~ODa&l(6^{=(Umv&&^S(RDa
ziSt+7@Vum8iB>YZLiS`#c9INk@3f_xZj#*f#fL^(Rya}v5P5TW!AX8;EJ&vYGd!pe
z^7^xb2Tmo#*ntyS5=r)O1|aFC?txRUUx8x&1v)?}QC^*%bm%w|%696ouy*kW;o8BU
zyib+_z{U=Ea%~PlX8Q1Y?)JYNE-c<=2UK?QIdGnJlv2+#KMRKyhGw0{EH1>-kk=2}
zfAhvEFHW@=kbL00wqFDw5!SL9!0a;t-8ACW-U7JYEV@{#O5S?|_}mB8wTHB9dbMY0
z%B)WM0h&5rv|GDi$G>`FiF=m9lzlejY-6~Ca*IQ7^&*04UIs4{&%O-Q(kIxyq1HcG
zZL6d&s}ni(50J2}zc}Zk_LK@Muq1;2B&K}Z5P^i_qLbG@9W{A!!a4J?b%vZJ&yPH3
z*x(N>AVT_F&v0Y=eol<6X4yyLZ208)5E&!OV2vW+KHzLyf1(9!{pwjdDVBaWuRkk$
zU~#7kuR*EY1S7d@1tQ0H5+lSc>*wIO&_9YNlz9LD?1_R~?XTt4hc=4Z9-vrX1&c;Z
z%Iwi@SS-~5;J`&4IeOQizwbmHAc(`#%
zgzszy*$G66Q&6owu;A2BeR=Qjn|_lFtg{>xC*t9|<_MtPJv<5?G_x~|=dw*GInNqZ
zW!n#4;mEv^sY7cTQ?_VxI39ukR>u5imyYQxP1jIsiefn!mMtt=OQVCv<37JMLhczG>33M
zl6eH*N3jk+%Q9N83MG6_RLRGZMm+982U_E}wry81BCUU%f%8%kWZ4e&zqh
z35cLIjB(XbFGW4$G^sIpey3`?Go&MZb;I?JrUg;PSa&dgr-m;>K1wsB*S??8=9BJ5
zp6027eI}*5aP9Lh%iPdn*+OQtk6)ODI1HlSnEkInHvU1S^*L3Rvi)A>gT)5hN*y_o
zambseO!blBecwJmSviHUo1p**j!}3u9)<1b_eJG!s8Ci%ey6XEhvgsvXWXU3`qu*Pi*geF@Ni)&4-E#ai5`VO`W5ZOo3YpMJ0oNI0rjNEC4
zKmF8^f{zXA>UInYcxFnqZdcyhy)XLyz0VQNI`WXpflVYUvwOE7!rwjU4_-HN=lRy^
z?65H|y=LA(vG2q<+_wt9p9@E&Ct$O(%*+!3>d?UyMj!q1-2K(=t>@ir_xOshyV(YD
zlsl|KoU;8coNxTJcEVnNbB?s=%N
zK)Fv*VdWH1e;N9eKSbH&NJ`WL7-nj$CaVPd;Wfa0{en~1U$^&meXF&Wu1%I_%a7L`
zNC3j0e1RwJrT8yzYtNRvuP?|n#561fS_J?mRV(J5cKs9ge@j1j*zvKx9A$kqCPdJJ
zn|QB|D;ELWe!RyR2)*SL0bB=St&RYdr{j`kP^KJbY1C{IfdDwsSdsTH?z!W1O|DARuI6TT|kFc
z{nqX~E`Zf}eL;?M(&6aa(CNJo^9#6SvA!ys5CY{HQR4H;Gr|5-@&0x-h&{9Epf#Sm
zAC2{?dFshXPsT7iijDtP{~PJ#9UTYg+@05qY(4*fCma#qmd5sCyyE?EDS{!_{t>0_
zz!&%{ePH48V^$dzyc0{jXCofW_~j%L+tEwD#J!E|Y5UB`*7N?>w(WHP6@HsV01s&Y
z#P9>!$ajcV4h3$4@4-ph{!j!|5w;$L;CK1RsP|cQ&ztrgd}aE%g1&4A-pk(x_-%Z8
z6psBBs^Cu(?I~QjWV>}mP6B{%9mxdo)@j{m;R1%42-q<^<_MLFF})BD5|_ffSV}~g(#g*F6&>*gkFhahySJYI
zuXSf<$;QIMh5KFtq46Wi?R!B+${iSy*?L>1#E;@VTAo$uYjP1D(lTS5a2;)eUyt0crG56oY_{&q)2|A~I6D7_`VlMboDklwD%vuy+i?3qn|TR6X3
zG{!-m<#W>kLPo)j-a9gIenYve4Tw&3J~Z)1TkW6hDaj_Fe2{%*NhccJh#fX>
zANls1e`lkXJ%_g68bZH#a8;HxL9Iut5K_5*L2vkcr;(cen0Ws40&)X~PkZZeR1L65pfJ|4kWQtklSl
zwc7Sjq;{;X?onzJ+U(5(_mBK1JbRp#$rzt_K3F_3KRO1J(R(qm#6wz|CQnmlw$2~W
zR4NN)?=i**E11=J|7v^>5S0)q(~+6@xkVeZqRA3Jq6jdI4}8O$qNxj#_fO
zx9`r?w=7t;;lqyC_W?{0WKe0MZQwz`-a53xr`x0sv*Z`+f~VuK`K4c*fc%3Xq*Py$
z-cDgLUE4G0Z{>F>CnigBWaCb==g#wQ!uu@?e>rj)I;~5!zo^dyyB~HPcgQ|_^$RW#
zGEo;Y;3&1m?kB>6sARPHAo+(4DE9iPsPf@Gcb@k?8>bw>HVol+S}i388ar{6J5c`+
z2KNrXbr@R87aCQ$3H`
i_NnF)cS1#}z}UWf#@2y2^H{%e>3R$Nv>0EA+yiZ+Zk
zRZoDX5A6mTX@ISv46z;q+i^2
zp}fvEe;7ZnkyE{b_~Z?1998)Na6cB{<^D#WWZZ{IHXaHch0j1d_qI`KGFuMFW<3E#
z#I_goF9+OIUqe0M)=vC@&J#&yUY-blCF$G+YBF%m
z3JC@Z@m(l`7XtQ1t-&(#r_ssF=j4HyRXo#Pgv|vJ_M-JKHh$$b_DYfd8M=S~+R~1l
zwjFqG^eIdXuo=u+i8S6Zplh?nxMGZywmX10ptCGQ&KR!Bs{L7?WJu!V1E^;
zs(_v0&Y}vEEgZ4k+lTji?l}K%ux)5X9PIuOEZAPM`}Vi|G!YVK>Fl|dWO_Qnfakvq
zXXPG;J-N`9WYs?yS@wmYNA=1?_>$q=^5z9?t!L5ChJ*E
zsznPZR9*%l^Vv!NC4DDDodgm;vuN9>;Fl)Lh;<5olAvhq9O<6T&B;gg4ePE$CMWd=
z>H9?u{bXz&fCmhO-Z~W|89y(!gdPd#kUMWfTNF0k6RF4rcku?)Rp%A)B!saXB&ilY;RRfl3C_
zX=n8_q&l%rQDKkNn-KTyIEE_AP97PMk>3p2oXB1)hAtrhjS#}4yMOr*lw$WMgTt(6
z$cL6O?N>0zov(HttVv9MeE2aBV>6tFrr170bqFknCWmkE2*&cv6toII-+%J@W9)=U
z`NDO0*7n@K=B~YWp7;L5f(^pTVYHYt#0D*Vs_D||HA!cWfj65V
zlS2qqqyIi~=bB5BC@)9(Aj~xyWReK&p=fX%&zuXb&hId&it1$}XF^Wx!8|W^Hc6VHtG!
zSv2-k5S*5%&|Bc#mE7owdt}=@P&IA%Y|ZGZ>0qfCJpWi-wG4vu5{v
z*)$Wk6Iw0rgMX^AyUx4M4!(8}o-R-Ptz!uE9W9+dR5dbQ<6Tp&S;iT3k`+vv4-Clw
zbJM#jdinJ~hmi3MSOO>C9e7=RpTv4K!g82fJkc|i@8YcLDUy6VrCxQp|
zJ|c5dq>1nC_6c0O^k~=a18PXHlEGTXM+|N_0tU8c*k!V&met2`$et@q4#$3_f;vOWMr~YN9=arepUv&%1Bovg_WXoZ_e8vStcSgK5H_j?B|{38MYqI{(3e73;r=W#E^iT}eBt
zZ}kS6!&Do2W^H^y9P->})pih7X9ScKzLkIotLV+jfVM;uPfLT*i`A&N%TA1kQO~z!
zocfEg^gB3Z|5|5b%{XtFMu!0c1H+;ht$#YUJDqHdwd%3zjOLP&*_2rHjec_Poo^ks
z+KYNzPRx|JXfiO<-#dKz53%>-?~s;Q3D^J7ADRvtvJvn9P=$`Y1X9F(ooNwvXvXg5WA9fSN2R^nF8r;X9F}xeOX={Om>hMvXX^!@hEdF$(LZ2GIFtRt
zsgR&fUUcdW=qtQU?tQ*W)!lx89@*2S{%#tuWn?1R`4p;2$;!Z&AZ*#?&)ER#ZQE
zR|R6>&3NQr-Vjik=p`pUJa7I3`<@SzRveg6!UJ9EApsDAjSbEd(Z7gZT*l1C$9oa{
zL>5=r3e&0}T`V*|yN2HZM*#0g_vq!8c#_&d(Pt|F!s(ffUzVAMHXf8z1|JiL&xdcs
zcJP2N+ek0R(o>(+J~Y3-N791uw?BkZ1TH5K?0{w8W%tiY=xD={^KnOwUYNnA)--R@
zqERLAEr&0zvsQ@N<(e_&MPSKBUzSWm&qu3n*s^dUcj(%z5?h%^(miSN+ab@9Yt$Vu
zjQDdAX|j<2(hR^Ec7*5Bp1C;yLGWyJv}a@U_M-#K*M9>t*jJ#4+9dmV4iE;d<+`<)
zJtUtK1*_v-ZBLI@ry>uKsUes)Yg8c{D_wD^GIsCYkp&xUZp7dt>yTRUYvWuQ$Ke@>
zzVU%>B5!CFSf+Q2ePL9U{^6%8?L#Ln;k&5`B*HR|SbP??k1b6!ZjIE7XzSz*-(>%v
zT2vH41|hl`&kX$B;?VoLSA?t<3)>Rrc}}!nmVvkTR^6g}!C$2TN=3+FUI
zXij{fqK}jy7W=sd2`vsox%#n70q8@-d8Sw+Cd<}`=hqY_-aG>V
zVLnYr`x?#2wymx%9{lG8V-@vbdlTgNX8SjJ6rfSSojlIYgXxNlRwij(Y_5yq=4`<6K9L{chp1^;_`m<|y#D
zSf83Tw?%e~gzVibHPsQY)~sJ6Le_F
zgWsvD{%>1Eadm=#)uta}8F;(aJ}kg-p0{ZA>I=ADY@Dn+n5&@S&wgT3Uw#g`+5{tM
znM!yq9rF8uUr2X!xlVkTYAFkhJ+FTUCdhJjx%3T9JPWA|gNZ7fq$ho3ZNKn=naJ=H
zdOPXYm0pMwI^HP@JoqBR_z^P%OdP+71)blBR`a8f0bsWvMynH{IRV4QgMy^N==huk
z%Qrj`Lrp(67iUx&acP9pKOkI==z*Kn9jmch7OW1|V5FTSs`7c6b?{a#37i~Wgln6Az5i^R!rn!#p4MOa#S;MTfdt!lmDL*~ub+{C)S0ch
zL}1zWHau__&hRXx^^v#=ibSh0HfC;sYltP*(J4;SoiW*IFAz;I6mcrP&t7(jBWTHU
z$q_9a1hLJ~3cViM2kB%p=pPQqm=qLe|Ki08gLbO}V8M-p+xL3NBd>SOnAHp-$Db>x
z!j^~2tKs%b0)$qp39Hlc*WN3Al>Yzioe6*(Rhjs!s=Mdz2?2tF0>Xld$RS4#KodX^
zT@}$ao*YTQV_DHv|E|YsIv}g7>j8LiBtaB(iT5oi3<|jbK?Gb81QHY_Kr+*FcURT_
z_kFKwrn{$mrn{?pG86hG-BaCN_1^cs_uluu>wTZU`+{$F=d97gRML;GMFVG=e|rRO
z_Pg3lPfX&wR#x&BnCZdYI>z!?ew|`Yl{{beBLji<3oWTtnV~-5)VFZ%377A;
z{nmGG3F@y0&f>nu^yx`29WW!+2zLRF1H9uC`(6}gUkps$`eXfI$x;TrzBk|{-G@y*
zEBP{0f0flg2|4O-5Oa;01}Pk2-=#E%8+?mKHQ|R=3-C5xc=B
zFfW&$0+b1Wq4WB7+wVU(HUjSuP}3Xj^?dtg?NXpAG5w4AJ;-O=-I&~9`J0w}
zHkt68)E-`fjo7ze#fE$q8w2UUVhUoenqZQE+kT*zzhw-Bv5UaW=-KWSq_BGn-$!IR
z$7-&0A@ka_q0FFayy2xBqZ#zwGe*79$GR4+{b9oOuI}Bu;tmaFUYAA?%>jclVhugd
zu@ZA-O~g>-lyd?f$J_fhE&H>nubPdl&X$9X4}R@NC!vfp1U9082vZTz$`{UCa(&mf
zo~8IAl@YG%1bNqe%rI){CD-j~4G+IG+JPeU8=kA-U&eg2LuG)CAD}z@F@~g`u@*Wc
zX(>BN4tf$}arIdJGh<-vPOrCnV98p4p4FMOw!#0FDNZ8oyXl-WJZQH$ZQcRU#|2>j
zEX!#-1~)IBFlw|ik5>N`L%@EE0&ety{@-pff!m{OyVbWW@H0-a#rG^|S!n~=%0}RA
z{X6sriC0`wLT;_(>pDM*8Jm-TFio+(V1yWHVE4le}U1`P%>4vEzB*&wo(T}Yr$y@n+A308nx{W3PmmOR0($R
zZ5gFK1KYEIgbqGp_6+Su@olw!GR*Mq!@2Bp%%g^u)>_Ro>V6TTDgMyVV%Dq#Ar?BV
zbF2nDFrE^ye|Q8_-LLeya9xJV0IO>=Jlw+(#+o)n^Y5QhRDTUXHsDqmEme5!=Gcip
zq=)@ShldBs)5moCUj{q!e;IM@N63ft7YuLb#s=ji1L@?p6Mk;CubOn^AAW90&6=2-Bs6Ee_^SV1u}^Bsfnh
z;Y8#@iJZA8eh(NW*S0^Qhc*mTHi2jqKNR~Xv)+Y{5c0%?*1*`4XeVBsa~q7{m0ibO
zvzLY~(KV?;&g4LBn`elDE^X^~+0E~Gz@P%=!xUec5OsI5e=Pz$;}rfD
z+)~va%?bizbK=~iFDFf_)L+GVsjBM8H=&ad+9x!yB7F>g$0yl#x@Zxzwg`t~K7Ua+
z`JfXe2XP{IZAMfe{>cK!y*qkHx2I*I0xNC?(6kf(yGTk%+;W_q5=u&8J0a2XbV3DG
zEuM)^27*VlnQ#*c+ib+&AV;h1c#o=YgY-C-qWgp~I2PrBjivHtCFL+6W(A4aR@F-m
zTqx5gb5~YvOoUAVLjb_-&i9R<+GLt4(E`F$4Q^ciJ2aRp$tNupOqUi=fh~Ch4~B|C
z`0-~!j7fH!OUk-?Fb%)aXaj|)WvW^yj&JWNxS-UtnHGRXn`l+VyuvB5NA!oDl@aSK
zsJ_x=kj;mc0f)_$U&S(JBE@*6B}q?t9*Wj-X`-41(qG~OcfMZaU!xoh>&qtqP;EYrv79a
zS;?0LC0HzwI}+SO`14z!>8l
znIAyymUxz9w_M+~aP_4Isxh-oc_0I!$FqDwD++0dDjZ53GOQMkmAQaEtdh@-E!n-b
zQ78g!>SY}5iF(x{fR~{U6|5_9G_*_95vCIyv^a?4h@UpyQY%#r-4mK_vVYiC;zoV2
zH0(&YPMs9$j?wM)Wd)IWu6}?>JV|2)t^vwvxK$=`4X>!{wp@=i4kIJzU-OT9&KlS?
z%)io4<|K2|_Pl$v*A>?FEMNc;vQYxin?Gn44(&~OrU-si)<+S#OK-Cis(oo;Rq~
zlrGRHbys>eIC}0l{s0R%=tI=52o2DlNW#SNbXb*OXnwy7VZac7B29c%{a95BEWdUN
zI?aSL8nx_b?yWFfo6x$=6ebWbAqJkr6&&`QWY>GhF!Ccy@(c$)j0OFea0#)Ke#BW&
ztk{M=SS3PfoUMd)rJt|F0A0v{u?WiE8AlP%9jn9Cv^b6mcilQd&79+(O8P(gDI8#}
zj0pr;P5AzU*(dvqgZ>1qldMzU?q7e_6Es3r5Is{?hn871)uY1ToN7XW=_&fSCeCah
zXVLy8{oLS_Zr=HdcBbLsU#0_PDqtl1{IHjBth=E^>QO_7CCx#Cl$9kwXV9VBP+e`g9ue+{6J5P5w6FVCpVt
zGE7#G7tI;`%aNvsT*KhPbj8!fY
zzAerw&GO8^fJ|PY0AdI@Up42|Y5&Ht6Ziw}xO>@-?A+|hUVh+zIf#KOo*IqaYy94w
za;0lLB}|}`>^vpCVBfU{j8zrajoL)wTvi-TbA94dX{p?9Z0N~8pnXH1-(lQhWSAot
z8Ba-N7nu2PiCp2XTR}$m%k-kPFJx`K#JK6mdZ@LCRxXEG)-vYbN{Dd#J|~${h}h7R-L&F!TI~!BmR)Ce5irEq0nc;;
zW^Kbul$|#-odHDgCy~-eT{q!WR%Hg}S#Hky!T`o0%_27m5~%irwghu?>AH7bOYnnY3-jo{8M!UX2g1fE3@`gfrToERb|G~4+OnTlkI
zO=$+7qEAwX($f~p4e7%akHqnF`f+U(@b?VbkE2%VkXWIK>C1r{6V%gQO~5#@$DD#N
zB-&(&XHqKz80=}e?L56+`yknWBvVuA>*&1`7Fwxn>!S~HA1A-1N!3i$+I3(QP@Pls
z!7wXMt+nhj_hYtqh#BGz{XOryXPRy)b8ptytnVjtL}Ufq39Y8aXi%nKvw;B=Qv0_7
zt5X&MB~x*bkc|7xnv_KumB^dcV88a)tLZpB8=N#|^qv!h?vPD3Vo`qp2#5WoRx}-_
znIl5ne7tT9ur~1fOLip*C$pw+)AE&C(**yb8tNbOt@G`HP0KFvt>lrGHze682;+rD
zP>XuP$1qoGfUEdcG%5rhJ0_2!fmBr82@d>IR(dosEXZwae
zOovt_JQ!fx`vpFLwK5;&`U>uZkM~Ug-0ARjE(gVI_%6Udb|J$^)d#by{(Qdwld<@+
zcfK>HDY_(0SK&*)&+r{D-~Sd&i?EyZtTV!=;0I{=^LJag_IU>EsEUR9I=}Ou66UW3
zKjPeg>)5Xy+H~Gy!ep!9xbuOF2Leuvi{B@Q-lnvg1_V5wb{kL&U18F@?(aveS4
zGld~^!YAWOo$Jtub~Jy(PlAwF53XN!yE1>fmPVARf&-wJ%Q?1P*=ib~
zc!o28MwQ861**(dBr`5&c3R1b$XLl?_i?wC6LOBdoAOT4=8+J0so@9-JZny4RbW7)
zwKM*7z+@7*^BCPsg)B!R@jB^M8laj-w4sp69B*|7U)4LVPPG@sE#7?%u4B~F;
zFH)cyzKLXjHRE@soP%iZKpAUF1o-7~rjEFW`2JARbGOJhmY!zL=vC}*u`lP?E3DjQ
zIgr8LL&%&ZthKq4sRr!V&H&0YUQP~yEam{h;;Qy386)Nz*)L?R*E{Ai*o?I&et@g#
zOGKftGOA|aF9^pl(nK@h#P1zscztv4`g0yqle=hKcda7kU*<@DYqmAm^Cz*I);@u!
z6I4k;U%2i?ynT2GNww%ChFnzw!Vk
z>(TW)7#DV0Pyj}J9K79xISn)&624|eDukn+YoSl|(z<%uo0ZRiB-ok+xir1pLyY!`
z*$vBJ{$!JoSB%Wx7{e@AEJx4`Hr?-~yKtBi(F7
zLm72VjzKZ;Li?PzQ=N|E*k|kSp}%V|=Y7}t3p}Yvb%LLXRn+#43RXNa->g}A*sS5&
zs;TmB*bcqZPMjRU|E#nzkRYkTtjC{zYACP}G;qy@Rilb61*E>uQejM0O$9(GL}>O8
z^d@jpQ#~@t?_!em{9HEY=d*b~-_PGlFMgN%++ks2LJUq)b;X~^3c?vl%UaUC=&Icf
zZHQD~#fE0s53+|7JUT)A_`xq_+YeY|n7>R?&FwP-See9ey>Ky5nfo3|D;vz2ii>0>
zGk^fCs?1Tx3p9Y0nHTOQlqnht_&(z-8*PD_X#wjbK~gz^ytLu-Bp~ppU&oThxcz>)?@rxWP^=sldXUYqYV^h5C?WcOgV6}KD%+n2Lu+Fz}KRYyMk%_
z7z9}S1zAW~vy3;o%lUJq=Z8M1VBTM-fCVfAkJQ$S>v~+k2Gh6XCVt8v7bLAwsg9jNv8q;4{aGZ)n7N
zg&+teR0$fh5G(y!^Y<}sI_xQ68V2Eqzb*Z!w@4LS7cEB|VO)wZXtWhJ?jJ7}!u?
zqHXIn>0?&EAiHiUnMm018lhRy37K)|z*)BNeiF(CG8eJPNoL2-=kKsKz8?pY2EjfC
zB=CyW-tr}HV|_uVLv4-kcVU{MlE^qvPq7|Jx}}XW
zX@mn&!XTgxH0C55t)LMo*DW37w8f9X`Hv+BX}-lj30CQ?3?-*0+vdm|!G}uf5l$xR
z##S)2!WYne+c_{j;vWSJ5Wx&^1EXk9er}Ig3)YH&cpxr=CH*Ly2#5j;h&yATE)SKCb=w|WuXSd1xv`Kh$sFpEc{DBLLFP5WL|>|9KKl0O!AMENjB~uhTn{E{dq(3AI-Zw1h39@$
z+q1LoZkcODLdd_5!*G`<^tz6Sg}TmekN{d2j_}*b{~bw;GaC^!vY}QTpHXY{>0hCT0dOLI;X)$J)XGiwOzKR^MGlI-P=f>AA&FD964P&4a8=`X&r%B$#B8
zi{ogkZw-EcI^SW5ly5e?B8Ve>kmLXOB6Kga4fu^WzWS7lhdv|E7Ug%88T!Ky$v2
zCM@FEA{vN$9XQ(C8PQ~W8!={2pPP!!GMuM=RHsu-u_z_;$S&&iTNHi&i$$)a&?d;@E`M
zRQp$*tw*K37pI5zI}?Jt7QZ5xs0R5Jxz>m5WE=d)kVuFT8D|yNCC550(>^$%G~7Sf
zFq|mA0{XDHT1*G`$&lIB?nBv@oZS@zeWyLTwtP++;w;7iz
zM*fr_dyd40m30?=Ez}N|(D^cSMAmRDxD`Lkgy#)o?xvV*LDJuuQlNX}AolZ*Imx!8
zdecu0T2Hhltd_aa#=?HgvNpVbNSQz7eI{4R#XE^bGZDGae~}c?4EVXezd5#NvKUNR
zZ$=T<*W3B~bb8>=9F}@MW+?eC;>Kb_B=z*wdFlCUzme@(_S<-!N7-Cu!#Mn!PT$I3
zY}Q0XkQGh0q{{-U)1FNUoY9TP@-a|7jKyXk{
zR|I5~JbLIGVN&YsTaAxNC>B-HgwN?rWMa!)!U>$OqcHeXlqdFG*WP3elmj1UhRwwP
zH(>r2UEgkPxPL^Myvj^q*n9yq2tgN96Pn$@+gALI8@?tlV)iY8`TGct@TYFBb;c10pf?k6^LMqA93;B^?ky6M`$S9`UHon@OwRmChhkXO(uj`WFp~XiJl{XcP1p-v-(OJQ%Ua+j
z{DqF^ADhhOUeveYT(nogCN%jF`0AK`-_lVa^PZte001!ZNklM;N1fv%=#}_H`(w+IwbAnP%_mROlhH+67y1173_YXd|`yK;o<%JFq
zLK&jZFR$}r>=?5;4Cib$gEqo-zi#J8P9U~H*1I)EnIrE62vEi
zKcBDd86VB+>lEt?#diH;5gZ_HQT?Q)ze-+$&3ADbSOhPY)pg8OhjQ}~hJjLF)-w0b
z^si)2V$n*r6BaCSszMv!bQ&QSKST*qe>V!Aj|pAG$_I^#Tgwwci$Mb@Ye;<22`1$`n+7&7GXX^>wpHgh
zf|S~%Y0vSo@{gPkU~w>M0(XLik14qAkhEoe8};gIbyHL4cY<`*Rp^&6e-Od$MQh(n
z=)!jxbC?ywm;jKN&}|%Gt^9Wf$h>1b4N#Q+=ZyD2+y@lzYl{%dKsyNL&
z54SNkQIKr}6WeY{;8BO>m{c`U0zQ`lYP5X$^!zKHPyOG9S?Hj1dsyDcZRz9IoS$94
z{0e=p0#PEAhTaqiP{b9yEWL2e{Fe
z-(zij*tZGgQKY7w0{qH9qiG*+$wa7^-vq_8fzkO3*mXka@=*`
z=ed|`ML3LyK8UXnG6)FxzP1_AfwA_-E>M|K~#
z|IvNxt=mR;aOg8IfOWhg(elXFwGxi
z3|wIkPNCror~fd7@k3-DY~aAyf0gTe*TU6%If;(9foq`^QRcghmoS{KO)pyW>PT6U
z$^jbJcden>HzRAS{`FM{Jn^g|A-I%e%W$V&7|nqYz=$u|Td@J!qjZYR(*s&Jt
zzmNeD^RJ8j*BCu3`7MTNvMdXWfDrhx4YR)112Zs)Ki@j&(pJ%6RHZEyhJbtbJbrZ=
z=IC7}T8G(j>H|ccGJQdzO5da`Hh&uSt{Wt^`?hO)CWWBjK<0?NIGNgi`#JXk)@t!3
zqLlH0sR=kjJB*O|qxEIo3)YGm*bg*pHB~b4X4ajoB^i@M@><7fC6VYzUQ#l$@g{A%
z_44$>)!z}HzQErtY&S%}#41a_Dctm3>wDshMnPbUIRCUArAHGtj^Kci<0igq%)qhu
z8ihTR17j#2TUKGN{fMDktZ`lI;Vsqt1@|&n#L9r*QhMQjKZfR<7{g{**f^VFl0!rz
zkF_QIpXm={n$p7CxDG57i1>YhX}#ozT0RCsOQIDw2w!}vgOkAe{p1x1PJ~`AT(f{#
zemeNzeifo7e{S+$Ayc5j@{G$=8d;~b^sLl13X_P&Y~s(Qx6gvlVfdnB(B>ax;FW!P
zx(Xx$egRA>0kmFOKp*9rf^7Ur-y7njldjLGNauNN^Wp+wqk1|uU1-@!?Mx(+^#FoU
zA%kk?ILRVK7fl?5Jfqds^cHC4Y=7-)6o6lZA`47$O>mJYgb92jT8rDPyuUnq#|lmc
zzthr2X@dThI})K#y4W>gZQolfdNL
zy_@Yjx)-kgHJK3z=`j+=Jdw{LH<&3R`sVXuP$?O9^
zFQkt=$Xq1a#{YFKTywdTY`=gx%KD5XsA0X6gIXPjL(l#VO~57W)g08S*K#*i=W6}k
zx94peN^TRHEvN7&%)wggtMdLp0FQ?Otg_8%xlNhR3~Y@14H%%0zyv;v`7Vt5L@1`|8yFB6f!?089!@V>{UzIJ`>^juByfh|
z#;>RIfYIFG2kFSlNNJvABVNae^o6V6h6eq7BInB~-9kDcbCvPMJYy&JaGaJ)(+l@q
zVcTmz)7Sdw_2Yz92-+$LtuTYKsT-<4j_8bSy>j=I^>d4z++V_ak~tF-GbUDezu&Y~
z!VCw@t?xPD-#>XAo>;Evq%z2|;j9?!7tbe8;KSni6{!T-FH5;3XiqWJ*JUumegHH*h_wztsmL=ks|umEqxl|`&GD@h;a-O#4b*e_o>i>JPtG}z;
z%GrlLPHe2|6(^F)vXpe$A3ph?QpnvDjc!)W@dv2sY$v)5H6H
z*jlvu8#&)uH@wk)WSpR7%HS&F3-gERdLe7!6Y&Wj%qDmPX8l%eGz|X|LJ&y4+0Dy-
zfbe!ZzKzGyc1(R=rB{x`j~{}2Ac)!(%}=O$8!{V_W{x6gVJ0-;z0
zM!HjNcK2RMFL5+n(W^lC8J5$wyTy1aqZ2Rl2WX=GAz!pRbZy_JWq&R(i-i~}{u^w_
zp6B1qSt__Thdm=QeE>&N2Tp-b`)8mHZ^kHiEgv^}p8HUH(izMTI0?7YdzPP1yjbz#
zlHWPe(qeED*)kw_pm}&mPC<7#_Jc-Uypk_7!UKum6
zZ@o+e@9gHY@!KyEl%^M+g4STl5R!*_&i*U@w3lEFS`~v9P!DP$B=2dv10SQY3yN}u
z7qmW&mk1wBH;#Znht7sW9U*cF8-`2M=S^Tfb@oi~YPZWm+#L0+)Y_b05+
zr(HH#C$+!jlABbtCGiz@8P2`P252YtVWM8ZCVT%TpmR6coyT?B
zN)R7e((#B1M0VErnLp_riyJ!adMo9F3BfVhtTLv;q2Dau%0#>u=5zrYBJjmQWPwE)
z<-~I_w|$Hla36D0siB;eQsy}2St%b5(Zn`m!_#|XX;*qKL9i3PKXRAJ<1AlAFpJ9L
zu@qo{z-4>h`DA+j>d)D!*3ZB!2)?7tP4Q)t(|w(obyiW=nY9zRKu{1S@Ui}H;^)@|
zO%gTDWHdsV9Sd_DCRai`v>b+F<}=CsV5V!q>RSoJ`U}3?Y}@%i_Kmt(>&|zm+Q&NR
zvX<^W()$tg{H=&V|G|L_jwQymKE?hEIz9i-X1ErcKZWng=q`1+ksV)s;G`dMm!#$9
z)V_}Za+u?!4nwn@ffn_pQ`sl%t#+U9?@LTb4%Yb29`IG|%vV_hyd=(_&WDIvt_fX&
zmvKb<*YCL2f9bEKTCWL@z^GID+YfjkJ^b*4!1+QkbMsYHobkM9OT`@AauiDDqkxM}
zCkD{(xmFwV(Y0IbM4}ZgG0$LS2{
z12ofaHFyypNL81_Ngouym_ct=aF#Gmg(b*pGdSG75Fr%?M6!Q0VoVAfoz81HjhliY
za!#GjR;z2v?BCn(d}puac%LzIE;4^?)OZ}u^GZFe_LlZ`i4NQCwKx;EmXLn2`4)P1OL_v~E;w#=kN-f^7w14kCdSssjwu_;1}S@QxI<1YOb
zZKu!%p%Fg8>diU`)=0yc4Aw$x5}(fd`gR*I^CJ*Mih-^C34<;4LH3V0-D#vct#2GZ
zA&oFhpX^aGHp;N^H;y8-SOkRu$8mq86_(;6h>qa+lKrENTU1>WN82-`4wE;V$@p^X
zl|O4$fiYejN9$*h!mPjVu`3v-`;CwsS@2+gRE_hi(u=Mllu$;^&CvjjdeukOkWppFZt$S4VG(}VUzvY)7?N6vhxIY$^Xxku(gTm`L03&W0g;mLQ)m5h$NF<0g%N;87vaK0Yv6l1D1l~1NQlt!h(*?d&M~34
z^}WpV73Op;;EAh*D7~G7(%YXnMxP9GdDl`+Bl
za7%g`xKZ;gDzuGw9>s`eNcp`~9>b(=1dMUjX^8xejqiR0Df1i^Tv^f79(^Lk1!6q)
zskb2c|xtwzYEZ(U;FLr*bRR%lD!sB;K5D<-Y~<)QN^lcZJAsj8!nU
zsl)WJi5hJWbf*$bV-MDI0dd3pYbU-@)x&|6pnv0v%e?&1x8-mIZERnO0woAls^
z@N5~fuiRXIFZ>#WX~q)#J@kfiX7yobs9Gg(2H7sd=6Xg#BMGo~7XJ*;oTvg`0i
z7R7|@QIUmYd`TsW$BWa+q{%`gVPT#b1-?fa|6#|?KNA>0MpY&e%uRN~vLD!f{vt9=
z$i$C2iDuGt$uXHzn10t2Zo*9HdQQ6r=0Y~Zbu6|!AX0HGww-||0wa@Sl8hA^`CTBW
z))YG3&?;QGDQsBreY6Zc3U^cjCt7D;vetC$@1{~8)GobAO;EA}8!3-epQPC;dv4G*y>zVQv
zC?=5TFEYx{Skx2d6tr!Br1RLd&o)A`Xn}Y6!kIjgas7vTI}X|^y_HY9elY~kMw0jh
zaq0H8lU?WNp@e$;oMslbVE)>~m+C>wOPKU@vS20)`!X5)`s`9pwAlX-3&qXc%Aydp
zdnDpFS&MQ1CYoJ*dq$CSlJD2bgFeOGP;B)Dap^d&e4*>*mr!pEgh>6HM9uwv!mM1=
z*F(6E(zsUvUPwcD8t1~^rST|+a*0t%YNarX-Jx4rj>mqG8!0Xg7U?niP7-i!DYmq
z>aY`?OZAX|*>IyS@M-EsQ8PJI;whxbtt2~nW#8uIPpRMEqycA(o}c(Z78{!(`B{62
zq4*Ui+4-*=2oRGPT9H{%IOWxm!qNRxeH+mN&2;8ZP#O@p9hl}ggzvoJLE~#;A%3gyg(Ne|-0x1y`@>UAOek^7EmA
z{hIcwMgGzMYW}sBEPlo?fS_8WUL)P~ZCp+oqBTR9$-lY2Lx_pma5aj5Xa7>cJYe^2@sYmbH@SpY*a8<;>$U2J&n;7!?0%Rj1kt;f_=
z=YT|eY$cCptc2}d_S3NEevUWHPJiPmgM?PSoxt}XE!c?`Ph&5EgiK?Nc7;VjMKSj|3leIUyq5cE1S=))RXCE
z{AK=?DJ%ItWA*1o-;uVwqp(06f<|UGXiK3FT?mK$KR`(MG#xYkucbW<0*9xP&WV`0
zyJAQc2);xkKb*t;wMU!lc@(Zv_M@5$Yc}Kb|91JdG;uaD1HUd17LzsCRPq3GKp4O;
znKZ7Ml3#c7M-e;_=1CE^frJa!A=th(hJFi;6St9sn;*WI>(j#c!8^IP4Q$?#c_?0h
zh5*E1m?L-)=l7XjglHJa-W}P@=DjFZ=1+SM
zDG<$B#`coQO
z){YB^zjzKQ*Ulg~_Z#GNIBqZ><-4m$;dd8dPVORRV}|%>AM9>Pyx6p!nM42x=mQ~)
z@X2}uIC={D00T0k{U%jl_HqMvC-eDpChcRO{UR_S=3iC9vrZxuIgKXq_AL9J?1pnR
z^aks${yN26Pho6t44|51tg3<=@-QMdzO?JOYxaWv0NV_7`3Xas`PRiSe=yMMo>4y@
z4QkK=4iPb;xLJH=C2THVH8*h+iyK<3$Z(1
zff?i}q|KSi1gf7CMC{SLYn?oXllmm=LM%-0bwJ=8$NrS(4q}^#iNKLJl{vF8z3A!{
z+Myx>Cu_lXcHF&e2U?Lc@KO4>Y%S)roo?tenCa2=ph4IZzWutvjmv+hTJRz!w~irH
zCXh@mx2^aSQS**PsDLphhA7dk!Od(C66rJ>IHp11e!Z3Kx`gmhYYDsfJv)*54(oUg
zny`yu_*THU9nQ^a3S(1!%1b&A8;psTZ;}$whyIP{{SlqQX`GTBkQjqJF~fvJVP;6e
zsg{AEKiYocAE?R$wsh6=(E_uT3PA#fFeQ21y)XK)FG6xO)a_0LLb{ae`*k?b~qfgP4R*;aK;%^$lJFOz4MB_0hBjoU
zG6oP(m=Xy_OH3?aS}WR6W&VV?M`8jZ(&jOASFwSP-CJ-GWFzpb{O35(u#HVf2wXHR
zoCtY@g>jM{`?{^xe`sqH!orwMMVOv}^~>(gZrX}Tc;JI!qw{0-mhJKk~q8D)0T@SjxPb*
z7VSZ;h4vwEYR2~b&%^vvf%H3SkrQvE__O`@rH^0zf(iuA2t>LTG9H?*&$+qOksJ*9
zJRtNLjbJj&05RQK9$kMb3^D#NVppbf`30KgMK;4oO#fuK6~@?%iD<&X$*Vng_|3#}
zyGv<9q7{7T<~!Z^m<;F|e>47qN4Lth8I2}fDx08`ku59qQ7kJWF>W(9$Rh@(g?*u?9qDiD(GRO=V%
z`(NpLbRn6Zv!_V}iMhn;`GmqXAvky;w74LSjbnY?D6FmV*NSU2(L=JE+^y{eIns$L
zE+$X)-4G&H#|sYJ$A^GZhnhuJYoBFrhA`N&`3~Xt#wpTwp>jJEiS~<3j3*)X36=b1
zq8Rf}K=A9F#EKq$R%VY#nWjE8eX4QcOFutylbv^8O)%r*1~x4JrDdt#iqp8wPJt@_
zR-g@m;kwFqlAQb-{0vYI7!8py2C@-`#6AjM1cU%LA=4+H*=&^wK`Vtx=Oe8N|1ies
zhjD2`eHV?Q5@;oIn3u)GT;of%b%tTXOi{fir4Z`@fotm@{t{Z>Eyls#8m$?YV%V8y
z{wP94o9)`G3Y(j7U9c7g?>zHyv?m|PCv%5!qI4B&;bH1vgB8IDx)JM`7ec~#>)0zj
zQej8}ljD=M$#>n8$?yG+zeyftVOAT){1w2XZHP9I6PO#9|8IXTCnw|2!*q0~XrYza
zQGDpw%UU*!V?h-&^HSHDZVa#h=44>7G1LU_7=B16xpCQL*qjex?q0^68yTk$apI