From 5cd34e80a216378be79fc0a86053a3552e16975b Mon Sep 17 00:00:00 2001 From: Ethan Dye Date: Thu, 19 Dec 2024 20:38:58 -0700 Subject: [PATCH] Prompt user to remove frontail on openHAB 4.3+ (#1935) * Revert "Remove frontail by default (#1933)" This reverts commit cc5489164816cac0c708029ca4b7fafb2cc4920f. * Prompt user to remove frontail Related #1933 * Update docs for deprecation of frontail * Update wording in NEWS for clarity --------- Signed-off-by: Ethan Dye --- NEWS.md | 15 ++-- docs/CHANGELOG.md | 15 ++-- docs/openhabian.md | 1 + functions/menu.bash | 54 +++++++------ functions/nodejs-apps.bash | 136 ++++++++++++++++++++++++++++++--- functions/nodejs-apps.bats | 17 +++++ functions/openhab.bash | 6 +- includes/dashboard-imagedata | 4 + includes/frontail.service | 18 +++++ includes/openhab-override.conf | 4 +- openhabian-setup.sh | 2 +- 11 files changed, 218 insertions(+), 54 deletions(-) create mode 100644 includes/frontail.service diff --git a/NEWS.md b/NEWS.md index 4fc6cf476..0153924ac 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,12 +2,15 @@ Hit tab to unselect buttons and scroll through the text using UP/DOWN or PGUP/PGDN. All announcements are stored in `/opt/openhabian/docs/CHANGELOG.md` for you to lookup. -## Frontail removed ## December 17, 2024 -We have removed the frontail log-viewer package and deleted it from all -systems with openHAB 4.3 or later installed. As of openHAB 4.3 a log-viewer -is built in to openHAB, and frontail has serious security vulnerabilities -present and is no longer maintained. We apologize for any inconvenience -this may cause. +## Frontail removed ## December 18, 2024 +We suggest removal of the frontail log-viewer package on all systems with +openHAB 4.3+. There is still an option to keep it or install it however it +is no longer supported and is provided as is. The reasoning for removal is +that frontail has serious security vulnerabilities present and is no longer +maintained. + +openHAB 4.3 adds a new builtin logviewer. You can look forward to it +becoming even more capable over the coming months as it is refined as well. ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7ba6c4933..564e877e3 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,9 +1,12 @@ -## Frontail removed ## December 17, 2024 -We have removed the frontail log-viewer package and deleted it from all -systems with openHAB 4.3 or later installed. As of openHAB 4.3 a log-viewer -is built in to openHAB, and frontail has serious security vulnerabilities -present and is no longer maintained. We apologize for any inconvenience -this may cause. +## Frontail removed ## December 18, 2024 +We suggest removal of the frontail log-viewer package on all systems with +openHAB 4.3+. There is still an option to keep it or install it however it +is no longer supported and is provided as is. The reasoning for removal is +that frontail has serious security vulnerabilities present and is no longer +maintained. + +openHAB 4.3 adds a new builtin logviewer. You can look forward to it +becoming even more capable over the coming months as it is refined as well. ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to diff --git a/docs/openhabian.md b/docs/openhabian.md index 8023cecfa..805ad2de9 100644 --- a/docs/openhabian.md +++ b/docs/openhabian.md @@ -460,6 +460,7 @@ In `openhabian.conf`, uncomment and complete the lines reading `hw=`, `hwarch=` openHABian comes with a number of additional tools to quickly install and set up additional home automation related software. You'll find all of these in the [openHABian Configuration Tool](#openhabian-configuration-tool), menu option 20. +- DEPRECATED [Frontail](https://github.com/mthenw/frontail) - openHAB Log Viewer accessible from [http://openhabian:9001](http://openhabian:9001) (only provided as is) - [InfluxDB and Grafana](https://community.openhab.org/t/influxdb-grafana-persistence-and-graphing/13761/1) - persistence and graphing available from [http://openhabian:3000](http://openhabian:3000) - [Eclipse Mosquitto](http://mosquitto.org) - Open Source MQTT v3.1/v3.1.1 Broker - [Node-RED](https://nodered.org) - "Flow-based programming for the Internet of Things". Access at [http://openhabian:1880](http://openhabian:1880). diff --git a/functions/menu.bash b/functions/menu.bash index 4f0d2d053..ac206a55e 100644 --- a/functions/menu.bash +++ b/functions/menu.bash @@ -112,21 +112,24 @@ show_main_menu() { elif [[ "$choice" == "20"* ]]; then choice2=$(whiptail --title "openHABian Configuration Tool — $(get_git_revision)" --menu "Optional Components" 24 118 16 --cancel-button Back --ok-button Execute \ - "21 | miflora-mqtt-daemon" "Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon" \ - "22 | Mosquitto" "MQTT broker Eclipse Mosquitto" \ - "23 | InfluxDB+Grafana" "A powerful persistence and graphing solution" \ - "24 | Node-RED" "Flow-based programming for the Internet of Things" \ - "25 | Homegear" "Homematic specific, the CCU2 emulation software Homegear" \ - "26 | knxd" "KNX specific, the KNX router/gateway daemon knxd" \ - "27 | 1wire" "1wire specific, owserver and related packages" \ - "28 | deCONZ" "deCONZ / Phoscon companion app for Conbee/Raspbee controller" \ - "29 | Zigbee2MQTT" "Install or Update Zigbee2MQTT" \ + "21 | Log Viewer" "[DEPRECATED] openHAB Log Viewer webapp (frontail)" \ + " | Add log to viewer" "[DEPRECATED] Add a custom log to openHAB Log Viewer (frontail)" \ + " | Remove log from viewer" "[DEPRECATED] Remove a custom log from openHAB Log Viewer (frontail)" \ + "22 | miflora-mqtt-daemon" "Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon" \ + "23 | Mosquitto" "MQTT broker Eclipse Mosquitto" \ + "24 | InfluxDB+Grafana" "A powerful persistence and graphing solution" \ + "25 | Node-RED" "Flow-based programming for the Internet of Things" \ + "26 | Homegear" "Homematic specific, the CCU2 emulation software Homegear" \ + "27 | knxd" "KNX specific, the KNX router/gateway daemon knxd" \ + "28 | 1wire" "1wire specific, owserver and related packages" \ + "29 | deCONZ" "deCONZ / Phoscon companion app for Conbee/Raspbee controller" \ + "2A | Zigbee2MQTT" "Install or Update Zigbee2MQTT" \ " | Remove Zigbee2MQTT" "Remove Zigbee2MQTT from this system" \ - "2A | FIND 3" "Framework for Internal Navigation and Discovery" \ + "2B | FIND 3" "Framework for Internal Navigation and Discovery" \ " | Monitor Mode" "Patch firmware to enable monitor mode (ALPHA/DANGEROUS)" \ - "2B | Install HABApp" "Python 3 integration and rule engine for openHAB" \ + "2C | Install HABApp" "Python 3 integration and rule engine for openHAB" \ " | Remove HABApp" "Remove HABApp from this system" \ - "2C | Install EVCC" "Deploy Electric Vehicle Charge Controller" \ + "2D | Install EVCC" "Deploy Electric Vehicle Charge Controller" \ " | Remove EVCC" "Uninstall EVCC" \ " | Setup EVCC" "Setup EVCC from command line (German only)" \ 3>&1 1>&2 2>&3) @@ -134,21 +137,24 @@ show_main_menu() { if [ $RET -eq 1 ] || [ $RET -eq 255 ]; then return 0; fi wait_for_apt_to_finish_update case "$choice2" in - 21\ *) miflora_setup ;; - 22\ *) mqtt_setup ;; - 23\ *) influxdb_grafana_setup ;; - 24\ *) nodered_setup ;; - 25\ *) homegear_setup ;; - 26\ *) knxd_setup ;; - 27\ *) 1wire_setup ;; - 28\ *) deconz_setup ;; - 29\ *) zigbee2mqtt_setup "install";; + 21\ *) frontail_setup;; + *Add\ log\ to\ viewer*) custom_frontail_log "add";; + *Remove\ log\ from\ viewer*) custom_frontail_log "remove";; + 22\ *) miflora_setup ;; + 23\ *) mqtt_setup ;; + 24\ *) influxdb_grafana_setup ;; + 25\ *) nodered_setup ;; + 26\ *) homegear_setup ;; + 27\ *) knxd_setup ;; + 28\ *) 1wire_setup ;; + 29\ *) deconz_setup ;; + 2A\ *) zigbee2mqtt_setup "install";; *Remove\ Zigbee2MQTT*) zigbee2mqtt_setup "remove";; - 2A\ *) find3_setup ;; + 2B\ *) find3_setup ;; *Monitor\ Mode) setup_monitor_mode ;; - 2B\ *) habapp_setup "install";; + 2C\ *) habapp_setup "install";; *Remove\ HABApp*) habapp_setup "remove";; - 2C\ *) install_evcc "install";; + 2D\ *) install_evcc "install";; *Remove\ EVCC*) install_evcc "remove";; *Setup\ EVCC*) setup_evcc;; "") return 0 ;; diff --git a/functions/nodejs-apps.bash b/functions/nodejs-apps.bash index 229ee5d33..c6ebdca5c 100644 --- a/functions/nodejs-apps.bash +++ b/functions/nodejs-apps.bash @@ -1,7 +1,7 @@ #!/usr/bin/env bash # shellcheck disable=SC2181 -## Function for installing NodeJS for Node-RED and other addons. +## Function for installing NodeJS for frontail and other addons. ## ## nodejs_setup() ## @@ -54,6 +54,21 @@ nodejs_setup() { fi } +## Function for downloading frontail to current system +## +## frontail_download(String prefix) +## +frontail_download() { + echo -n "$(timestamp) [openHABian] Downloading frontail... " + if ! [[ -d "${1}/frontail" ]]; then + cond_echo "\\nFresh Installation... " + if cond_redirect git clone https://github.com/Interstellar0verdrive/frontail_AEM.git "${1}/frontail"; then echo "OK"; else echo "FAILED (git clone)"; return 1; fi + else + cond_echo "\\nUpdate... " + if cond_redirect update_git_repo "${1}/frontail" "master"; then echo "OK"; else echo "FAILED (update git repo)"; return 1; fi + fi +} + ## Function for removing frontail as its insecure and not maintained. ## ## frontail_remove() @@ -61,25 +76,122 @@ nodejs_setup() { frontail_remove() { local frontailBase local frontailDir="/opt/frontail" + local removeText="Frontail is a log viewer that is not maintained and has security issues. As of openHAB 4.3 there is a built in log viewer which replaces it.\\n\\nWould you like to remove it from your system? If not, be aware that it is not recommended to use it and is no longer a supported feature of openHABian." frontailBase="$(npm list -g | head -n 1)/node_modules/frontail" - if ! [[ $(openhab-cli info | grep "Version" | xargs | cut -d ' ' -f 2) =~ 4.[3-9]* ]]; then return 0; fi + if ! dpkg --compare-versions "$(sed -n 's/openhab-distro\s*: //p' /var/lib/openhab/etc/version.properties)" gt "4.3.0"; then return 0; fi + if [[ -z $INTERACTIVE ]]; then return 0; fi + if [[ -d $frontailBase ]] || [[ -d $frontailDir ]]; then - echo -n "$(timestamp) [openHABian] Removing openHAB Log Viewer frontail... " - if [[ $(systemctl is-active frontail.service) == "active" ]]; then - if ! cond_redirect systemctl stop frontail.service; then echo "FAILED (stop service)"; return 1; fi + if (whiptail --title "Frontail Removal" --yes-button "Remove" --no-button "Keep" --defaultyes --scrolltext --yesno "$removeText" 27 84); then + echo -n "$(timestamp) [openHABian] Removing openHAB Log Viewer frontail... " + if [[ $(systemctl is-active frontail.service) == "active" ]]; then + if ! cond_redirect systemctl stop frontail.service; then echo "FAILED (stop service)"; return 1; fi + fi + if ! cond_redirect systemctl disable frontail.service; then echo "FAILED (disable service)"; return 1; fi + cond_redirect npm uninstall -g frontail + rm -f /etc/systemd/system/frontail.service + rm -rf /var/log/frontail + rm -rf /opt/frontail + + if grep -qs "frontail-link" "/etc/openhab/services/runtime.cfg"; then + cond_redirect sed -i -e "/frontail-link/d" "/etc/openhab/services/runtime.cfg" + fi + if cond_redirect systemctl -q daemon-reload; then echo "OK"; else echo "FAILED (daemon-reload)"; return 1; fi fi + fi +} + +## Function for installing frontail to enable the openHAB log viewer web application. +## +## frontail_setup() +## +frontail_setup() { + local frontailBase + local frontailUser="frontail" + + if ! node_is_installed || is_armv6l; then + echo -n "$(timestamp) [openHABian] Installing Frontail prerequsites (NodeJS)... " + if cond_redirect nodejs_setup; then echo "OK"; else echo "FAILED"; return 1; fi + fi + + frontailBase="$(npm list -g | head -n 1)/node_modules/frontail" + + if ! (id -u ${frontailUser} &> /dev/null || cond_redirect useradd --groups "${username:-openhabian}",openhab -s /bin/bash -d /var/tmp ${frontailUser}); then echo "FAILED (adduser)"; return 1; fi + + echo -n "$(timestamp) [openHABian] Installing openHAB Log Viewer (frontail)... " + if [[ -d $frontailBase ]]; then + cond_echo "Removing any old installations... " cond_redirect npm uninstall -g frontail - rm -f /etc/systemd/system/frontail.service - rm -rf /var/log/frontail - rm -rf /opt/frontail + fi + + if ! cond_redirect frontail_download "/opt"; then echo "FAILED (download)"; return 1; fi + cd /opt/frontail || (echo "FAILED (cd)"; return 1) + # npm arguments explained: + # --omit=dev ignores the dev dependencies (we do not require them for production usage) + # Do NOT catch exit 1 for npm audit fix, because it's thrown when a vulnerability can't be fixed. Happens when a fix requires an upgrade to a new major release with possible breaking changes. + cond_redirect npm audit fix --omit=dev + if ! cond_redirect npm update --audit=false --omit=dev; then echo "FAILED (update)"; return 1; fi + if cond_redirect npm install --global --audit=false --omit=dev; then echo "OK"; else echo "FAILED (install)"; return 1; fi + + echo -n "$(timestamp) [openHABian] Setting up openHAB Log Viewer (frontail) service... " + if ! (sed -e "s|%FRONTAILBASE|${frontailBase}|g" "${BASEDIR:-/opt/openhabian}"/includes/frontail.service > /etc/systemd/system/frontail.service); then echo "FAILED (service file creation)"; return 1; fi + if ! cond_redirect chmod 644 /etc/systemd/system/frontail.service; then echo "FAILED (permissions)"; return 1; fi + if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi + if ! cond_redirect systemctl enable --now frontail.service; then echo "FAILED (enable service)"; return 1; fi + if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi # Restart the service to make the change visible + + if openhab_is_installed; then + dashboard_add_tile "frontail" + fi +} - if grep -qs "frontail-link" "/etc/openhab/services/runtime.cfg"; then - cond_redirect sed -i -e "/^frontail-link-*$/d" "/etc/openhab/services/runtime.cfg" +## Function for adding/removing a user specifed log to/from frontail +## +## custom_frontail_log() +## +custom_frontail_log() { + local frontailService="/etc/systemd/system/frontail.service" + local addLog + local removeLog + local array + + if ! [[ -f $frontailService ]]; then + if [[ -n $INTERACTIVE ]]; then whiptail --title "Frontail not installed" --msgbox "Frontail is not installed!\\n\\nCanceling operation!" 9 80; fi + return 0 + fi + + if [[ $1 == "add" ]]; then + if [[ -n $INTERACTIVE ]]; then + if ! addLog="$(whiptail --title "Enter file path" --inputbox "\\nEnter the path to the logfile that you would like to add to frontail:" 9 80 3>&1 1>&2 2>&3)"; then echo "CANCELED"; return 0; fi + else + if [[ -n $2 ]]; then addLog="$2"; else return 0; fi fi - if cond_redirect systemctl -q daemon-reload; then echo "OK"; else echo "FAILED (daemon-reload)"; return 1; fi + + for log in "${addLog[@]}"; do + if [[ -f $log ]]; then + echo -n "$(timestamp) [openHABian] Adding '${log}' to frontail... " + if ! cond_redirect sed -i -e "/^ExecStart/ s|$| ${log}|" "$frontailService"; then echo "FAILED (add log)"; return 1; fi + if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi + if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi + else + if [[ -n $INTERACTIVE ]]; then + whiptail --title "File does not exist" --msgbox "The specifed file path does not exist!\\n\\nCanceling operation!" 9 80 + return 0 + else + echo "$(timestamp) [openHABian] Adding '${log}' to frontail... FAILED (file does not exist)" + fi + fi + done + elif [[ $1 == "remove" ]] && [[ -n $INTERACTIVE ]]; then + readarray -t array < <(grep -e "^ExecStart.*$" "$frontailService" | awk '{for (i=12; i<=NF; i++) {printf "%s\n\n", $i}}') + ((count=${#array[@]} + 6)) + removeLog="$(whiptail --title "Select log to remove" --cancel-button Cancel --ok-button Select --menu "\\nPlease choose the log that you would like to remove from frontail:\\n" "$count" 80 0 "${array[@]}" 3>&1 1>&2 2>&3)" + if ! cond_redirect sed -i -e "s|${removeLog}||" -e '/^ExecStart/ s|[[:space:]]\+| |g' "$frontailService"; then echo "FAILED (remove log)"; return 1; fi + if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi + if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi fi } @@ -97,7 +209,7 @@ nodered_setup() { local temp if ! node_is_installed || is_armv6l; then - echo -n "$(timestamp) [openHABian] Installing Node-RED prerequsites (NodeJS)... " + echo -n "$(timestamp) [openHABian] Installing Frontail prerequsites (NodeJS)... " if cond_redirect nodejs_setup; then echo "OK"; else echo "FAILED"; return 1; fi fi if ! dpkg -s 'build-essential' &> /dev/null; then diff --git a/functions/nodejs-apps.bats b/functions/nodejs-apps.bats index e7c2eca9e..544869dc4 100644 --- a/functions/nodejs-apps.bats +++ b/functions/nodejs-apps.bats @@ -5,10 +5,27 @@ load helpers.bash setup_file() { export BASEDIR="${BATS_TEST_DIRNAME}/.." + mkdir -p /var/log/openhab + setfacl -R -m g::rwX /var/log/openhab } teardown_file() { unset BASEDIR + systemctl kill frontail.service || true +} + +@test "installation-frontail_install" { + echo -e "# ${COL_CYAN}$(timestamp) [openHABian] Frontail installation starting...${COL_DEF}" >&3 + run frontail_setup 3>&- + if [ "$status" -ne 0 ]; then echo "$output" >&3; fi + [ "$status" -eq 0 ] + echo -e "# ${COL_GREEN}$(timestamp) [openHABian] Frontail installation successful.${COL_DEF}" >&3 + + echo -e "# ${COL_CYAN}$(timestamp) [openHABian] Checking if Frontail service is running...${COL_DEF}" >&3 + run systemctl is-active --quiet frontail.service + if [ "$status" -ne 0 ]; then echo "$output" >&3; fi + [ "$status" -eq 0 ] + echo -e "# ${COL_GREEN}$(timestamp) [openHABian] Frontail service is running.${COL_DEF}" >&3 } @test "installation-zigbee2mqtt_install" { diff --git a/functions/openhab.bash b/functions/openhab.bash index 7f3a461f1..5159345c9 100644 --- a/functions/openhab.bash +++ b/functions/openhab.bash @@ -2,7 +2,7 @@ # shellcheck disable=SC2154 -## Generate systemd dependencies for zram and others to start together with OH +## Generate systemd dependencies for zram, Frontail and others to start together with OH ## This is done using /etc/systemd/system/openhab.service.d/override.conf ## ## create_systemd_dependencies() @@ -243,7 +243,7 @@ openhab_misc() { } ## Create a openHAB dashboard title and image for the input application. -## Valid arguments: "grafana", "nodered", "find", or "openhabiandocs" +## Valid arguments: "grafana", "frontail", "nodered", "find", or "openhabiandocs" ## ## dashboard_add_tile(String application) ## @@ -267,7 +267,7 @@ dashboard_add_tile() { echo -n "$(timestamp) [openHABian] Adding an openHAB dashboard tile for '${application}'... " case $application in - grafana|nodered|find3|openhabiandocs) + grafana|frontail|nodered|find3|openhabiandocs) true ;; *) echo "FAILED (tile name not valid)"; return 1 ;; diff --git a/includes/dashboard-imagedata b/includes/dashboard-imagedata index f86bedda2..7df6f3594 100644 --- a/includes/dashboard-imagedata +++ b/includes/dashboard-imagedata @@ -12,6 +12,10 @@ tile_desc_grafana="Grafana" tile_url_grafana="http://{HOSTNAME}:3000" tile_imagedata_grafana="data:image/png;base64,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" +tile_desc_frontail="openHAB Log Viewer" +tile_url_frontail="http://{HOSTNAME}:9001" +tile_imagedata_frontail="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAADZCAMAAABfN6j8AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABXFBMVEXd3d3g4ODJycm6urqpqamYmJiKiors7Oz19fV5eXlpaWnv9PH49vfX6fnW6frY6fnt2PHpx+/w4vPy6PPw4PLrzfC/6dDJ69ej47y258mr5MLe8OXT7d242eXY6ezn7/Hg7O/J4uro7/Gp1OHC2+quwdOfr8Csv9G0yNuYqLi5zuLH3fLmue3iq+uZ4LV12JyH3Kn69vmXzNyIxth+wdah0d+f0N54v9SQn62EkZ58iJT39/fn8uvl7fWlt8iLmafp8PbM4/j26Ojv7+/319eU37Lg3994g4/3yMj4uLj6lpb5p6db0op82qFq1pT29/WfsMCRoK/p6elzfohHznyQ3q/g4N+Bjprn5+dh1I7x8fFOz4H18N/26Lb08un50k36xhP6xQ/27tT6yijxvxTWqxXMoxbDnBbmthS5lRexjhioiBiXexresRV8ZhuLchqegBn42nP5zTT///81J2MaAAAAAWJLR0RzQQk9zgAAAAd0SU1FB+UMChIuFC5vh7sAACcvSURBVHja7X37Y9rIsiYCHHSuGJtHMH5JMiACEn4FBi+JbQiJcybOw2dmz81mZvbsufheHiYOe+bu///DVlW3hCQEBj+C7KEMLXWrJYtCdFd/XV9XILCQhSxkIQvxjQjCSMmEGgJmhcCfXrx1ILC3wA4HsSgYDFonsHN4gSWQF/ghVG3QffxPKZ7qBc2Yr1BICAfDS4GlpaVAMCSY5eFAOGwqEPMBIRx+QjuQhOBIMLQUfgT6FWaXa68ZWloKLy2xNLwUehJcehJ8En4SCIUFKnwSCiwFl0JwFCpByRJoNgDJ0hKdsvQEVB2GE8MPv3mIiLNKhH7pTBy7liwFw09C4b88AT2imp+EnoByQcugrzCUh8IhIfQkDKWgSRRQqhCEk8KhJfwmUOmo6j+xekPBkKXeUMilXnwgn8BzCL9/UJkAz2EQ9RUM4jNJT68QRGVDEWgdH2hoNUCb2Ios4TmgdTgZSx+6gHojILOq9y/w0HH1hv4SdqmXmtwg67uCrA/DGgJ/1OEBZf0da2tZPQFPCATMEpRw8DGoNyJEWJs6m3r/Yqr3yb+5n14ugn1rtdmCy2QQPPYC40ySBycRfHjxswvTPsFu9S7921LoJlbU49DfNcKVOkPzQOrFltVse5/8JTyqXjRig+aDak8DtoZBsOUDrspe59jyjoP+lfuwHELU84GZG8AOMMS6QUr5C/bpzfrHEM/z3pLv2M4J8R12DpWEWH/q+7EHa3GhieBbU4dj9kGEoU4Dgqd6wSjg1gTqJMy0MRRUT9jMhK18kFULBoepVYe0G+Zn80vwKvNW4J1+GVP1OJbqLSPANN/4I2eVuvNmgf0clwScNXz+9N6L8LEde1Mq2A5R2RB7sE4wvzvzbGZx8O/UBfJMO4B8BHJnH9KhvgnXF4Txxx6f3Ooj2k+eqFPven8C9Y5+/EkFrp/0DPoRxlzizyQ3QOAWMrUEZjajFzKD3EC90phc1Eyj9Ce6Dkx9+R9QlpeXcbMizXSu78RSbywWj8ViCTEZS8Qgl4gnIYklk4mnmKaoMJZ6CpvV9Nra6tr6xmY0vSWKsqIoqrKtZCCVJVFSpCzklIwo5jIZFQ7mlIy6nYEdWcaa8KcquZwiQYmiiWJGYfcB49FIBMZMwkr+maYVirqBUlKgKCIIES5wu0GWEQUYqeB5QUgQIkCbGkaoQV/9Hofq3dlNpVDB8QRsUvHdp6jORCyR2onHkvH4TjKxC8U7ori+ube/f7Cxl36eTkdFWS5Xyj+WUSoVWc1VYFsu52RVymnVw8r/qJRzuVzlEMozZTpUoRoy1SpL0UwmGoGRPh/bwGhU0Wu6XjN0/cXLly8KKpTYhyWgRoKsg1y9AqoXwdOjYGgpBN9EcFog8fuqNxVD5cbEJGzoQYWnF5SdAAXDJoUJ5fDp3VjdSB9vHLOnNyOXZVnLZDKgRkhhF15KJqPISkaTQTCFcvjL5CCt5LBQwQOKJllPr0DWBeydFOv1et4o5ut1vWG8YscCQYaLgi7h4RVgiCkGQwHhiGFbggDfC+kc9uetUW/13lSgcVRnqq9cU0FtLi83l1lSWra1vbODWfMXX7VUTKShvHrgPZsf1fsKRJKyUvYVqBczr7IPVsuWepMkbAcS0Up4muRVRHHzePMYXpu4J4oK/+iS6DbZFElCo4w2eERRmY0Gb1WhQ1issKbFmh6IqKVSs1mCv6YGb9wFUUdaBqvg9RvxNcgpbJng/cEdzluzTvXG4rtomiXBcognk/HYbgJttSR0aalUAiyHmJjYhTQOlkP67cHewZppOWSgk4LeKgfvshLN5LADAxHFqpzD7q4MGzmnwfEy1sTeDs0IPE2ukuWAqoJeSyDD4K8rdV2vF5r1Yv2nRr2gFwuF+jNjG3qsQJBPlQbJWmB74ruzs9P3799/gBfYGDBMOt7f/7j/6fxg3pp1qjce342j9ZAAFUIS3038jUxh2I2zwtjuDthooN6ttwef1tJv01HLMKuUD8vVSqUC+iTrq4pmAWSqaIXlYAO2GWgbslXTMINNNZcDy8FlmIkn9dqLhm7oPzd+aTTqelHXG3oeDIgIgf2WfcZnBkC9H85QuUy9cIXN/XO4v/1P89asU72JJJhdyQTsJBKUg8YACmBcgY0C28ONKG5tbsGPT9yUWOOwrdDIQsUhhLqdVVR4qdK2SiMIBQ7TAT6eULJKFccTVF+FMciwcYhw/4ITzagbRaOoySXNKMkyDC60ksqrgFVGwwrrHPHNKQg0Daenb6gE7+/4OL25OW/NOtX7fWSK8bG04iGz9m3Pv+/HGis+tBwek3wP9c4I6Xg9vROvHn0e9cvT6hYbpBNzQDoxBumI1CAnabgMSRKOpbc21tPwxwfF0IrCAACaVUnNgHIgo2KOwB4JWljcSNgiyxk1i8cgJ8sqjB7goGgbFLOWU1gxirJmNI2SVi9oWhHa35LWVAnZiZhT5ALBOLgfhZvZWNtY34SzofF9ffbuzdm7MzQn5q1Zl3p3dlNxBunECdJBy4EgnThCOrEUwhJxE9L5NDTMZIbUMEhHktFIQGtBknJaOVf5sVLOVaGKbEI6Vaz8Y1mujoF0/qfys96oPSvp9drff6rperGu1xpFNXIkeiI7z9fOP55/PPj39ec4zX10dvbh3fv3zI7wgwwNs1gcMR0weVMIQMYQkESUJ0FITxyfZNpHu3dvfS+9ubYJ6oVnFKzYHFm65WpV1jRmBWc0MMwUsobB0s2h5cuqaGShQQHmMzKoV6EhQoD5t6NhVgBLDOyxgp6v6/kCGGZ6nSE7Q+dCQnYI5ImmD9a23q69TT9H2Ec8PQMFn30AeTdvzTrVO70cW904joxw4DXL2diC2GXEJlCbTaPpFlstf0Fi14gPLYdsliMNsIOwDkIQ876nm4oP1WuCZSTzvplbyhDS4e/hxi7mEdweg0jHiJng2wvsZZaYKtFu1ixTh7qShmepbg2qzdLycrOpNZdRsuNvnQ/eIsOs/xBhG6Szg7iCmIw/dUE6OE9BWE48xiGdvYO1zxt7W8xyUDQNOjIZJyKqShTtMEJ5CNLBOYmyJiuZHAE/OJmh4MxFuZxR4JxMDi0Hdh+BIJutCKzU9WJRz9cKhTpYZiv/iyZ8TE8shuWgg5UohMJhMiBw+g1sD3RwO4oEfTrXlrJDOnbDLL6DkM7OTiK2iyYEQjp7B/t762+5YZarVCo01wZGWE6x5toUFfEdPMIhnbLGsvCuMEgHzbcRw0xUn9XAHjPAPPvy05fCKJZDyFooKAbC4SUJvWvZXBsmgSMEzeatUk/1wiP6lNAcHFuINLZI4BxxEt+YIKiTxArpzfTm1vFx+ljc2sRhQSZHII0CzyYiOPhCGEfFeeIMe9GG7WTKOBGX2SZcByEdZncI5HKPqjkxisWioclG0SjoGlpkgkBzxcEAVYiwqWNRoAeX2gaaYg4y31x/NRA3+ilF3blodIrKfOe63or7ObB0OiznyEr8Jr5qqR6f3MHTe8cinaysrOB75eTERHROrj3L9uzShNO93uL0Ym974Q8Mr6cE6SB2k8AkibhOkgPt1CSnt1ah+U2bbW+WjFNJUdkcO02sSSpYXho0q5KUhSZXwhk5NYOzbhJVyGhomUl4gtn2mkSnXxXZKJVkGLmVisVSyShpON2msibWvFn05uGZN+9O4QV/7055w7uKeBOiTT4QO6RDcz8I6TxNxFPMMEvE+IxQakdMYoUUWQ77BwdrpuUgH5ZzhOiAYaCJMpgDZSjJiWIO9tE+kA8R0imXNTzE6lYqcq48hHQEshwY5iAodb2m10t6Qf/7T/rPCOnotSIiZh6QTjB4dHZ2xkGc92RjiJv7v3083//os8kgUCBiOolkPJVKJlOpnaTINYtAD5uAS8XRqgC7d+0z6HiLQzrlCqgT7F7Ql0wgThltYJxrQx0i3JODA2WCdAgpw9LMYRVBHdtUZsCEdOoM0qn/Anou1AnSKaIBYac1mRhQgECc9x/ef/jw/oys5+TxwcH62sHB23lr1qlea6iWtA3akmZiH8gds0luc9QGP3E2eGWDWPztszf/wxff4EuVzcEum58fGbWdlErQKJT4JHyJ7drGhm7q2RsQlpj3J9lhJ5+o1zciqScqvODvhPYonfdN3VT8p95HJTfBe61f3rHkPUpgVpHEdq0K5k40aj9rBBRTl0fkh+Vrfus+aQpGZWg5QL+VYg6oKUyoa4NODs2HJJumQEgiRV3b3vreujlbwUfEMo6O1ajKxr8ZDSwHxHIyWjWDKA/syTh4ZmPjalmhETOfrRCZ+zSNef+6kq/ni/lmQS7W9GIRXR6MYmlFIHZphMbHQoSgB5SIuHoA8vYgHQ1gDjq61x8+4HzF2bw161TvWEgHC5PxnXgiscvn2rb2Pu2/tSAd2QbpyATp/GiDdLj7dC73YznDPXR+rFju01UXpBOKiG/UZ7VGQ9f0Zy9eviQTQm808icS86IOuefaomvnvx38hnNtAV/PtbGZYjYfTDkYYDD3aUiwEH10qDi9tZ5Obx6vHkfTMKzQMvKhpjHnfpkeXIVy7InVEILMaBq8FRhmyJoiVwivZABQxnKfJhoNg3TA0gV7rF4sGPjsFuuFfFFmyA4xPYNBItygyw6esLWRPl5fXd0UI4hKvn6HcgYvn80U30J4Iztl5eusABUdp1mLiy+2M9mL2smU8RO4s7Ac7lV8qF60dIdCBrAHpDPpEY3eL+g0g7g8JJPcOZJ5SPLEKkwkRPKQhJZ3a3OLeUhm+O9Wley/ezS3MirHemCTxR1rwl5S+FmqzX3aXGZF1TT0y9GaTUOGcRtCOtx9etgs2FaseHP6mpwkT09f88L0Fv75zEPSDulAErMgnRRz8t1BF+B4iiaD3tohHXSRPszlylU5V8mIGsILUEKQDmI5CDMg6ADHsZx8SHKVCoITOblM/r3k08QgHXSCqiPKUKrn9b+/1Ot6sQ55Q2Xu0wFzeQiyHDB35HSfJkjn/OP5/m/+dJ8GzaYwsblPk2EGu0lypSbv9L2DjbQ5lUnu01XSWTmngZpzBONklCpCOuRKXQVtIt8KqkBJpVouH2plqCjzuTaBu+BY7tM13dDrDf2XRh0hHbB/zSk3B6Qz4j6NOo8cf9pf2zv45DP1Jk1yhSNBZgWSK8xDWJOYC5IJ6SiqmuFefJBmyYUvK3FPPtxs0wG2DztKDrLqtsSqWNyMiPV7PynJBU3WZMRysJmQobEgL50IqxUQhg0JJq/fvIYXJtzBD+7Kf9wK3wibrUDBSQvaTDFb4VPxn3ofldwFK3NUZrCLRs7PslniZT5ZTNz4B0uMv5YRj8BDMsnBHhoUM0b86jhGvOpmxGdmZMQX84ZRbBY16N0MIy8bmmaUVG9ivBAR03trbz/v7W2hp4Qonp69e32G4jcH1CEj3g3ppMhyiCXRfZoMs1FGfGUMI75KkE4VGfE/zsCIbzT0ElgOP/3EIJ1aIz+WGI/u0/te7tPv561Zp3odjPiknREf4z7UyUSSP71ORnzurhnxz2po7ubrRSQNMn78iTiGGB9N78HXvbGxFUWEh2be0PUfknlr1qneW8gdM+KXl2mgtox+knzH7ijp6eXkl0GwW3xoOUgeMu97uqn4UL3kmE6k+Afsls5lCkb8MJ9MjGPER8cx4nkFkxHPRVUkclPyZsRj21AyaCZ+AhWezR0NfaYFRszylw/1FIz4OPqWoGPvTmwiI167K0Z8LZ/X87X6M32I5XhQ4dlaOtzll9ynl4JHgl/dp+2M+KduSAcRs1hsx3Sf5ox4yzBDdvs1jHh5DCN+1H365Gdyn67rjcZLcp/OelPhA2HMiZb7dAiXKoJ9fz69Q7zXzYg3afH8ZTLit7wY8fhHjHja0HjDyYhXp2HEIwe+pBlysV464cd+HaHCRwIRG62C1O4Ehf0g9/FTmsaXerxIt6LC+0x81VI9PvGfeu9gPQf/DDKuZ8RbhckYDIqfkp/DXTDis25GPGt7BWUcI14k0jxB5pwRj/WRA/+OOPDv0K06Ikob62vraxvpeWvWpd4xjPinWIqLHIqx3fjubvw2jPhDWnSHWQ7VsZCONyN+DKTjAHFwvii5uf8R3af3561Zp3qvY8RTkkpNYsQfHl7PiJfHMeKH7tMzMeKPhhx45j4tHn/eS6+/3Vubt2ad6p1eZmTEu5rN2zPi/WV6TRb/dW0ikuAZYzvLtw8XevCleh8hYuZmxA/ZFOyIieswRrzowYh3m0OcNZEV+ZLUkDfpZuTPwzIejPihcMh3IjH+mMTMIc/idzvTwifq9WTEpyxIBxc5BJsiHhtlxGeIES+PZ8Tn7Iz4zLWMeGTCF0oFI/+lVsjrRr6Yr2uKwIjxgSExnuKXCNH1T5/29w/2ufs0+exAN/f+ve/dp9li3glWuIM4Tyy+OzMjvjIrI/7kGS5yqOn6i8YX7j5d81jkkKaFyH36/O35wf8euk+f+dN9mvykvRjxT2kJavShxg1nxG+OZ8QrN2TER0xGfF4v5o28ASOKvGbA01s0NEnkpHkbMZ6y4nF665goojRv/Obd6SnjaL6et2ad6p1FojMci0ZdxdMx4klWVn5Y+eG6AACehPwjn7hQ+9ByeExy/+qdFV+RmHvZjIx4xz+Mis99surhKCM+4WTEJ4gRz/gsBO/cgBEv3owRnydGvFwaZcRHHhcjPhnf2RFtxKupGfFoRcgc0rkDRnzABekEg+g+/ZAY8QkvRnyML0Ed4ytBrR0gIz46nhGv3QEjvuZkxGcnMeI/jDDiP89bs071WqM2+5iNTcyLd8SIF22MeGksI15tEiNe4yvUM0b8K9sdezDif0dOvHV/C0b8JFEZNYjR4lV6LxjxC/GSG+G9x9bepFHCOEa8c38U72Us+CbnY+LOD5MgHc+L+EWmY8QnkRKErjoc0pmBEZ+ZwIjPeDDiAzMy4tMPiREfG8eI391NJHZiYF1MYMRXpmXEVyYw4iOqziCdnxs2Rrz65vEx4mMWIz5BjHgeUGwCIz5jMeIzd8aIL4ww4gPXMeLfPT5G/NSVh0i6t5xgc/vD9Iz4qJX4UPxoOVjGs8i/Ot/2XNeKH9X7iGSh3nuVhXrvVRbqvVdZqPdeZaHeexVSb2Qh9yCWehdyX7JQ72Qx1z0RHCFIiFA3PMZjfXucvlCvt9BCPQLiSAgdIdiBG7sHtyvHUSmONZmXWajXWyI4+RcR//prgEiLEUamYxoN8GlUR45HRMvSrKGl1YV6pxbETW3OAKIzx6u4zlmod0Y5mpAbFVLv0ULuXobq/cf/Wcidyz9M9f7zP1oLuWu5+I9/cvX+539dLOTO5b/+065eU+kXo4k9D5s2pK12i+1d0M7FRYtdEw9dtM0sntNusyPtlvO/m2fx8vbwf5nHWu4zWs5cmxfxc1rs39tuht9xy3kuZdveN3N/6u10e51u57LV7l52W63uZa990bnsttuXne5l+7LX6Vy0IbnsXlz0+r2v/atvV51Wp9O66F12O4P+ZfcSDsJ5nR682i1IsXLr4qrbgyNQ2uvB6R24WIe2A/OsbgcV1foKZ0C+0+nDkX67dTnAunADF5edy0EfN/1uq41XwL9W66rXv7zo9+HO+1dwxgDqdgfw1+nijXYHg4u2dY0W/hu4CcgP+nDP7X63P+hADsq7dDN4V5DcpYbd6u2DdjuXbbjFS/i38BEHeHPtbq+LH63Txrvu9kC9X//vt2/f/vWvLqq31bvsgwz6vW6/N2iD2r/1e/AhQP1XV986g6+Xvf7V1R/9Xq+Lm+430HfvW79vnQXXaIMCoDIUXF11+n04s92+6n/rwpnfOqC9qz6ot3/Vv2x1en26LlSA6t3LPnzHF334l/3eVb/7la5w1RrA7V1dXbBrfIVrtDpw9hXeCBzoXYJ6O/j/4GZAz1d4M72rXqff69+Heo9QvS14REGX8BzB5uICcvAlY4E9aWOFC/ja4VnpdED/UBO+EspeQjrAp6sP1QaX9IR24LSL9gAf5MsOnQK/jU4bv8Q2luFZnUv6YXawHK+BCehsAA8dnoiPLZTiBtqPFpRdDq7wiaerX14O8DZxD35jbbxa96qFz8XgEq/RYddo0X9vs7vCj9fB3cs2XKM9GAzaeDG8yh0/vUdD9V7b8rSuyVvtV8t1vGXf4833xWi1YcvrvpSrzYV2mo65zjRbWLP1trXKFxf28tbwBHZDrWFHcYfaHVGv/UNZG2eX4NauqQ7r811cuM9qmR8V1NJ2qQoK2w4t2TuZFvWfLd6LPjxxqhfad+jMoAvANg07F2wWoZu7NDuHPuY69OvvYh/Bu4oO/hZ7XepuoPXCfqeHxdiB9aEIfoxd1h/1ev0u9Z/YP0GPd0mbPnVzWBn7FrxsH5sHaEahA+31+3904YbmrarbqJd1bdDwdwdfsa3H7uGP3gA7gj+62Jd8/dYb9LrQR8DH/fYVPvlVH3R11e3DbucKmizoXKDmZRt6iD/gCtB/9HHztY9fyhX0X9CJQM/S6f3xBxzDTgn7MVAgmB/9r9Db0E7/G6of6g3wCOj2Ww+6on/hNzFvVd1MvQ7LARv9Xp/6C9wfoEnWH/QGrFtC8wh6jwHrfKAz6FBX1GHHBt1eG8+gY9BbUEfVvaS+B/ux1mBA/SI8nT3odaCHa1NHR6d38F/xy16yyw46ZMbAqXi99gNtHEZGbfZ23t4htC5cTaR9Oyqukca4ChfDCiMFd27lf3fxUO9C7k4s9f7+3/9vIXcu//27CUj+/s9/WPJP2/53yf/DVTCm3rDc+4jvyn+38N7HILOStGevfxMW+KNRrz9lod57lYV671UW6r1XWaj3XmWh3nuVhQPqvYml3oXclyzUO0HoAWSLBiPnE4VHhcJcgHIiL+UrCotOXuNCvePE7lYaDPB4A7YFURy5gFkzEuGcZyYL9Y4TvmxdgNZfjARE0m8gwnVt5nBlRmRDB9l6wkEe98y8yEK9M8i1EV1GKizUe6/iQ/VmX71iiyLTZpjyYtyyzLxvdAqZNiSTlfCQTLQclBWSKSo6QjKx9QR4iFxrqSeMr8IXBlD5euC4Mjhbx4V+Vgj5RdRmUyvRur0GhmVaZov4arTg97J9we/l0QWMrN+m4AzPhH27wOPszke9E0MyxeCYmBgbkonWox+GZJI9QjLh2vSHFHsQkzEhmTDiUmClWH9Rq+d1HdeHy9fzdb1eN5qYwguX9q0XdFxEQ9d+dYdrYj0Nxg8Kh0O0fAktRCuKoeBSKCzQP5mTeu0hmWKJlC0k0w6ku7i3E+er8GFIplXb+r0UL+HQIyQTlJWt9XtHQjIdjgnJ9OVLrVH7oqNmaw290HjZKDSNeqPx5Uvjpa7n4a3X9MKXoiS6V4AxwzWFlpbC+OHY2n2Ro2CI1CtGgrdQ1a3Uy0IyJewhmRIsGlOS4jIlcC8hjoZkUtwhmXDtXonv87V8FXXbCsl0OAzJlHWGZGIGzUlRLxoYlQnjgciGVpINXLGoZBhyoYD5IpTCxihJojWe5+GaIla4poD5mLLwsXa2zlzUewdyNyuuSMoPIzFtPIpA+Al+WavXS3xoOTwmuVf13uhxliY8qF5y5GY/RX20cNH1IZkSVMiX4IqxhbZWeUimTQzJRMaoGZJJVHnODMm0bQ/JJLGQTCqGZJLcIZlEti6vYhQ1HpIpX3KGZIqgsYjts8BW6qSQTLh+L66shUtrWSGZNtb9HZKJrd9LIZl2wKDYxRhCYE7s7NwuJFO5XC3TQnJmSCbROyRTfTQkU3a6kEzZhxaSKcWiMcXIBE7RIocb9pBMVTMkUxlDMuVcIZlo/d6qGZLpUGYWGlrEFJJJnBCSqVDX88P1e8WgV0gmcTQk08Hb9Prnvb15a9ap3unFFpJJGg3J5ByqSh4hmZwhdz1CMpWMZskVksm2ROciJNPtJJt9laWwTAxdeCjwgqf4UL2PPCSTPXWJGZJJ8grJ5JbscJlCCsmUtbUItoDbHiGZCMTBZJkFZLo+JJN1EQzJJPo6JBP0arh+rz0kU2wnzo7EzJBMb1lIJjS/MigI1mg5FpJJy2iaHB2GZJIxJJPGQzIpGg/JhMujjg/J1CwY+Re1QvEZBrUpaGz93mBEcIRkErxCMr32cUimmCskU4JBOqndeDwRI8ttQkimyv2FZBpFb3hIpucPKCRTjIVkig1DMiXYqr1JKyRTjEIybaUdIZlwKV4ekokHYaKQTNsTQjIp7pBMgj0kU94MySQXbSGZBK+QTJurW8erFJJJoJBM706tICE+kDsMyRSdbiwqTbqG6AjJNBR2kid4A/92yv88B/Gh5fCY5M4Dit1aJJXFYrIiM60oZngms4BtHkIwizEhmVg0JsTUk9DoIs7DYuTxcHjU/PK2l5tfZkgmriIVW2UVjVjYSOK2KyRTZmxIpm2FxWIqaVq+YLC4K2CdFQslPpSDrcyGcuPjNPE5oQhvpUWCKGgg/Z2HfJ4hmRL2kEypHejsdnd2hpCOKyRTtZwrV1lIpgyGZJIhx0My0fr+8qF8CHuukExUywzJJNpDMhV+ednQn72o1TF4UA2Shl78Ia/rtRe6/oter9d0vVDQ6w1DFTxDbwcDYgAn24JHEbioSFN4gaXwE5prm5d647FhSKZEwh6SCYt3Umj9wjF7SKbnZkimshWSCSNq58aGZMpZIZmqmbIVkonhi7aQTF9qOJtWLxQLddBkUa/VCloR9dto1CD/AvSu14s1gwXQtMdpEjAwAKoXtBsKso8XQZxHCIdpru17dzUTQzKNRGMiwQGbNF1IJorlbIVkopcis0JRGhOS6cQosDhMLCRTE1sHoyDDpmkYTTNOE26GZ0bccZoiEZfDzPefg3eq1z+C8ZhOzHhMFJDpZFTUk1evbv+v7l18qN4pxbe2rl1uhPdK1t61IZnG5K8PyWQGBGGbWSEzv0BsrpBMT1lIJtGcrcCQTGz2IvY3G6QzJiSTjCGZtinYEnRYuQzBPTkWkknxCMmkyFZQm5GQTHkKyWTYQjJFeEimiBmSCXNHp2fvrCBM0AQLOFvx6fPBwca8NetSb3w3NQbSIdedVDKxC8Vsru3T/ueNvWtCMmXtIZmq3iGZDj1CMiloIegl/ecX9pBM2TEhmWwgznuqEtnc/7i//8lvc20jIZmSVkimWIINORDgecpCMq1uHZszxRm5jCGZMq6QTBkWRIyFZIK3TNHj5elCMtVtIZnqhcLYkEwBgYIwneEfzRTDEWljfTO9sbo6b8061XsLma2hu24sC21vadktE0IyWWLiPX7q8x6u5fAgxIfqfcWikJ7YwpFOfOIdT6vP/M1cHpLkJG16SCZZAoVJ020SN1ub6c3jrU3TQ5L/bnH0NdQC2m4KG5DRBl/KcMJe4WdlRZuHJDsUUUtas6nBX9OQmxzQ4eiNdb5tXe3jra0tjM7Hcm9OX4unr09BXs9bs071cvdpE9KJOSAdtMnIfZpBOm8/2SAddAip5nKHVTlXzoiZQxlzDNJB9xyEGbTcIRQi7AB18WClQuCEzCAdcQjpQO+0UkfHkVI9/+zvL/W6XqzX6zqiN+gpHTADbZPlgLnoxvn5b799+ph+DlkB7YhTnAny3WQQd5/mkE7c5j6NkA75VMcx2jZ5p+8dbKTf2iCdSpV0VgZdl6tohqH7NLrmoGM1+vGA+YbQTqUCJZXDcuVQKyOmk7MhZgFzrq1ee1HTDb3eAAutjl46NT3P0Bs7OMY9pZ+v7x/A63yVzbW9QzMNles39SZNcoUjwYbBFMa0MLkVosmtULc1aBwl8sjjHnrsTbksFkKG8pTmsC1FFAhr2bkVHIY5KckFzdBkjLMNiSZrWom8dKgKOvgPA3LAVoKb2KSZeDr7Ncgb+Hvtj5l4/3Vt0nA+wpqvOHHU8Fn3NUn8p95HJbdS770AJ1k2N7xM6YpfsJkbim1QHHe4T8eZ+3SSIhTzwlgqBZvV9NoGjDo3NmF4zCAddVuFQbGKCI1EvtIw3EVIJ4OslZySUVUWxxjJK8RgkXOKWcuCdATW9gorxbqmFYq6IRuGUUKTgdwbmKAbD8uIQigYwhzNoUUYxfooMieKyvXq3TEhnaejkE4yHt8hSMd0n94/GEI6aDmY7tNqDkwF8r9RpZxWrRKkA7bEYQ7dp8mBhxOvysx9OjrqPg2Wgl4zdB0hnYIa8ZxPCwVBveElCp1ERUIU4R74Jr43c21K9abo6aUY8fTMxm2QTuxpCoNt04ue3tWN9PHGMXt6MziThv7SYJuhE5mGL4R0coqmEVFQQ+8yGeEdqMEsNJkBQJpkc/4Hwwrv5iQPlm7eKOZxKtM4GR4j32l6VAWsGaSnl4XyEuB7CZFZJ/pKu7fv2qTrQRpnfeWaCipjtpJ/ZGkqLMfH4quWionNrffh+k1z8aN6GeUdPdQfk/u0NyOejdSsUZzoyYgXnYx4Jngk6mLEc1EVy7XazoinHbVkzsBrJeaVg5DO7+4bt5oKGJ85x2nHx3SH89asU70TGfFgOcQYIz7mxYiXh4x4ZQwjXhvDiBftjHi0Av66Utef1QvNerHwUwPJ74VCoW5su8nvyBPCPXSYtkAcZMSLx/v7v+1/Ov88b8061TuREY/uOcxVJzXCiJdnYsQfMhfqsYz4I4J0GjoaZrVG42eaa/tlPKQjvrM5TPO5tvPPB5/OfTbXRmBuwsGITzJG/DAhTvwtGfEZkxG/PcKI55COhlNsRhFBnaJGgwvNIr8LjPzOHPOIQv+GwF2O8NIVtqBlSG9uzluzTvXem8w69eXJKZ7Yt3l4Vftlvs2HlsNjku+h3tkepVmfXicB3mdgpcvPIfk3JyNetDHixVhyCkY8OURajPisxYiXJjPi0UMn8oYgHRsjHnZcjPgI/REjnq0+srWxvrGxvr7J0XQ7P94HMh0jPokmQ2w3tRu/M0Z8bgyk8+soI/4XYsR7IzvRtfOP5x8//fsqzrUFbPx4n00GTWTEJ+KcD+9gxEc9GPGyjRGfYYx4bRIjPnpbRnz6YG0LzPB0VEB3fwc/3gdy54z4oUiOjblDLci1jPjmghF/X2Jjwr966MiOL9X7SBnx10jSmxFPdpGH8ZVl5RYLMyuJUc6flIY/di9GvAn4mtT4iYz4EQ483p9PEB0vRvzTUUY8WQ5JtClSYxjxmpMRzyAdeZQRr03JiC8VjPyXWiGvM0a8whjxv6KTqoMRf3T64ewUezLkwMOAGd2nD84PDj75bLGXlB3ScTPikdeWIC+dnQmM+B+vZ8RXrmfEq5wR/8zOiFc5pGNnxDP3aQ9I57cD/0E6ExnxBPgkwWATEzMw4pVZGPERByO+wBnxGmfEq6yKByP+DdHfOQeewJ50+nhzNe2zhbZmkShbXsTKUcrEUcu+sfYlUYxOorCfLC83XdSV5SmoK0fO/+IT+f/wqErjSYwMPAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0xMi0xMFQxODo0NTo0NCswMDowMGw4VPIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMTItMTBUMTg6NDU6NDQrMDA6MDAdZexOAAAAAElFTkSuQmCC" + tile_desc_nodered="Node-RED" tile_url_nodered="http://{HOSTNAME}:1880" tile_imagedata_nodered="data:image/png;base64,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" diff --git a/includes/frontail.service b/includes/frontail.service new file mode 100644 index 000000000..ecfaceb64 --- /dev/null +++ b/includes/frontail.service @@ -0,0 +1,18 @@ +[Unit] +Description=Frontail openHAB instance, reachable at http://%H:9001 +Documentation=https://github.com/mthenw/frontail +After=openhab.service +PartOf=openhab.service + +[Service] +Type=simple +ExecStart=%FRONTAILBASE/bin/frontail --disable-usage-stats --ui-highlight --ui-highlight-preset %FRONTAILBASE/preset/openhab_AEM.json --theme openhab_AEM --lines 2000 --number 200 /var/log/openhab/openhab.log /var/log/openhab/events.log +Restart=always +User=frontail +Group=openhab +Environment=PATH=/usr/local/bin:/usr/bin/ +Environment=NODE_ENV=production +WorkingDirectory=/usr/bin/ + +[Install] +WantedBy=multi-user.target diff --git a/includes/openhab-override.conf b/includes/openhab-override.conf index 68cd6d534..04127d683 100644 --- a/includes/openhab-override.conf +++ b/includes/openhab-override.conf @@ -1,6 +1,6 @@ [Unit] -Wants=homegear.service -Before=homegear.service +Wants=frontail.service homegear.service +Before=frontail.service homegear.service [Service] UMask=0002 diff --git a/openhabian-setup.sh b/openhabian-setup.sh index 4ec7e131d..6c6ff823d 100755 --- a/openhabian-setup.sh +++ b/openhabian-setup.sh @@ -133,7 +133,7 @@ else zram_is_installed && init_zram_mounts "autoupdate" && echo "zram_reset=done" >> /etc/openhabian.conf # update zram to fix potential issues jsscripting_npm_check "openhab" jsscripting_npm_check "openhab_rules_tools" - #frontail_remove # remove old frontail service if present can be removed in future + frontail_remove while show_main_menu; do true done