From 81cdda7deff73f184646cbbb8bd4dec72ac7cb19 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 22 Dec 2021 16:15:48 -0500 Subject: [PATCH 001/122] Add Mosquitto and Mosquittopp library detection --- CMakeLists.txt | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6337e50c2..75bff3aec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -432,8 +432,28 @@ if(NOT ZM_NO_PRCE) endif() endif() +if(NOT ZM_NO_MQTT) + find_package(Mosquitto) + if(MOSQUITTO_FOUND) + include_directories(${MOSQUITTO_INCLUDE_DIRS}) + list(APPEND ZM_BIN_LIBS "${MOSQUITTO_LIBRARIES}") + set(optlibsfound "${optlibsfound} Mosquitto") + else() + set(optlibsnotfound "${optlibsnotfound} Mosquitto") + endif (MOSQUITTO_FOUND) + + find_package(Mosquittopp) + if(MOSQUITTOPP_FOUND) + include_directories(${MOSQUITTOPP_INCLUDE_DIRS}) + list(APPEND ZM_BIN_LIBS "${MOSQUITTOPP_LIBRARIES}") + set(optlibsfound "${optlibsfound} Mosquittopp") + else() + set(optlibsnotfound "${optlibsnotfound} Mosquittopp") + endif (MOSQUITTOPP_FOUND) +endif() + # mysqlclient (using find_library and find_path) -find_library(MYSQLCLIENT_LIBRARIES mysqlclient PATH_SUFFIXES mysql) + find_library(MYSQLCLIENT_LIBRARIES mysqlclient PATH_SUFFIXES mysql) if(MYSQLCLIENT_LIBRARIES) set(HAVE_LIBMYSQLCLIENT 1) list(APPEND ZM_BIN_LIBS "${MYSQLCLIENT_LIBRARIES}") From 0ee14cb71254910af9bfa54fe23673688f871423 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 22 Dec 2021 16:17:10 -0500 Subject: [PATCH 002/122] Add find routines for Mosquitto and Mosquittopp. Shamelessl ripped from https://github.com/devicehubnet/devicehub_cpp --- cmake/Modules/FindMosquitto.cmake | 28 ++++++++++++++++++++++++++++ cmake/Modules/FindMosquittopp.cmake | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 cmake/Modules/FindMosquitto.cmake create mode 100644 cmake/Modules/FindMosquittopp.cmake diff --git a/cmake/Modules/FindMosquitto.cmake b/cmake/Modules/FindMosquitto.cmake new file mode 100644 index 000000000..ad9acd261 --- /dev/null +++ b/cmake/Modules/FindMosquitto.cmake @@ -0,0 +1,28 @@ +# - Find libmosquitto +# Find the native libmosquitto includes and libraries +# +# MOSQUITTO_INCLUDE_DIR - where to find mosquitto.h, etc. +# MOSQUITTO_LIBRARIES - List of libraries when using libmosquitto. +# MOSQUITTO_FOUND - True if libmosquitto found. + +if(MOSQUITTO_INCLUDE_DIR) + # Already in cache, be silent + set(MOSQUITTO_FIND_QUIETLY TRUE) +endif(MOSQUITTO_INCLUDE_DIR) + +find_path(MOSQUITTO_INCLUDE_DIR mosquitto.h) + +find_library(MOSQUITTO_LIBRARY NAMES libmosquitto mosquitto) + +# Handle the QUIETLY and REQUIRED arguments and set MOSQUITTO_FOUND to TRUE if +# all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MOSQUITTO DEFAULT_MSG MOSQUITTO_LIBRARY MOSQUITTO_INCLUDE_DIR) + +if(MOSQUITTO_FOUND) + set(MOSQUITTO_LIBRARIES ${MOSQUITTO_LIBRARY}) +else(MOSQUITTO_FOUND) + set(MOSQUITTO_LIBRARIES) +endif(MOSQUITTO_FOUND) + +mark_as_advanced(MOSQUITTO_INCLUDE_DIR MOSQUITTO_LIBRARY) diff --git a/cmake/Modules/FindMosquittopp.cmake b/cmake/Modules/FindMosquittopp.cmake new file mode 100644 index 000000000..49ac23e48 --- /dev/null +++ b/cmake/Modules/FindMosquittopp.cmake @@ -0,0 +1,28 @@ +# - Find libmosquitto +# Find the native libmosquitto includes and libraries +# +# MOSQUITTOPP_INCLUDE_DIR - where to find mosquitto.h, etc. +# MOSQUITTOPP_LIBRARIES - List of libraries when using libmosquitto. +# MOSQUITTOPP_FOUND - True if libmosquitto found. + +if(MOSQUITTOPP_INCLUDE_DIR) + # Already in cache, be silent + set(MOSQUITTOPP_FIND_QUIETLY TRUE) +endif(MOSQUITTOPP_INCLUDE_DIR) + +find_path(MOSQUITTOPP_INCLUDE_DIR mosquitto.h) + +find_library(MOSQUITTOPP_LIBRARY NAMES libmosquittopp mosquittopp) + +# Handle the QUIETLY and REQUIRED arguments and set MOSQUITTO_FOUND to TRUE if +# all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MOSQUITTOPP DEFAULT_MSG MOSQUITTOPP_LIBRARY MOSQUITTOPP_INCLUDE_DIR) + +if(MOSQUITTOPP_FOUND) + set(MOSQUITTOPP_LIBRARIES ${MOSQUITTOPP_LIBRARY}) +else(MOSQUITTOPP_FOUND) + set(MOSQUITTOPP_LIBRARIES) +endif(MOSQUITTOPP_FOUND) + +mark_as_advanced(MOSQUITTOPP_INCLUDE_DIR MOSQUITTOPP_LIBRARY) From 47d2c090ada79c72422ddba8bbade7b9d2975eb8 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 22 Dec 2021 16:18:03 -0500 Subject: [PATCH 003/122] Add zm_mqtt.cpp etc --- src/CMakeLists.txt | 1 + src/zm_mqtt.cpp | 123 +++++++++++++++++++++++++++++++++++++++++++++ src/zm_mqtt.h | 46 +++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 src/zm_mqtt.cpp create mode 100644 src/zm_mqtt.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6943a102a..aca51b776 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -37,6 +37,7 @@ set(ZM_BIN_SRC_FILES zm_monitor_janus.cpp zm_monitor_amcrest.cpp zm_monitorstream.cpp + zm_mqtt.cpp zm_ffmpeg.cpp zm_ffmpeg_camera.cpp zm_ffmpeg_input.cpp diff --git a/src/zm_mqtt.cpp b/src/zm_mqtt.cpp new file mode 100644 index 000000000..0904e8207 --- /dev/null +++ b/src/zm_mqtt.cpp @@ -0,0 +1,123 @@ +#include "zm.h" +#include "zm_logger.h" +#include "zm_mqtt.h" +#include "zm_time.h" + +#include +#include + +MQTT::MQTT(Monitor *monitor) : + mosquittopp(), + monitor_(monitor), + connected_(false) +{ + mosqpp::lib_init(); +} + +void MQTT::connect(const char * hostname, unsigned int port, unsigned int keepalive) { + mosqpp::mosquittopp::connect(hostname, port, keepalive); + loop_start(); +} + +void MQTT::autoconfigure() { +} + +void MQTT::disconnect() { +} + +void MQTT::on_connect(int rc) { + Debug(1, "Connected with rc %d", rc); + if (rc == 0) connected_ = true; +} + +void MQTT::on_message(const struct mosquitto_message *message) { +} + +void MQTT::on_subscribe(int mid, int qos_count, const int *granted_qos) { + Debug(1, "Subscribed to topic "); +} + +void MQTT::on_publish() { +} + +void MQTT::send() { + while (!connected_) { std::this_thread::sleep_for(Seconds(1)); } + + for (auto outer_iter=sensorList.begin(); outer_iter!=sensorList.end(); ++outer_iter) { + for (auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter) { + Debug(1, "%s %ld %f", outer_iter->first.c_str(), inner_iter->first.count(), inner_iter->second); + int mid; + std::stringstream mqtt_topic; + std::stringstream mqtt_payload; + mqtt_topic << "/a/"; + mqtt_topic << api_key; + mqtt_topic << "/p/"; + mqtt_topic << project_id; + mqtt_topic << "/device/" << device_id; + mqtt_topic << "/sensor/" << outer_iter->first; + mqtt_topic << "/data"; + + mqtt_payload << "{ \"value\":"<second<<" }"; + + const std::string mqtt_topic_string = mqtt_topic.str(); + const std::string mqtt_payload_string = mqtt_payload.str(); + Debug(1, "DEBUG: MQTT TOPIC: %s", mqtt_topic_string.c_str()); + publish(&mid, mqtt_topic_string.c_str(), mqtt_payload_string.length(), mqtt_payload_string.c_str(), 0, true); + + auto this_iter = inner_iter; + inner_iter++; + + outer_iter->second.erase(this_iter); + if (inner_iter == outer_iter->second.end()) { + break; + } + } // end foreach inner + } // end foreach outer +} + +void MQTT::addSensor(std::string name, std::string type) { + std::map valuesList; + sensorList.insert ( std::pair>(name, valuesList)); +} + +void MQTT::addActuator(std::string name, std::function f) { + int mid; + std::stringstream mqtt_topic; + + mqtt_topic << "/a/"; + mqtt_topic << api_key; + mqtt_topic << "/p/"; + mqtt_topic << project_id; + mqtt_topic << "/device/" << device_id; + mqtt_topic << "/actuator/" << name; + mqtt_topic << "/state"; + + subscribe(&mid, mqtt_topic.str().c_str()); +} + +void MQTT::addValue(std::string name, double value) { + sensorListIterator = sensorList.find(name); + Debug(1, "found sensor: %s", sensorListIterator->first.c_str()); + // if(it == sensorList.end()) { + // clog<<__FUNCTION__<<" Could not find coresponding sensor name"<(name, value)); + std::chrono::milliseconds ms = std::chrono::duration_cast< std::chrono::milliseconds >( + std::chrono::high_resolution_clock::now().time_since_epoch() + ); + sensorListIterator->second.insert(std::pair(ms, value)); +} + +void MQTT::listValues(const std::string &sensor_name) { + Debug(1, "%s", sensor_name.c_str()); + auto sensorListIterator = sensorList.find(sensor_name); + Debug(1, "found sensor: %s", sensorListIterator->first.c_str()); + for (auto inner_iter=sensorListIterator->second.begin(); inner_iter!=sensorListIterator->second.end(); ++inner_iter) { + std::cout << "ts: " << inner_iter->first.count() << ", value:" << inner_iter->second << std::endl; + } +} + +MQTT::~MQTT() { +} diff --git a/src/zm_mqtt.h b/src/zm_mqtt.h new file mode 100644 index 000000000..45bf5f6cc --- /dev/null +++ b/src/zm_mqtt.h @@ -0,0 +1,46 @@ +#ifndef ZM_MQTT_H +#define ZM_MQTT_H + +#include "mosquittopp.h" + +#include +#include +#include +#include +#include +#include +#include + +class Monitor; + +class MQTT : public mosqpp::mosquittopp { + public: + MQTT(Monitor *); + ~MQTT(); + void connect(const char * hostname = "mqtt.zoneminder.com", unsigned int port = 1883, unsigned int keepalive = 60); + void autoconfigure(); + void disconnect(); + void send(); + void addSensor(std::string name, std::string type); + void addActuator(std::string name, std::function f); + void addValue(std::string name, double value); + void listValues(const std::string &sensor_name); + void on_connect(int rc); + void on_message(const struct mosquitto_message *message); + void on_subscribe(int mid, int qos_count, const int *granted_qos); + void on_publish(); + enum sensorTypes { + NUMERIC = 0, + DIGITAL + }; + + private: + std::map> sensorList; + std::map>::iterator sensorListIterator; + std::map actuatorList; + + Monitor *monitor; + bool connected_; +}; + +#endif // ZM_MQTT_H From 4c09446f56b7324af83d707fe0f01ec84b30d46f Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 22 Dec 2021 16:18:42 -0500 Subject: [PATCH 004/122] Add an mqtt object to the Monitor object --- src/zm_monitor.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zm_monitor.h b/src/zm_monitor.h index bbd26a055..a7174c48c 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -28,6 +28,7 @@ #include "zm_event.h" #include "zm_fifo.h" #include "zm_image.h" +#include "zm_mqtt.h" #include "zm_packet.h" #include "zm_packetqueue.h" #include "zm_utils.h" @@ -492,6 +493,8 @@ protected: std::vector zones; + std::unique_ptr mqtt; + const unsigned char *privacy_bitmask; int n_linked_monitors; From d08cac052c955e0f9fe7b6fdb1f790483002b7c0 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 23 Dec 2021 11:07:26 -0500 Subject: [PATCH 005/122] Add MQTT settings to config --- .../lib/ZoneMinder/ConfigData.pm.in | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index dc50e8d64..1443e56c7 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -3834,6 +3834,46 @@ our @options = ( type => $types{string}, category => 'config', }, + { + name => 'MQTT_HOSTNAME', + default => 'mqtt.zoneminder.com', + description => 'MQTT broker hostname', + help => 'MQTT uses a central server to send/receive messages. This is the hostname or ip address of the server you wish to use.', + type => $types{hostname}, + category => 'MQTT', + }, + { + name => 'MQTT_PORT', + default => '1883', + description => 'MQTT broker port', + help => 'MQTT uses a central server to send/receive messages. This is the port to connect to.', + type => $types{integer}, + category => 'MQTT', + }, + { + name => 'MQTT_USERNAME', + default => '', + description => 'MQTT broker username', + help => 'MQTT uses a central server to send/receive messages. This is the username to authenticate with.', + type => $types{string}, + category => 'MQTT', + }, + { + name => 'MQTT_PASSWORD', + default => '', + description => 'MQTT broker password', + help => 'MQTT uses a central server to send/receive messages. This is the password to authenticate with.', + type => $types{password}, + category => 'MQTT', + }, + { + name => 'MQTT_TOPIC_PREFIX', + default => 'ZoneMinder', + description => 'MQTT topic prefix', + help => 'MQTT each message generated by ZoneMinder will start with this. For example /ZoneMinder/available.', + type => $types{string}, + category => 'MQTT', + }, ); our %options_hash = map { ( $_->{name}, $_ ) } @options; From 0397c4f7e8d156d77a9850cf594a479ed7c463e1 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Sun, 26 Dec 2021 15:20:43 -0500 Subject: [PATCH 006/122] Add MQTT_Enabled and MQTT_Subscriptions to Monitor object --- web/includes/Monitor.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 6793bf68d..efa131558 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -213,6 +213,8 @@ public static function getStatuses() { 'RTSPServer' => array('type'=>'boolean', 'default'=>0), 'RTSPStreamName' => '', 'Importance' => 'Normal', + 'MQTT_Enabled' => false, + 'MQTT_Subscriptions' => '', ); private $status_fields = array( 'Status' => null, From b23842021c6fcf66002002c634a7f781aef877e3 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 10:04:27 -0500 Subject: [PATCH 007/122] Add MQTT_Subscriptions to Monitors --- db/zm_create.sql.in | 1 + 1 file changed, 1 insertion(+) diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 92dc7a706..fbfdcbd69 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -556,6 +556,7 @@ CREATE TABLE `Monitors` ( `RTSPServer` BOOLEAN NOT NULL DEFAULT FALSE, `RTSPStreamName` varchar(255) NOT NULL default '', `Importance` enum('Normal','Less','Not') NOT NULL default 'Normal', + `MQTT_Subscriptions` varchar(255) default '', PRIMARY KEY (`Id`) ) ENGINE=@ZM_MYSQL_ENGINE@; From 67f765bc829a1424ee8c14d0808c161d229ee566 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 10:04:43 -0500 Subject: [PATCH 008/122] Add password as a config entry type --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 1443e56c7..7ecc5a471 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -162,6 +162,12 @@ our %types = ( pattern => qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, format => q( $1\@$2 ) }, + password => { + db_type => 'string', + hint => 'password', + pattern => qr|^(.+)$|, + format => q($1) + }, timezone => { db_type => 'string', hint => 'America/Toronto', From 4f29875609dc7256efc8b699405a97ae32508ec9 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:12:27 -0500 Subject: [PATCH 009/122] Fix password config type to be password in db --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 7ecc5a471..ec75fc358 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -163,7 +163,7 @@ our %types = ( format => q( $1\@$2 ) }, password => { - db_type => 'string', + db_type => 'password', hint => 'password', pattern => qr|^(.+)$|, format => q($1) From 5a2c1d71a710c9ab7446ca50c800d331f40d7fe6 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:14:08 -0500 Subject: [PATCH 010/122] Load mqtt subscriptions from db when loading monitor --- src/zm_monitor.cpp | 8 +++++--- src/zm_monitor.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index ac2cf8388..650194215 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -96,7 +96,7 @@ std::string load_monitor_sql = "`FPSReportInterval`, `RefBlendPerc`, `AlarmRefBlendPerc`, `TrackMotion`, `Exif`," "`RTSPServer`, `RTSPStreamName`," "`ONVIF_URL`, `ONVIF_Username`, `ONVIF_Password`, `ONVIF_Options`, `ONVIF_Event_Listener`, `use_Amcrest_API`, " -"`SignalCheckPoints`, `SignalCheckColour`, `Importance`-1 FROM `Monitors`"; +"`SignalCheckPoints`, `SignalCheckColour`, `Importance`-1, `MQTT_Subscriptions` FROM `Monitors`"; std::string CameraType_Strings[] = { "Unknown", @@ -312,7 +312,7 @@ Monitor::Monitor() "FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, Exif," "`RTSPServer`,`RTSPStreamName`, "`ONVIF_URL`, `ONVIF_Username`, `ONVIF_Password`, `ONVIF_Options`, `ONVIF_Event_Listener`, `use_Amcrest_API`, " - "SignalCheckPoints, SignalCheckColour, Importance-1 FROM Monitors"; + "SignalCheckPoints, SignalCheckColour, Importance-1, `MQTT_Subscriptions` FROM Monitors"; */ void Monitor::Load(MYSQL_ROW dbrow, bool load_zones=true, Purpose p = QUERY) { @@ -504,9 +504,11 @@ void Monitor::Load(MYSQL_ROW dbrow, bool load_zones=true, Purpose p = QUERY) { blue_val = BLUE_VAL_BGRA(signal_check_colour); grayscale_val = signal_check_colour & 0xff; /* Clear all bytes but lowest byte */ - importance = dbrow[col] ? atoi(dbrow[col]) : 0;// col++; + importance = dbrow[col] ? atoi(dbrow[col]) : 0; col++; if (importance < 0) importance = 0; // Should only be >= 0 + mqtt_subscriptions = Split(std::string(dbrow[col] ? dbrow[col] : ""), ','); col++; + // How many frames we need to have before we start analysing ready_count = std::max(warmup_count, pre_event_count); diff --git a/src/zm_monitor.h b/src/zm_monitor.h index a7174c48c..40e04f1be 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -493,6 +493,7 @@ protected: std::vector zones; + std::vector mqtt_subscriptions; std::unique_ptr mqtt; const unsigned char *privacy_bitmask; From ec73b8304620c0d7dd3f5c39dd14ae2d176bfadf Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:15:20 -0500 Subject: [PATCH 011/122] Add MQTT tab. Rework code that spits out options lines to be easier to read. --- web/skins/classic/views/options.php | 131 ++++++++++++---------------- 1 file changed, 54 insertions(+), 77 deletions(-) diff --git a/web/skins/classic/views/options.php b/web/skins/classic/views/options.php index 5f648ba27..4a81882d8 100644 --- a/web/skins/classic/views/options.php +++ b/web/skins/classic/views/options.php @@ -45,6 +45,7 @@ $tabs['lowband'] = translate('LowBW'); $tabs['users'] = translate('Users'); $tabs['control'] = translate('Control'); $tabs['privacy'] = translate('Privacy'); +$tabs['MQTT'] = translate('MQTT'); if (isset($_REQUEST['tab'])) $tab = validHtmlStr($_REQUEST['tab']); @@ -398,22 +399,22 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as } // $tab == API else { $config = array(); - $configCat = array(); $configCats = array(); $result = $dbConn->query('SELECT * FROM `Config` ORDER BY `Id` ASC'); - if ( !$result ) + if (!$result) { echo mysql_error(); - while ( $row = dbFetchNext($result) ) { - $config[$row['Name']] = $row; - if ( !($configCat = &$configCats[$row['Category']]) ) { - $configCats[$row['Category']] = array(); - $configCat = &$configCats[$row['Category']]; + } else { + while ($row = dbFetchNext($result)) { + $config[$row['Name']] = $row; + if ( !($configCat = &$configCats[$row['Category']]) ) { + $configCats[$row['Category']] = array(); + } + $configCats[$row['Category']][$row['Name']] = &$config[$row['Name']]; } - $configCat[$row['Name']] = $row; } - if ( $tab == 'system' ) { + if ($tab == 'system') { $configCats[$tab]['ZM_LANG_DEFAULT']['Hint'] = join('|', getLanguages()); $configCats[$tab]['ZM_SKIN_DEFAULT']['Hint'] = join('|', array_map('basename', glob('skins/*',GLOB_ONLYDIR))); $configCats[$tab]['ZM_CSS_DEFAULT']['Hint'] = join('|', array_map ( 'basename', glob('skins/'.ZM_SKIN_DEFAULT.'/css/*',GLOB_ONLYDIR) )); @@ -422,17 +423,16 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as function timezone_list() { static $timezones = null; - if ( $timezones === null ) { + if ($timezones === null) { $timezones = []; $offsets = []; $now = new DateTime('now', new DateTimeZone('UTC')); - foreach ( DateTimeZone::listIdentifiers() as $timezone ) { + foreach (DateTimeZone::listIdentifiers() as $timezone) { $now->setTimezone(new DateTimeZone($timezone)); $offsets[] = $offset = $now->getOffset(); $timezones[$timezone] = '(' . format_GMT_offset($offset) . ') ' . format_timezone_name($timezone); } - array_multisort($offsets, $timezones); } @@ -454,50 +454,40 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as $configCats[$tab]['ZM_TIMEZONE']['Hint'] = array(''=> translate('TZUnset')) + timezone_list(); } # end if tab == system ?> -
+ $value ) { - $shortName = preg_replace( '/^ZM_/', '', $name ); - $optionPromptText = !empty($OLANG[$shortName])?$OLANG[$shortName]['Prompt']:$value['Prompt']; + if (!isset($configCats[$tab])) { + echo 'There are no config entries for category '.$tab.'.
'; + } else { + foreach ($configCats[$tab] as $name=>$value) { + $shortName = preg_replace( '/^ZM_/', '', $name ); + $optionPromptText = !empty($OLANG[$shortName])?$OLANG[$shortName]['Prompt']:$value['Prompt']; ?>
- checked="checked"/> - - - 3 ) { -?> - -'form-control-sm') : array('class'=>'form-control-sm', 'disabled'=>'disabled')); + } else { foreach ( $options as $option ) { if ( preg_match('/^([^=]+)=(.+)$/', $option) ) { $optionLabel = $matches[1]; @@ -506,44 +496,34 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as $optionLabel = $optionValue = $option; } ?> -
+
- - - /> - - /> - - /> - - /> - - - - - -
@@ -551,9 +531,6 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as - - - From d8a2d712b504c21e81838e0aac4cf1450c90b2e5 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:19:20 -0500 Subject: [PATCH 012/122] Put back MQTT_Enabled in Monitors --- db/zm_create.sql.in | 1 + 1 file changed, 1 insertion(+) diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index fbfdcbd69..77e3f3782 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -556,6 +556,7 @@ CREATE TABLE `Monitors` ( `RTSPServer` BOOLEAN NOT NULL DEFAULT FALSE, `RTSPStreamName` varchar(255) NOT NULL default '', `Importance` enum('Normal','Less','Not') NOT NULL default 'Normal', + `MQTT_Enabled` BOOLEAN NOT NULL DEFAULT false, `MQTT_Subscriptions` varchar(255) default '', PRIMARY KEY (`Id`) ) ENGINE=@ZM_MYSQL_ENGINE@; From 08332c9be55b534c64f97e6ed154d9fff20324e5 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:19:50 -0500 Subject: [PATCH 013/122] add update file for MQTT columns --- db/zm_update-1.37.mqtt.sql | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 db/zm_update-1.37.mqtt.sql diff --git a/db/zm_update-1.37.mqtt.sql b/db/zm_update-1.37.mqtt.sql new file mode 100644 index 000000000..9d346fcb9 --- /dev/null +++ b/db/zm_update-1.37.mqtt.sql @@ -0,0 +1,37 @@ +-- +-- Update Monitors table to have a MQTT_Enabled Column +-- + +SELECT 'Checking for MQTT_Enabled in Monitors'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'MQTT_Enabled' + ) > 0, +"SELECT 'Column MQTT_Enabled already exists in Monitors'", +"ALTER TABLE Monitors ADD COLUMN `MQTT_Enabled` BOOLEAN NOT NULL DEFAULT false AFTER `Importance`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +-- +-- Update Monitors table to have a MQTT_Subscriptions Column +-- + +SELECT 'Checking for MQTT_Subscriptions in Monitors'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'MQTT_Subscriptions' + ) > 0, +"SELECT 'Column MQTT_Subscriptions already exists in Monitors'", +"ALTER TABLE Monitors ADD COLUMN `MQTT_Subscriptions` varchar(255) NOT NULL default '' AFTER `MQTT_Enabled`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; From da2e3d3b95bad81864775fdd89380c318852ded5 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 13:20:07 -0500 Subject: [PATCH 014/122] Make zm_mqtt compile --- src/zm_mqtt.cpp | 27 +++++++++++++-------------- src/zm_mqtt.h | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/zm_mqtt.cpp b/src/zm_mqtt.cpp index 0904e8207..50e4d4f55 100644 --- a/src/zm_mqtt.cpp +++ b/src/zm_mqtt.cpp @@ -1,6 +1,7 @@ #include "zm.h" #include "zm_logger.h" #include "zm_mqtt.h" +#include "zm_monitor.h" #include "zm_time.h" #include @@ -49,15 +50,13 @@ void MQTT::send() { int mid; std::stringstream mqtt_topic; std::stringstream mqtt_payload; - mqtt_topic << "/a/"; - mqtt_topic << api_key; - mqtt_topic << "/p/"; - mqtt_topic << project_id; - mqtt_topic << "/device/" << device_id; - mqtt_topic << "/sensor/" << outer_iter->first; + //mqtt_topic << "/a/"; + mqtt_topic << "/" << MQTT_TOPIC_PREFIX; + mqtt_topic << "/monitor/" << monitor_->Id(); + //mqtt_topic << "/sensor/" << outer_iter->first; mqtt_topic << "/data"; - mqtt_payload << "{ \"value\":"<second<<" }"; + //mqtt_payload << "{ \"value\":"<second<<" }"; const std::string mqtt_topic_string = mqtt_topic.str(); const std::string mqtt_payload_string = mqtt_payload.str(); @@ -84,13 +83,13 @@ void MQTT::addActuator(std::string name, std::function f) { int mid; std::stringstream mqtt_topic; - mqtt_topic << "/a/"; - mqtt_topic << api_key; - mqtt_topic << "/p/"; - mqtt_topic << project_id; - mqtt_topic << "/device/" << device_id; - mqtt_topic << "/actuator/" << name; - mqtt_topic << "/state"; + //mqtt_topic << "/a/"; + //mqtt_topic << api_key; + //mqtt_topic << "/p/"; + //mqtt_topic << project_id; + //mqtt_topic << "/device/" << device_id; + //mqtt_topic << "/actuator/" << name; + //mqtt_topic << "/state"; subscribe(&mid, mqtt_topic.str().c_str()); } diff --git a/src/zm_mqtt.h b/src/zm_mqtt.h index 45bf5f6cc..6da3c6031 100644 --- a/src/zm_mqtt.h +++ b/src/zm_mqtt.h @@ -39,7 +39,7 @@ class MQTT : public mosqpp::mosquittopp { std::map>::iterator sensorListIterator; std::map actuatorList; - Monitor *monitor; + Monitor *monitor_; bool connected_; }; From a64102c8905b6959f94ea9ff4eaebbd793fcaf6f Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:23:26 -0500 Subject: [PATCH 015/122] Must preface config entries with ZM_ because we strip it out later --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index ec75fc358..320fce776 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -3841,7 +3841,7 @@ our @options = ( category => 'config', }, { - name => 'MQTT_HOSTNAME', + name => 'ZM_MQTT_HOSTNAME', default => 'mqtt.zoneminder.com', description => 'MQTT broker hostname', help => 'MQTT uses a central server to send/receive messages. This is the hostname or ip address of the server you wish to use.', @@ -3849,7 +3849,7 @@ our @options = ( category => 'MQTT', }, { - name => 'MQTT_PORT', + name => 'ZM_MQTT_PORT', default => '1883', description => 'MQTT broker port', help => 'MQTT uses a central server to send/receive messages. This is the port to connect to.', @@ -3857,7 +3857,7 @@ our @options = ( category => 'MQTT', }, { - name => 'MQTT_USERNAME', + name => 'ZM_MQTT_USERNAME', default => '', description => 'MQTT broker username', help => 'MQTT uses a central server to send/receive messages. This is the username to authenticate with.', @@ -3865,7 +3865,7 @@ our @options = ( category => 'MQTT', }, { - name => 'MQTT_PASSWORD', + name => 'ZM_MQTT_PASSWORD', default => '', description => 'MQTT broker password', help => 'MQTT uses a central server to send/receive messages. This is the password to authenticate with.', @@ -3873,7 +3873,7 @@ our @options = ( category => 'MQTT', }, { - name => 'MQTT_TOPIC_PREFIX', + name => 'ZM_MQTT_TOPIC_PREFIX', default => 'ZoneMinder', description => 'MQTT topic prefix', help => 'MQTT each message generated by ZoneMinder will start with this. For example /ZoneMinder/available.', From d4117ab1439f2b8cf58537c202aa2535b7e23e89 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:24:02 -0500 Subject: [PATCH 016/122] Add MQTT_Enabled. parse subscriptions, sucribe to them. Add mqtt messages for starting/ending events --- src/zm_monitor.cpp | 44 +++++++++++++++++++++++++++++++++----------- src/zm_monitor.h | 1 + 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 650194215..341e733bd 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -96,7 +96,8 @@ std::string load_monitor_sql = "`FPSReportInterval`, `RefBlendPerc`, `AlarmRefBlendPerc`, `TrackMotion`, `Exif`," "`RTSPServer`, `RTSPStreamName`," "`ONVIF_URL`, `ONVIF_Username`, `ONVIF_Password`, `ONVIF_Options`, `ONVIF_Event_Listener`, `use_Amcrest_API`, " -"`SignalCheckPoints`, `SignalCheckColour`, `Importance`-1, `MQTT_Subscriptions` FROM `Monitors`"; +"`SignalCheckPoints`, `SignalCheckColour`, `Importance`-1, " +"`MQTT_Enabled`, `MQTT_Subscriptions` FROM `Monitors`"; std::string CameraType_Strings[] = { "Unknown", @@ -265,6 +266,9 @@ Monitor::Monitor() dest_frame(nullptr), convert_context(nullptr), //zones(nullptr), + mqtt_enabled(false), + // mqtt_subscriptions, + mqtt(nullptr), privacy_bitmask(nullptr), n_linked_monitors(0), linked_monitors(nullptr), @@ -280,13 +284,13 @@ Monitor::Monitor() grayscale_val(0), colour_val(0) { - - if ( strcmp(config.event_close_mode, "time") == 0 ) + if (strcmp(config.event_close_mode, "time") == 0) { event_close_mode = CLOSE_TIME; - else if ( strcmp(config.event_close_mode, "alarm") == 0 ) + } else if (strcmp(config.event_close_mode, "alarm") == 0) { event_close_mode = CLOSE_ALARM; - else + } else { event_close_mode = CLOSE_IDLE; + } event = nullptr; @@ -312,7 +316,7 @@ Monitor::Monitor() "FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, Exif," "`RTSPServer`,`RTSPStreamName`, "`ONVIF_URL`, `ONVIF_Username`, `ONVIF_Password`, `ONVIF_Options`, `ONVIF_Event_Listener`, `use_Amcrest_API`, " - "SignalCheckPoints, SignalCheckColour, Importance-1, `MQTT_Subscriptions` FROM Monitors"; + "SignalCheckPoints, SignalCheckColour, Importance-1, `MQTT_Enabled`, `MQTT_Subscriptions` FROM Monitors"; */ void Monitor::Load(MYSQL_ROW dbrow, bool load_zones=true, Purpose p = QUERY) { @@ -507,7 +511,10 @@ void Monitor::Load(MYSQL_ROW dbrow, bool load_zones=true, Purpose p = QUERY) { importance = dbrow[col] ? atoi(dbrow[col]) : 0; col++; if (importance < 0) importance = 0; // Should only be >= 0 - mqtt_subscriptions = Split(std::string(dbrow[col] ? dbrow[col] : ""), ','); col++; + mqtt_enabled = (*dbrow[col] != '0'); col++; + std::string mqtt_subscriptions_string = std::string(dbrow[col] ? dbrow[col] : ""); + mqtt_subscriptions = Split(mqtt_subscriptions_string, ','); col++; + Error("MQTT enableed ? %d, subs %s", mqtt_enabled, mqtt_subscriptions_string.c_str()); // How many frames we need to have before we start analysing ready_count = std::max(warmup_count, pre_event_count); @@ -937,7 +944,6 @@ bool Monitor::connect() { usedsubpixorder = camera->SubpixelOrder(); // Used in CheckSignal shared_data->valid = true; - //ONVIF and Amcrest Setup //For now, only support one event type per camera, so share some state. Poll_Trigger_State = FALSE; @@ -990,6 +996,13 @@ bool Monitor::connect() { Janus_Manager = new JanusManager(this); } + if (mqtt_enabled) { + mqtt = zm::make_unique(this); + for (const std::string &subscription : mqtt_subscriptions) { + if (!subscription.empty()) + mqtt->add_subscription(subscription); + } + } } else if (!shared_data->valid) { Error("Shared data not initialised by capture daemon for monitor %s", name.c_str()); return false; @@ -1056,6 +1069,9 @@ bool Monitor::disconnect() { } // end bool Monitor::disconnect() Monitor::~Monitor() { + if (mqtt) { + mqtt->send("offline"); + } Close(); if (mem_ptr != nullptr) { @@ -1071,7 +1087,7 @@ Monitor::~Monitor() { delete storage; if (n_linked_monitors) { - for ( int i=0; i < n_linked_monitors; i++ ) { + for (int i=0; i < n_linked_monitors; i++) { delete linked_monitors[i]; } delete[] linked_monitors; @@ -1641,6 +1657,9 @@ void Monitor::UpdateFPS() { Info("%s: %d - Capturing at %.2lf fps, capturing bandwidth %ubytes/sec Analysing at %.2lf fps", name.c_str(), image_count, new_capture_fps, new_capture_bandwidth, new_analysis_fps); + if (mqtt) mqtt->send(stringtf("Capturing at %.2lf fps, capturing bandwidth %ubytes/sec Analysing at %.2lf fps", + new_capture_fps, new_capture_bandwidth, new_analysis_fps)); + shared_data->capture_fps = new_capture_fps; last_fps_time = now; last_capture_image_count = image_count; @@ -2779,6 +2798,8 @@ Event * Monitor::openEvent( shared_data->last_event_id = event->Id(); strncpy(shared_data->alarm_cause, cause.c_str(), sizeof(shared_data->alarm_cause)-1); + if (mqtt) mqtt->send(stringtf("event start: %" PRId64, event->Id())); + if (!event_start_command.empty()) { if (fork() == 0) { execlp(event_start_command.c_str(), @@ -2816,18 +2837,20 @@ Event * Monitor::openEvent( void Monitor::closeEvent() { if (!event) return; - if ( close_event_thread.joinable() ) { + if (close_event_thread.joinable()) { Debug(1, "close event thread is joinable"); close_event_thread.join(); } else { Debug(1, "close event thread is not joinable"); } + if (mqtt) mqtt->send(stringtf("event end: %" PRId64, event->Id())); Debug(1, "Starting thread to close event"); close_event_thread = std::thread([](Event *e, const std::string &command){ int64_t event_id = e->Id(); int monitor_id = e->MonitorId(); delete e; + if (!command.empty()) { if (fork() == 0) { execlp(command.c_str(), command.c_str(), @@ -2837,7 +2860,6 @@ void Monitor::closeEvent() { Error("Error execing %s", command.c_str()); } } - }, event, event_end_command); Debug(1, "Nulling event"); event = nullptr; diff --git a/src/zm_monitor.h b/src/zm_monitor.h index 40e04f1be..62c8cb4b6 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -493,6 +493,7 @@ protected: std::vector zones; + bool mqtt_enabled; std::vector mqtt_subscriptions; std::unique_ptr mqtt; From 029ecd3b6ef737ba2b8a6f476fcc3b2259c05871 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:24:20 -0500 Subject: [PATCH 017/122] In working state. Auth now works --- src/zm_mqtt.cpp | 87 +++++++++++++++++++++++-------------------------- src/zm_mqtt.h | 7 ++-- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/src/zm_mqtt.cpp b/src/zm_mqtt.cpp index 50e4d4f55..e9dfc6ab2 100644 --- a/src/zm_mqtt.cpp +++ b/src/zm_mqtt.cpp @@ -8,16 +8,34 @@ #include MQTT::MQTT(Monitor *monitor) : - mosquittopp(), + mosquittopp("ZoneMinder"), monitor_(monitor), connected_(false) { mosqpp::lib_init(); + connect(); } -void MQTT::connect(const char * hostname, unsigned int port, unsigned int keepalive) { - mosqpp::mosquittopp::connect(hostname, port, keepalive); - loop_start(); +void MQTT::connect() { + if (config.mqtt_username[0]) { + Debug(1, "MQTT setting username to %s, password to %s", config.mqtt_username, config.mqtt_password); + int rc = mosqpp::mosquittopp::username_pw_set(config.mqtt_username, config.mqtt_password); + if (MOSQ_ERR_SUCCESS != rc) { + Warning("MQTT username pw set returns %d %s", rc, strerror(rc)); + } + } + Debug(1, "MQTT connecting to %s:%d", config.mqtt_hostname, config.mqtt_port); + int rc = mosqpp::mosquittopp::connect(config.mqtt_hostname, config.mqtt_port, 60); + if (MOSQ_ERR_SUCCESS != rc) { + if (MOSQ_ERR_INVAL == rc) { + Warning("MQTT reports invalid parameters to connect"); + } else { + Warning("MQTT connect returns %d %s", rc, strerror(rc)); + } + } else { + Debug(1, "Starting loop"); + loop_start(); + } } void MQTT::autoconfigure() { @@ -28,7 +46,7 @@ void MQTT::disconnect() { void MQTT::on_connect(int rc) { Debug(1, "Connected with rc %d", rc); - if (rc == 0) connected_ = true; + if (rc == MOSQ_ERR_SUCCESS) connected_ = true; } void MQTT::on_message(const struct mosquitto_message *message) { @@ -39,39 +57,24 @@ void MQTT::on_subscribe(int mid, int qos_count, const int *granted_qos) { } void MQTT::on_publish() { + Debug(1, "on_publish "); } -void MQTT::send() { - while (!connected_) { std::this_thread::sleep_for(Seconds(1)); } +void MQTT::send(const std::string &message) { + if (!connected_) connect(); - for (auto outer_iter=sensorList.begin(); outer_iter!=sensorList.end(); ++outer_iter) { - for (auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter) { - Debug(1, "%s %ld %f", outer_iter->first.c_str(), inner_iter->first.count(), inner_iter->second); - int mid; - std::stringstream mqtt_topic; - std::stringstream mqtt_payload; - //mqtt_topic << "/a/"; - mqtt_topic << "/" << MQTT_TOPIC_PREFIX; - mqtt_topic << "/monitor/" << monitor_->Id(); - //mqtt_topic << "/sensor/" << outer_iter->first; - mqtt_topic << "/data"; + std::stringstream mqtt_topic; + //mqtt_topic << "/" << config.mqtt_topic_prefix; + mqtt_topic << config.mqtt_topic_prefix; + mqtt_topic << "/monitor/" << monitor_->Id(); - //mqtt_payload << "{ \"value\":"<second<<" }"; - - const std::string mqtt_topic_string = mqtt_topic.str(); - const std::string mqtt_payload_string = mqtt_payload.str(); - Debug(1, "DEBUG: MQTT TOPIC: %s", mqtt_topic_string.c_str()); - publish(&mid, mqtt_topic_string.c_str(), mqtt_payload_string.length(), mqtt_payload_string.c_str(), 0, true); - - auto this_iter = inner_iter; - inner_iter++; - - outer_iter->second.erase(this_iter); - if (inner_iter == outer_iter->second.end()) { - break; - } - } // end foreach inner - } // end foreach outer + const std::string mqtt_topic_string = mqtt_topic.str(); + Debug(1, "DEBUG: MQTT TOPIC: %s : message %s", mqtt_topic_string.c_str(), message.c_str()); + //int rc = publish(&mid, mqtt_topic_string.c_str(), message.length(), message.c_str(), 0, true); + int rc = publish(nullptr, mqtt_topic_string.c_str(), message.length(), message.c_str()); + if (MOSQ_ERR_SUCCESS != rc) { + Warning("MQTT publish returns %d %s", rc, strerror(rc)); + } } void MQTT::addSensor(std::string name, std::string type) { @@ -79,19 +82,11 @@ void MQTT::addSensor(std::string name, std::string type) { sensorList.insert ( std::pair>(name, valuesList)); } -void MQTT::addActuator(std::string name, std::function f) { +void MQTT::add_subscription(const std::string &name) { +//, std::function f) { int mid; - std::stringstream mqtt_topic; - - //mqtt_topic << "/a/"; - //mqtt_topic << api_key; - //mqtt_topic << "/p/"; - //mqtt_topic << project_id; - //mqtt_topic << "/device/" << device_id; - //mqtt_topic << "/actuator/" << name; - //mqtt_topic << "/state"; - - subscribe(&mid, mqtt_topic.str().c_str()); + Debug(1, "MQTT add subscription to %s", name.c_str()); + subscribe(&mid, name.c_str()); } void MQTT::addValue(std::string name, double value) { diff --git a/src/zm_mqtt.h b/src/zm_mqtt.h index 6da3c6031..f0fe7d799 100644 --- a/src/zm_mqtt.h +++ b/src/zm_mqtt.h @@ -17,12 +17,13 @@ class MQTT : public mosqpp::mosquittopp { public: MQTT(Monitor *); ~MQTT(); - void connect(const char * hostname = "mqtt.zoneminder.com", unsigned int port = 1883, unsigned int keepalive = 60); void autoconfigure(); + void connect(); void disconnect(); - void send(); + void send(const std::string &message); void addSensor(std::string name, std::string type); - void addActuator(std::string name, std::function f); + void add_subscription(const std::string &name); + void addValue(std::string name, double value); void listValues(const std::string &sensor_name); void on_connect(int rc); From 6b9a018bcfd4eac7fdb264c532c7e58efaf55d76 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:24:41 -0500 Subject: [PATCH 018/122] Add MQTT to Monitor edit. --- web/skins/classic/views/monitor.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 25e434a1c..121255b1d 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -375,6 +375,7 @@ if ( $monitor->Type() != 'WebSite' ) { $tabs['x10'] = translate('X10'); $tabs['misc'] = translate('Misc'); $tabs['location'] = translate('Location'); + $tabs['mqtt'] = translate('MQTT'); } if (isset($_REQUEST['tab']) and isset($tabs[$_REQUEST['tab']]) ) { @@ -1403,6 +1404,18 @@ echo htmlSelect('newMonitor[ReturnLocation]', $return_options, $monitor->ReturnL
+ + + + translate('Enabled'), '0'=>translate('Disabled')), $monitor->MQTT_Enabled()) ?> + + + + + Date: Wed, 29 Dec 2021 18:24:55 -0500 Subject: [PATCH 019/122] Style m onitor edit a bit --- web/skins/classic/css/base/views/monitor.css | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/web/skins/classic/css/base/views/monitor.css b/web/skins/classic/css/base/views/monitor.css index 28afbf480..94dc676af 100644 --- a/web/skins/classic/css/base/views/monitor.css +++ b/web/skins/classic/css/base/views/monitor.css @@ -19,7 +19,8 @@ input[name="newMonitor[ControlAddress]"], input[name="newMonitor[ONVIF_URL]"], input[name="newMonitor[ONVIF_Username]"], input[name="newMonitor[ONVIF_Password]"], -input[name="newMonitor[ONVIF_Options]"] { +input[name="newMonitor[ONVIF_Options]"], +input[name="newMonitor[MQTT_Subscriptions]"] { width: 100%; } input[name="newMonitor[LabelFormat]"]{ @@ -59,3 +60,17 @@ tr td:first-child { .OutputContainer { display: none; } +.tab-content, +.tab-content .active { +width: 100%; +} +.tab-content .active table { +width: 100%; +table-layout: fixed; +} +.tab-content .active table tr { + height: 32px; +} +.tab-content .active table td.text-right { +width: 245px; +} From 8db22a6e24772c352eec4c54ad04dd492b5eeae3 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:25:21 -0500 Subject: [PATCH 020/122] Add toggle_password_visibility which is used in options for MQTT password --- web/skins/classic/js/skin.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/web/skins/classic/js/skin.js b/web/skins/classic/js/skin.js index a12005e76..2d51bd9b2 100644 --- a/web/skins/classic/js/skin.js +++ b/web/skins/classic/js/skin.js @@ -103,7 +103,9 @@ window.addEventListener("DOMContentLoaded", function onSkinDCL() { // 'data-on-click-this' calls the global function in the attribute value with the element when a click happens. function dataOnClickThis() { - document.querySelectorAll("a[data-on-click-this], button[data-on-click-this], input[data-on-click-this]").forEach(function attachOnClick(el) { +console.log("Looking for data-on-click-this"); + document.querySelectorAll("a[data-on-click-this], button[data-on-click-this], input[data-on-click-this], span[data-on-click-this]").forEach(function attachOnClick(el) { +console.log(el); var fnName = el.getAttribute("data-on-click-this"); if ( !window[fnName] ) { console.error("Nothing found to bind to " + fnName + " on element " + el.name); @@ -986,3 +988,18 @@ function closeFullscreen() { document.msExitFullscreen(); } } + +function toggle_password_visibility(element) { + input = document.getElementById(element.getAttribute('data-password-input')); + if (!input) { + console.log("Input not found! " + element.getAttribute('data-password-input')); + return; + } + if (element.innerHTML=='visibility') { + input.type = 'text'; + element.innerHTML = 'visibility_off'; + } else { + input.type = 'password'; + element.innerHTML='visibility'; + } +} From 08e45b37d04db58eb59fcb32470e6286e02f8ece Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 29 Dec 2021 18:25:44 -0500 Subject: [PATCH 021/122] Add toggle_password_visibility option for MQTT password --- web/skins/classic/views/options.php | 1 + 1 file changed, 1 insertion(+) diff --git a/web/skins/classic/views/options.php b/web/skins/classic/views/options.php index 4a81882d8..aa92f17ce 100644 --- a/web/skins/classic/views/options.php +++ b/web/skins/classic/views/options.php @@ -513,6 +513,7 @@ foreach ( array_map('basename', glob('skins/'.$skin.'/css/*', GLOB_ONLYDIR)) as echo ''.PHP_EOL; } else if ( $value['Type'] == 'password' ) { echo ''.PHP_EOL; + echo 'visibility'; } else { echo ''.PHP_EOL; } From cce6158442c54ee769a197d25ec77bcba81a9d2d Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 31 Dec 2021 17:41:49 -0500 Subject: [PATCH 022/122] More debugging --- src/zm_mqtt.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/zm_mqtt.cpp b/src/zm_mqtt.cpp index e9dfc6ab2..ea0c7959d 100644 --- a/src/zm_mqtt.cpp +++ b/src/zm_mqtt.cpp @@ -50,14 +50,15 @@ void MQTT::on_connect(int rc) { } void MQTT::on_message(const struct mosquitto_message *message) { +Debug(1, "MQTT: Have message %s: %s", message->topic, message->payload); } void MQTT::on_subscribe(int mid, int qos_count, const int *granted_qos) { - Debug(1, "Subscribed to topic "); + Debug(1, "MQTT: Subscribed to topic "); } void MQTT::on_publish() { - Debug(1, "on_publish "); + Debug(1, "MQTT: on_publish "); } void MQTT::send(const std::string &message) { @@ -69,7 +70,7 @@ void MQTT::send(const std::string &message) { mqtt_topic << "/monitor/" << monitor_->Id(); const std::string mqtt_topic_string = mqtt_topic.str(); - Debug(1, "DEBUG: MQTT TOPIC: %s : message %s", mqtt_topic_string.c_str(), message.c_str()); + //Debug(1, "DEBUG: MQTT TOPIC: %s : message %s", mqtt_topic_string.c_str(), message.c_str()); //int rc = publish(&mid, mqtt_topic_string.c_str(), message.length(), message.c_str(), 0, true); int rc = publish(nullptr, mqtt_topic_string.c_str(), message.length(), message.c_str()); if (MOSQ_ERR_SUCCESS != rc) { From 64e930e7f4be201330aecac364a70edbcc6f3f13 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 31 Dec 2021 17:42:18 -0500 Subject: [PATCH 023/122] Print out mLogFile.size as well hopefully to figure out why it tries to open an empty file --- src/zm_logger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index f43ea6f30..58c0f1cec 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -386,7 +386,7 @@ void Logger::openFile() { if (mLogFile.size()) { if ( (mLogFileFP = fopen(mLogFile.c_str(), "a")) == nullptr ) { mFileLevel = NOLOG; - Error("fopen() for %s, error = %s", mLogFile.c_str(), strerror(errno)); + Error("fopen() for %s %d, error = %s", mLogFile.c_str(), mLogFile.size(), strerror(errno)); } } else { puts("Called Logger::openFile() without a filename"); From 7e7382fa17936620b248fe3d5da37de41de63fad Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 21 Mar 2022 16:15:03 -0400 Subject: [PATCH 024/122] Remove debugging --- web/skins/classic/js/skin.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/web/skins/classic/js/skin.js b/web/skins/classic/js/skin.js index 2d51bd9b2..3786df4da 100644 --- a/web/skins/classic/js/skin.js +++ b/web/skins/classic/js/skin.js @@ -103,9 +103,7 @@ window.addEventListener("DOMContentLoaded", function onSkinDCL() { // 'data-on-click-this' calls the global function in the attribute value with the element when a click happens. function dataOnClickThis() { -console.log("Looking for data-on-click-this"); document.querySelectorAll("a[data-on-click-this], button[data-on-click-this], input[data-on-click-this], span[data-on-click-this]").forEach(function attachOnClick(el) { -console.log(el); var fnName = el.getAttribute("data-on-click-this"); if ( !window[fnName] ) { console.error("Nothing found to bind to " + fnName + " on element " + el.name); From e4a8017b6b26f0d7deaa9664252c458bdff6be25 Mon Sep 17 00:00:00 2001 From: "parvit (Vittorio Parrella)" Date: Fri, 22 Jul 2022 07:08:22 -0400 Subject: [PATCH 025/122] added configuring of authentication for rstp cameras --- src/zm_monitor.cpp | 6 ++++-- src/zm_remote_camera_rtsp.cpp | 8 ++++++-- src/zm_remote_camera_rtsp.h | 5 +++++ src/zm_rtsp.cpp | 19 ++++++++++++------- src/zm_rtsp.h | 4 +++- web/skins/classic/views/monitor.php | 2 ++ 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 1e06fe38a..9f19c0b17 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -171,8 +171,8 @@ Monitor::Monitor() //options //host //port - //user - //pass + user(), + pass(), //path //device palette(0), @@ -620,6 +620,8 @@ void Monitor::LoadCamera() { host, // Host port, // Port path, // Path + user, + pass, camera_width, camera_height, rtsp_describe, diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index b8a533fae..17e5f6df8 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -30,6 +30,8 @@ RemoteCameraRtsp::RemoteCameraRtsp( const std::string &p_host, const std::string &p_port, const std::string &p_path, + const std::string &p_user, + const std::string &p_pass, int p_width, int p_height, bool p_rtsp_describe, @@ -47,7 +49,9 @@ RemoteCameraRtsp::RemoteCameraRtsp( p_brightness, p_contrast, p_hue, p_colour, p_capture, p_record_audio), rtsp_describe(p_rtsp_describe), - frameCount(0) + frameCount(0), + user(p_user), + pass(p_pass) { if ( p_method == "rtpUni" ) method = RtspThread::RTP_UNICAST; @@ -110,7 +114,7 @@ void RemoteCameraRtsp::Terminate() { } int RemoteCameraRtsp::Connect() { - rtspThread = zm::make_unique(monitor->Id(), method, protocol, host, port, path, auth, rtsp_describe); + rtspThread = zm::make_unique(monitor->Id(), method, protocol, host, port, path, user, pass, rtsp_describe); return 0; } diff --git a/src/zm_remote_camera_rtsp.h b/src/zm_remote_camera_rtsp.h index 4aadfadf6..b70bf6103 100644 --- a/src/zm_remote_camera_rtsp.h +++ b/src/zm_remote_camera_rtsp.h @@ -38,6 +38,9 @@ protected: int rtcp_sd; bool rtsp_describe; + const std::string user; + const std::string pass; + Buffer buffer; Buffer lastSps; Buffer lastPps; @@ -57,6 +60,8 @@ public: const std::string &host, const std::string &port, const std::string &path, + const std::string &user, + const std::string &pass, int p_width, int p_height, bool p_rtsp_describe, diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index e1f3adcd4..edf7b7e9e 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -135,7 +135,8 @@ RtspThread::RtspThread( const std::string &host, const std::string &port, const std::string &path, - const std::string &auth, + const std::string &user, + const std::string &pass, bool rtsp_describe) : mId(id), mMethod(method), @@ -169,12 +170,16 @@ RtspThread::RtspThread( mHttpSession = stringtf("%d", rand()); mNeedAuth = false; - StringVector parts = Split(auth, ":"); - Debug(2, "# of auth parts %zu", parts.size()); - if ( parts.size() > 1 ) - mAuthenticator = new zm::Authenticator(parts[0], parts[1]); - else - mAuthenticator = new zm::Authenticator(parts[0], ""); + if ( user.length() > 0 && pass.length() > 0 ) { + Debug(2, "# of auth parts 2"); + mAuthenticator = new zm::Authenticator(user, pass); + } else if( user.length() > 0 ) { + Debug(2, "# of auth parts 1"); + mAuthenticator = new zm::Authenticator(user, ""); + } else { + Debug(2, "# of auth parts 0"); + mAuthenticator = new zm::Authenticator("", ""); + } mThread = std::thread(&RtspThread::Run, this); } diff --git a/src/zm_rtsp.h b/src/zm_rtsp.h index 96906e209..8bff6f7c5 100644 --- a/src/zm_rtsp.h +++ b/src/zm_rtsp.h @@ -96,7 +96,9 @@ private: void Run(); public: - RtspThread( int id, RtspMethod method, const std::string &protocol, const std::string &host, const std::string &port, const std::string &path, const std::string &auth, bool rtsp_describe ); + RtspThread( int id, RtspMethod method, const std::string &protocol, const std::string &host, + const std::string &port, const std::string &path, const std::string &user, const std::string &pass, + bool rtsp_describe ); ~RtspThread(); public: diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 675fdb3c9..441ff765d 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -748,6 +748,8 @@ include('_monitor_source_nvsocket.php'); + + From 9385127b50f331796c317b4b4904b678ef9d1653 Mon Sep 17 00:00:00 2001 From: Doug Nazar Date: Sat, 30 Jul 2022 22:27:41 -0400 Subject: [PATCH 026/122] Consolidate temp_img_buffer resizing and use correct delete[] operator --- src/zm_eventstream.cpp | 8 +------- src/zm_monitorstream.cpp | 8 +------- src/zm_stream.cpp | 12 +++++++++++- src/zm_stream.h | 3 ++- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/zm_eventstream.cpp b/src/zm_eventstream.cpp index 95ae870ac..1a324d321 100644 --- a/src/zm_eventstream.cpp +++ b/src/zm_eventstream.cpp @@ -775,13 +775,7 @@ bool EventStream::sendFrame(Microseconds delta_us) { } Image *send_image = prepareImage(image); - if (temp_img_buffer_size < send_image->Size()) { - Debug(1, "Resizing image buffer from %zu to %u", - temp_img_buffer_size, send_image->Size()); - delete[] temp_img_buffer; - temp_img_buffer = new uint8_t[send_image->Size()]; - temp_img_buffer_size = send_image->Size(); - } + reserveTempImgBuffer(send_image->Size()); int img_buffer_size = 0; uint8_t *img_buffer = temp_img_buffer; diff --git a/src/zm_monitorstream.cpp b/src/zm_monitorstream.cpp index 9b6b4a0dd..57edcadbb 100644 --- a/src/zm_monitorstream.cpp +++ b/src/zm_monitorstream.cpp @@ -385,13 +385,7 @@ bool MonitorStream::sendFrame(Image *image, SystemTimePoint timestamp) { /* double pts = */ vid_stream->EncodeFrame(send_image->Buffer(), send_image->Size(), config.mpeg_timed_frames, delta_time.count()); } else { - if (temp_img_buffer_size < send_image->Size()) { - Debug(1, "Resizing image buffer from %zu to %u", - temp_img_buffer_size, send_image->Size()); - delete[] temp_img_buffer; - temp_img_buffer = new uint8_t[send_image->Size()]; - temp_img_buffer_size = send_image->Size(); - } + reserveTempImgBuffer(send_image->Size()); int img_buffer_size = 0; unsigned char *img_buffer = temp_img_buffer; diff --git a/src/zm_stream.cpp b/src/zm_stream.cpp index 7f6337a18..40566b08c 100644 --- a/src/zm_stream.cpp +++ b/src/zm_stream.cpp @@ -32,7 +32,7 @@ constexpr Milliseconds StreamBase::MAX_SLEEP; StreamBase::~StreamBase() { delete vid_stream; - delete temp_img_buffer; + delete[] temp_img_buffer; closeComms(); } @@ -400,3 +400,13 @@ void StreamBase::closeComms() { } } } // end void StreamBase::closeComms + +void StreamBase::reserveTempImgBuffer(size_t size) +{ + if (temp_img_buffer_size < size) { + Debug(1, "Resizing image buffer from %zu to %zu", temp_img_buffer_size, size); + delete[] temp_img_buffer; + temp_img_buffer = new uint8_t[size]; + temp_img_buffer_size = size; + } +} diff --git a/src/zm_stream.h b/src/zm_stream.h index fd5a27a3e..8d7adaa18 100644 --- a/src/zm_stream.h +++ b/src/zm_stream.h @@ -147,7 +147,7 @@ protected: CmdMsg msg; - unsigned char *temp_img_buffer; // Used when encoding or sending file data + uint8_t *temp_img_buffer; // Used when encoding or sending file data size_t temp_img_buffer_size; protected: @@ -157,6 +157,7 @@ protected: Image *prepareImage(Image *image); bool checkCommandQueue(); virtual void processCommand(const CmdMsg *msg)=0; + void reserveTempImgBuffer(size_t size); public: StreamBase(): From 8d2c9c1fd794d88676803812cef3431063291ff9 Mon Sep 17 00:00:00 2001 From: Doug Nazar Date: Sat, 30 Jul 2022 22:32:48 -0400 Subject: [PATCH 027/122] Fix warning about Pre Event Image Count setting. --- src/zm_packetqueue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 082376995..f2f09d4ae 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -314,7 +314,7 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { } // end while if (keyframe_interval > pre_event_video_packet_count) { - Warning("Max Image Buffer setting is too low! Needs to be great than keyframe interval. Keyframe interval is at least %d", keyframe_interval); + Warning("Pre Event Image Count setting is too low! Needs to be great than keyframe interval. Keyframe interval is at least %d", keyframe_interval); } Debug(1, "Resulting it pointing at latest packet? %d, next front points to begin? %d, Keyframe interval %d", ( *it == add_packet ), From 74f8e43b127ea8fac93356c5bc442deae9db3a61 Mon Sep 17 00:00:00 2001 From: Doug Nazar Date: Sun, 31 Jul 2022 00:48:27 -0400 Subject: [PATCH 028/122] Cast operand to larger destination size to avoid possible overflow issues. --- src/zm_camera.cpp | 2 +- src/zm_font.cpp | 2 +- src/zm_image.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/zm_camera.cpp b/src/zm_camera.cpp index 8d31f8e82..e7bdd42a5 100644 --- a/src/zm_camera.cpp +++ b/src/zm_camera.cpp @@ -63,7 +63,7 @@ Camera::Camera( { linesize = width * colours; pixels = width * height; - imagesize = height * linesize; + imagesize = static_cast(height) * linesize; Debug(2, "New camera id: %d width: %d line size: %d height: %d colours: %d subpixelorder: %d capture: %d", monitor->Id(), width, linesize, height, colours, subpixelorder, capture); diff --git a/src/zm_font.cpp b/src/zm_font.cpp index 7ecaaa6b1..43a26283a 100644 --- a/src/zm_font.cpp +++ b/src/zm_font.cpp @@ -101,7 +101,7 @@ FontLoadError ZmFont::LoadFontFile(const std::string &loc) { } std::vector bitmap; - bitmap.resize(bitmap_header.number_of_code_points * bitmap_header.char_height); + bitmap.resize(static_cast(bitmap_header.number_of_code_points) * bitmap_header.char_height); std::size_t bitmap_bytes = bitmap.size() * sizeof(uint64); font_file.read(reinterpret_cast(bitmap.data()), static_cast(bitmap_bytes)); diff --git a/src/zm_image.cpp b/src/zm_image.cpp index a3c40023d..e336138ca 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -664,7 +664,7 @@ void Image::AssignDirect( return; } - size_t new_buffer_size = p_width * p_height * p_colours; + size_t new_buffer_size = static_cast(p_width) * p_height * p_colours; if ( buffer_size < new_buffer_size ) { Error("Attempt to directly assign buffer from an undersized buffer of size: %zu, needed %dx%d*%d colours = %zu", @@ -2756,7 +2756,7 @@ void Image::Scale(const unsigned int new_width, const unsigned int new_height) { if (width == new_width and height == new_height) return; // Why larger than we need? - size_t scale_buffer_size = (new_width+1) * (new_height+1) * colours; + size_t scale_buffer_size = static_cast(new_width+1) * (new_height+1) * colours; uint8_t* scale_buffer = AllocBuffer(scale_buffer_size); AVPixelFormat format = AVPixFormat(); @@ -2786,7 +2786,7 @@ void Image::Scale(const unsigned int factor) { unsigned int new_height = (height*factor)/ZM_SCALE_BASE; // Why larger than we need? - size_t scale_buffer_size = (new_width+1) * (new_height+1) * colours; + size_t scale_buffer_size = static_cast(new_width+1) * (new_height+1) * colours; uint8_t* scale_buffer = AllocBuffer(scale_buffer_size); From 8c37846c6c55f6ef2ba5a9dce17f3b8e3292d086 Mon Sep 17 00:00:00 2001 From: Doug Nazar Date: Sun, 31 Jul 2022 00:50:41 -0400 Subject: [PATCH 029/122] Check result of snprintf for errors and truncation. --- src/zm_fifo_debug.cpp | 6 +++++- src/zm_logger.cpp | 6 +++++- src/zm_monitor.cpp | 11 ++++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/zm_fifo_debug.cpp b/src/zm_fifo_debug.cpp index 1b1950e3c..0beaeb6b1 100644 --- a/src/zm_fifo_debug.cpp +++ b/src/zm_fifo_debug.cpp @@ -81,7 +81,11 @@ void zmFifoDbgOutput( int len = va_arg(arg_ptr, int); dbg_ptr += snprintf(dbg_ptr, str_size-(dbg_ptr-dbg_string), "%d:", len); for ( int i = 0; i < len; i++ ) { - dbg_ptr += snprintf(dbg_ptr, str_size-(dbg_ptr-dbg_string), " %02x", data[i]); + const auto max_len = str_size - (dbg_ptr - dbg_string); + int rc = snprintf(dbg_ptr, max_len, " %02x", data[i]); + if (rc < 0 || rc > max_len) + break; + dbg_ptr += rc; } } else { dbg_ptr += vsnprintf(dbg_ptr, str_size-(dbg_ptr-dbg_string), fstring, arg_ptr); diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index 4db535a78..87b2f692e 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -481,7 +481,11 @@ void Logger::logPrint(bool hex, const char *filepath, int line, int level, const int i; logPtr += snprintf(logPtr, sizeof(logString)-(logPtr-logString), "%d:", len); for ( i = 0; i < len; i++ ) { - logPtr += snprintf(logPtr, sizeof(logString)-(logPtr-logString), " %02x", data[i]); + const size_t max_len = sizeof(logString) - (logPtr - logString); + int rc = snprintf(logPtr, max_len, " %02x", data[i]); + if (rc < 0 || static_cast(rc) > max_len) + break; + logPtr += rc; } } else { logPtr += vsnprintf(logPtr, sizeof(logString)-(logPtr-logString), fstring, argPtr); diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index b7828426b..ddfb6c19f 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -2742,24 +2742,29 @@ void Monitor::TimestampImage(Image *ts_image, SystemTimePoint ts_time) const { while (*s_ptr && ((unsigned int)(d_ptr - label_text) < (unsigned int) sizeof(label_text))) { if ( *s_ptr == config.timestamp_code_char[0] ) { + const auto max_len = sizeof(label_text) - (d_ptr - label_text); bool found_macro = false; + int rc = 0; switch ( *(s_ptr+1) ) { case 'N' : - d_ptr += snprintf(d_ptr, sizeof(label_text)-(d_ptr-label_text), "%s", name.c_str()); + rc = snprintf(d_ptr, max_len, "%s", name.c_str()); found_macro = true; break; case 'Q' : - d_ptr += snprintf(d_ptr, sizeof(label_text)-(d_ptr-label_text), "%s", trigger_data->trigger_showtext); + rc = snprintf(d_ptr, max_len, "%s", trigger_data->trigger_showtext); found_macro = true; break; case 'f' : typedef std::chrono::duration Centiseconds; Centiseconds centi_sec = std::chrono::duration_cast( ts_time.time_since_epoch() - std::chrono::duration_cast(ts_time.time_since_epoch())); - d_ptr += snprintf(d_ptr, sizeof(label_text) - (d_ptr - label_text), "%02lld", static_cast(centi_sec.count())); + rc = snprintf(d_ptr, max_len, "%02lld", static_cast(centi_sec.count())); found_macro = true; break; } + if (rc < 0 || static_cast(rc) > max_len) + break; + d_ptr += rc; if ( found_macro ) { s_ptr += 2; continue; From 77472492e2744f4ddd868ad343743fbefa375a1b Mon Sep 17 00:00:00 2001 From: Robert Jacobson Date: Wed, 3 Aug 2022 09:57:57 -0400 Subject: [PATCH 030/122] Make zoom buttons work for Axis P5655-E --- .../lib/ZoneMinder/Control/AxisV2.pm | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm index e50449927..8292de593 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm @@ -303,6 +303,44 @@ sub moveRelDownLeft { $self->sendCmd($cmd); } +sub zoomConTele { + my $self = shift; + my $params = shift; + my $speed = 20; + Debug('Zoom ConTele'); + my $cmd = "/axis-cgi/com/ptz.cgi?continuouszoommove=$speed"; + $self->sendCmd($cmd); +} + +sub zoomConWide { + my $self = shift; + my $params = shift; + #my $step = $self->getParam($params, 'step'); + my $speed = -20; + Debug('Zoom ConWide'); + my $cmd = "/axis-cgi/com/ptz.cgi?continuouszoommove=$speed"; + $self->sendCmd($cmd); +} + +sub zoomStop { + my $self = shift; + my $params = shift; + my $speed = 0; + Debug('Zoom Stop'); + my $cmd = "/axis-cgi/com/ptz.cgi?continuouszoommove=$speed"; + $self->sendCmd($cmd); +} + +sub moveStop { + my $self = shift; + my $params = shift; + my $speed = 0; + Debug('Move Stop'); + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$speed,$speed"; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouszoommove=$speed"; + $self->sendCmd($cmd); +} + sub zoomRelTele { my $self = shift; my $params = shift; From f4b8066d00cd0dcc9f8b12ccf4ccf5e688af83b7 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 3 Aug 2022 12:28:39 -0400 Subject: [PATCH 031/122] Add backtrace to invalid value for width --- web/includes/Monitor.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 2deac9be5..92f342c4a 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -876,7 +876,10 @@ public static function getStatuses() { if ( $scale < $options['scale'] ) $options['scale'] = $scale; } else { - Warning('Invalid value for width: '.$options['width']); + $backTrace = debug_backtrace(); + $file = $backTrace[1]['file']; + $line = $backTrace[1]['line']; + Warning('Invalid value for width: '.$options['width']. ' from '.$file.':'.$line); } } } From 2e5d7ee1678970d78bd8e03d7a9f2683af9f990a Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 3 Aug 2022 13:38:56 -0400 Subject: [PATCH 032/122] Improve adding parenthesis, rename function to snake case --- web/js/MonitorLinkExpression.js | 40 ++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/web/js/MonitorLinkExpression.js b/web/js/MonitorLinkExpression.js index 2f391d6e3..e5a5c1814 100644 --- a/web/js/MonitorLinkExpression.js +++ b/web/js/MonitorLinkExpression.js @@ -79,22 +79,26 @@ function expr_to_ui(expr, container) { if (!tokens.length) return; // Every monitorlink should have possible parenthesis on either side of it - if (tokens[0].type != '(') { - tokens.unshift({type: '(', value: ''}); - } - if (tokens[tokens.length-1].type != ')') { - tokens.push({type: ')', value: ''}); - } - if (tokens.length > 2) { + if (tokens.length > 3) { + if (tokens[0].type != '(') { + tokens.unshift({type: '(', value: ''}); + } + if (tokens[tokens.length-1].type != ')') { + tokens.push({type: ')', value: ''}); + } for (let token_index = 1; token_index < tokens.length-1; token_index++) { const token = tokens[token_index]; if (token.type == 'link') { if (tokens[token_index-1].type != '(' && tokens[token_index-1].type != ')') { - tokens.splice(token_index-1, {type: '()', value: ''}); + console.log("Adding () before ", token, token_index); + tokens.splice(token_index, 0, {type: '()', value: ''}); + token_index ++; } if (tokens[token_index+1].type != '(' && tokens[token_index+1].type != ')') { - tokens.splice(token_index+1, {type: '()', value: ''}); + console.log("Adding () after ", token, token_index); + tokens.splice(token_index+1, 0, {type: '()', value: ''}); + token_index ++; } brackets++; used_monitorlinks.push(token.value); @@ -119,7 +123,7 @@ function expr_to_ui(expr, container) { } // end foreach zone } // end foreach monitor select.val(token.value); - select.on('change', updateExpr); + select.on('change', update_expr); token.html = select; } else if (token.type == '(' || token.type == ')') { const select = $j(''); @@ -128,7 +132,7 @@ function expr_to_ui(expr, container) { select.append(''); } select.val(token.value); - select.on('change', updateExpr); + select.on('change', update_expr); token.html = select; } else if (token.type == '()') { const select = $j(''); @@ -140,14 +144,14 @@ function expr_to_ui(expr, container) { select.append(''); } select.val(token.value); - select.on('change', updateExpr); + select.on('change', update_expr); token.html = select; } else { const select = $j(''); select.append(''); select.append(''); select.val(token.type); - select.on('change', updateExpr); + select.on('change', update_expr); token.html = select; } container.append(token.html); @@ -167,7 +171,7 @@ function expr_to_ui(expr, container) { } } // end foreach zone } // end foreach monitor - select.on('change', addToExpr); + select.on('change', add_to_expr); container.append(select); } // end expr_to_ui @@ -178,13 +182,13 @@ function array_search(needle, haystack) { return false; } -function addToExpr() { +function add_to_expr() { $j('[name="newMonitor[LinkedMonitors]"]').val($j('[name="newMonitor[LinkedMonitors]"]').val() + '|' + $j('#monitorLinks').val()); - ui_to_expr( $j('#LinkedMonitorsUI'), $j('[name="newMonitor[LinkedMonitors]"]')); + expr_to_ui($j('[name="newMonitor[LinkedMonitors]"]').val(), $j('#LinkedMonitorsUI')); } -function updateExpr(ev) { - ui_to_expr( $j('#LinkedMonitorsUI'), $j('[name="newMonitor[LinkedMonitors]"]')); +function update_expr(ev) { + ui_to_expr($j('#LinkedMonitorsUI'), $j('[name="newMonitor[LinkedMonitors]"]')); } function ui_to_expr(container, expr_input) { From 19952b25c16c3ca41437bb943ce2a0fdb9c4e050 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 3 Aug 2022 13:40:08 -0400 Subject: [PATCH 033/122] Remove unused code --- web/skins/classic/views/js/monitor.js | 82 --------------------------- 1 file changed, 82 deletions(-) diff --git a/web/skins/classic/views/js/monitor.js b/web/skins/classic/views/js/monitor.js index bf5f5b7ef..f36f3e2b3 100644 --- a/web/skins/classic/views/js/monitor.js +++ b/web/skins/classic/views/js/monitor.js @@ -499,88 +499,6 @@ function Model_onchange(input) { select_by_value_case_insensitive(input.form.elements['newMonitor[ModelId]'], input.value); } -function addMonitorLinkTerm( element ) { - var row = $j(element).closest('tr'); - row.find('select').chosen('destroy'); - var newRow = row.clone().insertAfter(row); - row.find('select').chosen({width: '101%'}); - newRow.find('select').each( function() { //reset new row to default - this[0].selected = 'selected'; - }).chosen({width: '101%'}); - newRow[0].querySelectorAll("button[data-on-click-this]").forEach(function(el) { - var fnName = el.getAttribute("data-on-click-this"); - el.onclick = window[fnName].bind(el, el); - }); - - newRow[0].querySelectorAll('select[data-on-change-this]').forEach(function(el) { - var fnName = el.getAttribute('data-on-change-this'); - el.onchange = window[fnName].bind(el, el); - }); - - var rows = $j(row).parent().children(); - parseRows(rows); -} - -function delMonitorLinkTerm( element ) { - var row = $j(element).closest('tr'); - var rowParent = $j(row).parent(); - row.remove(); - var rows = rowParent.children(); - parseRows(rows); -} - -function parseRows(rows) { - for ( var rowNum = 0; rowNum < rows.length; rowNum++ ) { //Each row is a term - var queryPrefix = 'Monitor[LinkedMonitors][terms]['; - var inputTds = rows.eq(rowNum).children(); - - if ( rowNum == 0 ) inputTds.eq(0).html(' '); //Remove and from first term - if ( rowNum > 0 ) { //add and/or to 1+ - var cnjVal = inputTds.eq(0).children().val(); - var conjSelect = $j('').attr('name', queryPrefix + rowNum + '][cnj]').attr('id', queryPrefix + rowNum + '][cnj]'); - $j.each(conjTypes, function(i) { - conjSelect.append(''); - }); - inputTds.eq(0).html(conjSelect).children().val(cnjVal === undefined ? 'and' : cnjVal); - }var brackets = rows.length - 2; - if ( brackets > 0 ) { // add bracket select to all rows - const obrSelect = $j('').attr('name', queryPrefix + rowNum + '][obr]').attr('id', queryPrefix + rowNum + '][obr]'); - const cbrSelect = $j('').attr('name', queryPrefix + rowNum + '][cbr]').attr('id', queryPrefix + rowNum + '][cbr]'); - obrSelect.append(''); - cbrSelect.append(''); - for ( var i = 1; i <= brackets; i++ ) { // build bracket options - obrSelect.append(''); - cbrSelect.append(''); - } - var obrVal = inputTds.eq(1).children().val() != undefined ? inputTds.eq(1).children().val() : 0; // Save currently selected bracket option - var cbrVal = inputTds.eq(5).children().val() != undefined ? inputTds.eq(5).children().val() : 0; - inputTds.eq(1).html(obrSelect).children().val(obrVal); // Set bracket contents and assign saved value - inputTds.eq(5).html(cbrSelect).children().val(cbrVal); - } else { - inputTds.eq(1).html(' '); // Blank if there aren't enough terms for brackets - inputTds.eq(5).html(' '); - } - - if ( rows.length == 1 ) { - inputTds.eq(6).find('button[data-on-click-this="delTerm"]').prop('disabled', true); // enable/disable remove row button - } else { - inputTds.eq(6).find('button[data-on-click-this="delTerm"]').prop('disabled', false); - } - - var zoneSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); - for ( monitor_id in monitors ) { - for ( zone_id in zones ) { - var zone = zones[zone_id]; - if ( monitor_id == zone.MonitorId ) { - zoneSelect.append(''); - } - } // end foreach zone - } // end foreach monitor - var zoneVal = inputTds.eq(4).children().val(); - inputTds.eq(4).html(zoneSelect).children().val(zoneVal).chosen({width: "101%"}); - } -} - function updateLinkedMonitorsUI() { expr_to_ui($j('[name="newMonitor[LinkedMonitors]"]').val(), $j('#LinkedMonitorsUI')); } From eb4b097560188a3bf1a7d591640c23aa6bf4e86c Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 3 Aug 2022 13:52:01 -0400 Subject: [PATCH 034/122] fix eslint --- web/js/MonitorLinkExpression.js | 41 +++++++++++++++++---------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/web/js/MonitorLinkExpression.js b/web/js/MonitorLinkExpression.js index e5a5c1814..ec3870067 100644 --- a/web/js/MonitorLinkExpression.js +++ b/web/js/MonitorLinkExpression.js @@ -27,13 +27,13 @@ function tokenize(expr) { if (character == '&' || character == '|' || character == ',') { if (first_index != second_index) { - tokens[tokens.length] = { type: 'link', value: expr.substring(first_index, second_index) }; + tokens[tokens.length] = {type: 'link', value: expr.substring(first_index, second_index)}; } - tokens[tokens.length] = { type: character, value: character }; + tokens[tokens.length] = {type: character, value: character}; first_index = second_index+1; } else if (character == '(' || character == ')') { if (first_index != second_index) { - tokens[tokens.length] = { type: 'link', value: expr.substring(first_index, second_index) }; + tokens[tokens.length] = {type: 'link', value: expr.substring(first_index, second_index)}; } // Now check for repeats let third = second_index+1; @@ -42,18 +42,18 @@ function tokenize(expr) { if (expr.at(i) != character) break; } if (third != second_index+1) { - tokens[tokens.length] = { type: character, value: expr.substring(second_index, third) }; + tokens[tokens.length] = {type: character, value: expr.substring(second_index, third)}; } else { - tokens[tokens.length] = { type: character, value: character }; + tokens[tokens.length] = {type: character, value: character}; } first_index = third; } - second_index ++; + second_index++; } // end for second_index if (second_index) { if (second_index != first_index) { - tokens[tokens.length] = { type: 'link', value: expr.substring(first_index, second_index) }; + tokens[tokens.length] = {type: 'link', value: expr.substring(first_index, second_index)}; } } return tokens; @@ -71,10 +71,9 @@ function expr_to_ui(expr, container) { container.html(''); var tokens = tokenize(expr); console.log(tokens); - let term_count = count_terms(tokens); - let div; + //const term_count = count_terms(tokens); let brackets = 0; - let used_monitorlinks = []; + const used_monitorlinks = []; if (!tokens.length) return; @@ -150,7 +149,7 @@ function expr_to_ui(expr, container) { const select = $j(''); select.append(''); select.append(''); - select.val(token.type); + select.val(token.type); select.on('change', update_expr); token.html = select; } @@ -161,13 +160,15 @@ function expr_to_ui(expr, container) { select.append(''); for (monitor_id in monitors) { const monitor = monitors[monitor_id]; - if (!array_search(monitor.Id, used_monitorlinks)) + if (!array_search(monitor.Id, used_monitorlinks)) { select.append(''); + } for ( zone_id in zones ) { const zone = zones[zone_id]; if ( monitor.Id == zone.MonitorId ) { - if (!array_search(monitor.Id+':'+zone.Id, used_monitorlinks)) + if (!array_search(monitor.Id+':'+zone.Id, used_monitorlinks)) { select.append(''); + } } } // end foreach zone } // end foreach monitor @@ -203,7 +204,7 @@ function ui_to_expr(container, expr_input) { function parse_expression(tokens) { if (tokens.length == 1) { - return { token: tokens[0] }; + return {token: tokens[0]}; } let left = parse_and(tokens); @@ -212,7 +213,7 @@ function parse_expression(tokens) { } while (token_index < tokens.length && ( tokens[token_index] == '|' || tokens[token_index] == ',')) { - var logical_or = { type: '|' }; + var logical_or = {type: '|'}; token_index++; var right = parse_and(tokens); @@ -220,7 +221,7 @@ function parse_expression(tokens) { return null; } - logical_or.left = left; + logical_or.left = left; logical_or.right = right; left = logical_or; } @@ -238,14 +239,14 @@ function parse_and(tokens) { while ((token_index < tokens.length) && (tokens[token_index] == '&')) { ++token_index; - var logical_and = { type: '&' }; + var logical_and = {type: '&'}; right = parse_parentheses(tokens); if (right == null) { return null; } - logical_and.left = left; + logical_and.left = left; logical_and.right = right; left = logical_and; } @@ -266,11 +267,11 @@ function parse_parentheses(tokens) { // Because we are parsing a left, there SHOULD be a remaining right. If not, invalid. if (token_index == tokens.length) return null; - if (tokens[ token_index++ ] == ')') { + if (tokens[token_index++] == ')') { return expression; } } else if (tokens[token_index].type == MONITORLINK) { - var link = { token: tokens[token_index] }; + var link = {token: tokens[token_index]}; token_index++; return link; } From 84385442d7a96e870b8f3c46c978cd6fd751169b Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 4 Aug 2022 09:22:30 -0400 Subject: [PATCH 035/122] Set button padding to 0 for ptz buttons --- web/skins/classic/css/base/views/control.css | 1 + 1 file changed, 1 insertion(+) diff --git a/web/skins/classic/css/base/views/control.css b/web/skins/classic/css/base/views/control.css index 915694109..cdecca331 100644 --- a/web/skins/classic/css/base/views/control.css +++ b/web/skins/classic/css/base/views/control.css @@ -18,6 +18,7 @@ .ptzControls .pantiltPanel button { border: none; margin: 0; + padding: 0; } .ptzControls .controlsPanel { From 71325fdd5cd50a6d2756cbf789eb76ea751b12d3 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 4 Aug 2022 12:13:53 -0400 Subject: [PATCH 036/122] Setting padding to 0 for ptz buttons --- web/skins/classic/css/base/views/control.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/skins/classic/css/base/views/control.css b/web/skins/classic/css/base/views/control.css index cdecca331..ffb9c03d2 100644 --- a/web/skins/classic/css/base/views/control.css +++ b/web/skins/classic/css/base/views/control.css @@ -32,6 +32,7 @@ .ptzControls .controlsPanel .arrowControl { width: 60px; margin: 0 4px; + padding: 0; } .ptzControls .controlsPanel .arrowControl button.longArrowBtn { @@ -42,6 +43,7 @@ width: 32px; height: 48px; margin: 0 auto; + padding: 0; cursor: pointer; } From 31900512871b5b0fe2e6a14f4f2459eb47de5c65 Mon Sep 17 00:00:00 2001 From: Robert Jacobson Date: Thu, 4 Aug 2022 12:40:31 -0400 Subject: [PATCH 037/122] Make proportional and continuous movement actually work --- .../lib/ZoneMinder/Control/AxisV2.pm | 70 ++++++++++++------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm index 8292de593..61f35452b 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm @@ -163,57 +163,81 @@ sub cameraReset { sub moveConUp { my $self = shift; + my $params = shift; + my $panspeed = 0; # purely moving vertically + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ); Debug('Move Up'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=up'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConDown { my $self = shift; + my $params = shift; + my $panspeed = 0; # purely moving vertically + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ) * -1 ; Debug('Move Down'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=down'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConLeft { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ) * -1 ; + my $tiltspeed = 0; # purely moving horizontally Debug('Move Left'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=left'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConRight { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ); + my $tiltspeed = 0; # purely moving horizontally Debug('Move Right'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=right'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConUpRight { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ); Debug('Move Up/Right'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=upright'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConUpLeft { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ) * -1; + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ); Debug('Move Up/Left'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=upleft'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } sub moveConDownRight { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ) * -1; Debug('Move Down/Right'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=downright'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd( $cmd ); } sub moveConDownLeft { my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 30 ) * -1; + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 30 ) * -1; Debug('Move Down/Left'); - my $cmd = '/axis-cgi/com/ptz.cgi?move=downleft'; + my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$panspeed,$tiltspeed"; $self->sendCmd($cmd); } @@ -248,7 +272,7 @@ sub moveRelDown { sub moveRelLeft { my $self = shift; my $params = shift; - my $step = $self->getParam($params, 'panstep'); + my $step = abs($self->getParam($params, 'panstep')); Debug("Step Left $step"); my $cmd = '/axis-cgi/com/ptz.cgi?rpan=-'.$step; $self->sendCmd($cmd); @@ -276,8 +300,8 @@ sub moveRelUpRight { sub moveRelUpLeft { my $self = shift; my $params = shift; - my $panstep = $self->getParam($params, 'panstep'); - my $tiltstep = $self->getParam($params, 'tiltstep'); + my $panstep = abs($self->getParam($params, 'panstep')); + my $tiltstep = abs($self->getParam($params, 'tiltstep')); Debug("Step Up/Left $tiltstep/$panstep"); my $cmd = "/axis-cgi/com/ptz.cgi?rpan=-$panstep&rtilt=$tiltstep"; $self->sendCmd($cmd); @@ -336,11 +360,14 @@ sub moveStop { my $params = shift; my $speed = 0; Debug('Move Stop'); + # we have to stop both pans and zooms my $cmd = "/axis-cgi/com/ptz.cgi?continuouspantiltmove=$speed,$speed"; + $self->sendCmd($cmd); my $cmd = "/axis-cgi/com/ptz.cgi?continuouszoommove=$speed"; $self->sendCmd($cmd); } + sub zoomRelTele { my $self = shift; my $params = shift; @@ -463,20 +490,15 @@ __END__ =head1 NAME -ZoneMinder::Database - Perl extension for blah blah blah +ZoneMinder::Control::Axis - Zoneminder control for Axis Cameras using the V2 API =head1 SYNOPSIS - use ZoneMinder::Database; - blah blah blah + use ZoneMinder::Control::AxisV2 ; place this in /usr/share/perl5/ZoneMinder/Control =head1 DESCRIPTION -Stub documentation for ZoneMinder, created by h2xs. It looks like the -author of the extension was negligent enough to leave the stub -unedited. - -Blah blah blah. +This module is an implementation of the Axis V2 API =head2 EXPORT @@ -486,14 +508,8 @@ None by default. =head1 SEE ALSO -Mention other useful documentation such as the documentation of -related modules or operating system documentation (such as man pages -in UNIX), or any relevant external documentation such as RFCs or -standards. - -If you have a mailing list set up for your module, mention it here. - -If you have a web site set up for your module, mention it here. +AXIS VAPIX Library Documentation; e.g.: +https://www.axis.com/vapix-library/subjects/t10175981/section/t10036011/display =head1 AUTHOR From a0f6ba145521929c77cf3f90f30d37e0380d6401 Mon Sep 17 00:00:00 2001 From: ovargasp Date: Thu, 4 Aug 2022 20:31:12 -0600 Subject: [PATCH 038/122] Modify zmu Adds option to get monitor triggered status. --- src/zmu.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/zmu.cpp b/src/zmu.cpp index b081673a1..41fb0cbb0 100644 --- a/src/zmu.cpp +++ b/src/zmu.cpp @@ -81,7 +81,7 @@ Options for use with monitors: -U, --username - When running in authenticated mode the username and -P, --password - password combination of the given user -A, --auth - Pass authentication hash string instead of user details - + -x, --xtrigger - Output the current monitor trigger state, 0 = not triggered, 1 = triggered =cut */ @@ -137,7 +137,9 @@ void Usage(int status=-1) { " -U, --username : When running in authenticated mode the username and\n" " -P, --password : password combination of the given user\n" " -A, --auth : Pass authentication hash string instead of user details\n" - " -T, --token : Pass JWT token string instead of user details\n" + " -T, --token : Pass JWT token string instead of user details\n" + " -x, --xtrigger : Output the current monitor trigger state, 0 = not triggered, 1 = triggered\n" + "", stderr ); exit(status); @@ -167,11 +169,12 @@ typedef enum { ZMU_SUSPEND = 0x00400000, ZMU_RESUME = 0x00800000, ZMU_LIST = 0x10000000, + ZMU_TRIGGER = 0x20000000, } Function; bool ValidateAccess(User *user, int mon_id, int function) { bool allowed = true; - if ( function & (ZMU_STATE|ZMU_IMAGE|ZMU_TIME|ZMU_READ_IDX|ZMU_WRITE_IDX|ZMU_FPS) ) { + if ( function & (ZMU_STATE|ZMU_IMAGE|ZMU_TIME|ZMU_READ_IDX|ZMU_WRITE_IDX|ZMU_FPS|ZMU_TRIGGER) ) { if ( user->getStream() < User::PERM_VIEW ) allowed = false; } @@ -246,6 +249,7 @@ int main(int argc, char *argv[]) { {"version", 1, nullptr, 'V'}, {"help", 0, nullptr, 'h'}, {"list", 0, nullptr, 'l'}, + {"xtrigger", 0, nullptr, 'x'}, {nullptr, 0, nullptr, 0} }; @@ -278,7 +282,7 @@ int main(int argc, char *argv[]) { while (1) { int option_index = 0; - int c = getopt_long(argc, argv, "d:m:vsEDLurwei::S:t::fz::ancqhlB::C::H::O::RWU:P:A:V:T:", long_options, &option_index); + int c = getopt_long(argc, argv, "d:m:vsEDLurweix::S:t::fz::ancqhlB::C::H::O::RWU:P:A:V:T:", long_options, &option_index); if (c == -1) { break; } @@ -297,6 +301,9 @@ int main(int argc, char *argv[]) { case 's': function |= ZMU_STATE; break; + case 'x': + function |= ZMU_TRIGGER; + break; case 'i': function |= ZMU_IMAGE; if (optarg) @@ -523,6 +530,15 @@ int main(int argc, char *argv[]) { have_output = true; } } + if ( function & ZMU_TRIGGER ) { + int trgstate = monitor->GetTriggerState(); + if ( verbose ) { + printf("Current Triggered state: %s\n", trgstate==0?"Not Triggered":(trgstate==1?"Triggered":"NA")); + } else { + printf("%d", trgstate); + have_output = true; + } + } if ( function & ZMU_TIME ) { SystemTimePoint timestamp = monitor->GetTimestamp(image_idx); if (verbose) { From b01c75ab76c67938142f6a21dc436181eb0de907 Mon Sep 17 00:00:00 2001 From: ovargasp Date: Fri, 5 Aug 2022 06:40:23 -0600 Subject: [PATCH 039/122] Modify config.php.in Modifies config.php to use ZM_TIMEZONE if defined by user --- web/includes/config.php.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/includes/config.php.in b/web/includes/config.php.in index de03da809..c18205b5f 100644 --- a/web/includes/config.php.in +++ b/web/includes/config.php.in @@ -150,9 +150,9 @@ require_once('database.php'); require_once('logger.php'); loadConfig(); if (ZM_LOCALE_DEFAULT) { - $dateFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::SHORT, IntlDateFormatter::NONE); - $dateTimeFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::SHORT, IntlDateFormatter::LONG); - $timeFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::NONE, IntlDateFormatter::LONG); + $dateFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::SHORT, IntlDateFormatter::NONE,ZM_TIMEZONE); + $dateTimeFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::SHORT, IntlDateFormatter::LONG,ZM_TIMEZONE); + $timeFormatter = new IntlDateFormatter(ZM_LOCALE_DEFAULT, IntlDateFormatter::NONE, IntlDateFormatter::LONG,ZM_TIMEZONE); } if (ZM_DATE_FORMAT_PATTERN) { $dateFormatter->setPattern(ZM_DATE_FORMAT_PATTERN); From 5405ebdaa8883201fa9f0ede14f3d39effaeb6f6 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 5 Aug 2022 09:07:22 -0400 Subject: [PATCH 040/122] Replace the Event index with an eventId,ZoneId index, which mysql will actually use to speed up the subquery for AlarmedZone --- db/zm_create.sql.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index da9544989..659064fe3 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -667,7 +667,7 @@ CREATE TABLE `Stats` ( `MaxY` smallint(5) unsigned NOT NULL default '0', `Score` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`Id`), - KEY `EventId` (`EventId`), + KEY `EventId_ZoneId` (`EventId`, `ZoneId`), KEY `MonitorId` (`MonitorId`), KEY `ZoneId` (`ZoneId`) ) ENGINE=@ZM_MYSQL_ENGINE@; From 8978ebcc3b53cfaad70cbe37307846f1f269cec9 Mon Sep 17 00:00:00 2001 From: ovargasp Date: Fri, 5 Aug 2022 15:59:42 -0600 Subject: [PATCH 041/122] Adds Alarm Server for NETSurveillance WEB IP cameras --- scripts/zmalarm-server.py | 185 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100755 scripts/zmalarm-server.py diff --git a/scripts/zmalarm-server.py b/scripts/zmalarm-server.py new file mode 100755 index 000000000..891efba5a --- /dev/null +++ b/scripts/zmalarm-server.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# ========================================================================== +# +# ZoneMinder Alarm Server Script for Netsurveillence Software cameras, $Date$, $Revision$ +# Copyright (C) 2022 +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# ========================================================================== + + + +# Adds pyzm support +import pyzm.api as zmapi +import pyzm.ZMLog as zmlog +import pyzm.helpers.utils as utils + +import os, sys, struct, json +from time import sleep +#import time +from socket import * +# from datetime import * +# telnet +from telnetlib import Telnet +# multi threading +from threading import Thread + +def writezmlog(m,s): + zmlog.init() + zmlog.Info(m+s) +# zmlog.close() + +def alarm_thread(m, monid,eventlenght): + import subprocess + print("Monitor " + str(monid)+" entered alarm_thread...") + result = subprocess.run(['zmu','-m', str(monid), '-s'] ,stdout=subprocess.PIPE) + if result.stdout.decode('utf-8') != '3\n': + print('Changing monitor '+ str(monid) + ' status to Alarm...') + m.arm() + sleep(eventlenght) + m.disarm() + else: + print('Monitor '+ str(monid) + ' already in status Alarm...') + print('Finishing thread...') + + +def event_thread(m_id,eventlenght): + import subprocess + print("Monitor " + str(m_id)+" entered event_thread...") + result = subprocess.run(['zmu','-m', str(m_id), '-x'] ,stdout=subprocess.PIPE) + if result.stdout.decode('utf-8') == '0\n': + print('Firing monitor '+ str(m_id) + ' trigger...') + telbuff = str(m_id) + '|on+'+str(eventlenght)+'|1|Human Motion Detected|' + with Telnet('localhost', 6802) as tn: + tn.write(telbuff.encode('ascii') + alarm_desc.encode('ascii') + b'\n') + tn.read_until(b'off') + else: + print('Monitor '+ str(m_id) + ' already triggered, doing nothing...') + print('Finishing thread...') + + + +def tolog(s): + logfile = open(datetime.now().strftime('%Y_%m_%d_') + log, 'a+') + logfile.write(s) + logfile.close() + + +def GetIP(s): + return inet_ntoa(struct.pack(' 1: + keys = ["--log=","-l=","--alarm=","-a=","--port=","-p=","--event=","-e="] + for i in range(1,len(sys.argv)): + for key in keys: + if sys.argv[i].find(key) == 0: + if key == "--log=" or key == "-l=": + wrzmlog=sys.argv[i][len(key):] + elif key == "--alarm=" or key == "-a=": + rsealm=sys.argv[i][len(key):] + elif key == "--port=" or key == "-p=": + port=sys.argv[i][len(key):] + elif key == "--event=" or key == "-e=": + wrzmevent=sys.argv[i][len(key):] + break + +else: + print('Usage: %s [--port|-p= --log|-l= --alarm|-a= --event|-e=]' % os.path.basename(sys.argv[0])) + sys.exit() + +print ('Create log entry: ', wrzmlog) +print ('Trigger event: ', wrzmlog) +print ('Raise Alarm: ', rsealm) + +server = socket(AF_INET, SOCK_STREAM) +server.bind(('0.0.0.0', int(port))) +# server.settimeout(0.5) +server.listen(1) + +log = "AlarmServer.log" + +conf = utils.read_config('/etc/zm/secrets.ini') +api_options = { + 'apiurl': utils.get(key='ZM_API_PORTAL', section='secrets', conf=conf), + 'portalurl':utils.get(key='ZM_PORTAL', section='secrets', conf=conf), + 'user': utils.get(key='ZM_USER', section='secrets', conf=conf), + #'disable_ssl_cert_check': True +} + +zmapi = zmapi.ZMApi(options=api_options) + +# importing the regex to get ip out of path +import re +#define regex pattern for IP addresses +pattern =re.compile('''((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)''') +# store the response of URL +#process monitors create dict of monitors +list_monit = {} +zm_monitors = zmapi.monitors() +for m in zm_monitors.list(): + ip_v4=pattern.search(m.get()['Path']) + list_monit[ip_v4.group()]=m.id() + +writezmlog('Listening on port: '+port,' AlarmServer.py') +print ('Listening on port: '+port) +#run Alarm Server +while True: + try: + conn, addr = server.accept() + head, version, session, sequence_number, msgid, len_data = struct.unpack( + 'BB2xII2xHI', conn.recv(20) + ) + sleep(0.1) # Just for recive whole packet + data = conn.recv(len_data) + conn.close() + # make the json a Dictionary + reply = json.loads(data) + # get ip + ip_v4 = GetIP(reply.get('Address')) + # get alarm_event_desc + alarm_desc = reply.get('Event') +# print(datetime.now().strftime('[%Y-%m-%d %H:%M:%S]>>>')) + print ('Ip Address: ',ip_v4) + print ("Alarm Description: ", alarm_desc) + print('<<<') +# tolog(repr(data) + "\r\n") + if alarm_desc == 'HumanDetect': + if wrzmlog == 'y': + writezmlog(alarm_desc+' in monitor ',str(list_monit[ip_v4])) + if rsealm == 'y': + print ("Triggering Alarm...") + mthread = Thread(target=alarm_thread, args=(zm_monitors.find(list_monit[ip_v4]),list_monit[ip_v4],eventlenght)) + mthread.start() + elif wrzmevent == 'y': + print ("Triggering Event Rec on zmtrigger...") + mthread = Thread(target=event_thread, args=(list_monit[ip_v4],eventlenght)) + mthread.start() + except (KeyboardInterrupt, SystemExit): + break +server.close() +# needs to be closed again... otherwise it will crash on exit. +zmlog.close() +sys.exit(1) From 6753a04e91751338895a7f805a0371c7facd6787 Mon Sep 17 00:00:00 2001 From: ovargasp Date: Fri, 5 Aug 2022 16:46:11 -0600 Subject: [PATCH 042/122] Latest version of zmAlarmServer --- .../lib/ZoneMinder/ConfigData.pm.in | 47 +++++++++++++++++++ scripts/zmalarm-server.py | 2 +- scripts/zmdc.pl.in | 3 +- scripts/zmpkg.pl.in | 24 ++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 6e3242894..3b975c5a2 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -3834,6 +3834,53 @@ our @options = ( type => $types{string}, category => 'config', }, +# Add options for Alarm Server + { + name => 'ZM_OPT_USE_ALARMSERVER', + default => 'no', + description => 'Enable NETSurveillance WEB Camera ALARM SERVER', + help => q` + Alarm Server that works with cameras that use Netsurveillance Web Server, + and has the Alarm Server option it receives alarms sent by this cameras + (once enabled), and pass to Zoneminder the events. + It requires pyzm installed, visit https://pyzm.readthedocs.io/en/latest/ + for installation instructions. + `, + type => $types{boolean}, + category => 'system', + }, + { + name => 'ZM_OPT_ALS_LOGENTRY', + default => 'no', + description => 'Makes ALARM SERVER create a log entry in ZoneMinder on Human Detected', + help => '', + type => $types{boolean}, + category => 'system', + }, + { + name => 'ZM_OPT_ALS_ALARM', + default => 'no', + description => 'Send the Human Detected alarm from ALARM SERVER to ZoneMinder, It does not work along with OPT_ALS_TRIGGEREVENT', + help => '', + type => $types{boolean}, + category => 'system', + }, + { + name => 'ZM_OPT_ALS_TRIGGEREVENT', + default => 'no', + description => 'Trigger an event on Human Detected alarm from ALARM SERVER to ZoneMinder. Requires the zmTrigger option Enabled', + help => '', + type => $types{boolean}, + category => 'system', + }, + { + name => 'ZM_OPT_ALS_PORT', + default => '15002', + description => 'Port Number to receive alarms from Alarm Server', + help => '', + type => $types{integer}, + category => 'system', + }, ); our %options_hash = map { ( $_->{name}, $_ ) } @options; diff --git a/scripts/zmalarm-server.py b/scripts/zmalarm-server.py index 891efba5a..4a3717cbe 100755 --- a/scripts/zmalarm-server.py +++ b/scripts/zmalarm-server.py @@ -108,7 +108,7 @@ if len(sys.argv) > 1: else: print('Usage: %s [--port|-p= --log|-l= --alarm|-a= --event|-e=]' % os.path.basename(sys.argv[0])) - sys.exit() + sys.exit(1) print ('Create log entry: ', wrzmlog) print ('Trigger event: ', wrzmlog) diff --git a/scripts/zmdc.pl.in b/scripts/zmdc.pl.in index 911ac57dc..c4e7bd1a6 100644 --- a/scripts/zmdc.pl.in +++ b/scripts/zmdc.pl.in @@ -102,7 +102,8 @@ my @daemons = ( 'zmtrack.pl', 'zmcontrol.pl', 'zm_rtsp_server', - 'zmtelemetry.pl' + 'zmtelemetry.pl', + 'zmalarm-server.py' ); if ( $Config{ZM_OPT_USE_EVENTNOTIFICATION} ) { diff --git a/scripts/zmpkg.pl.in b/scripts/zmpkg.pl.in index 08b36f536..651966bf9 100644 --- a/scripts/zmpkg.pl.in +++ b/scripts/zmpkg.pl.in @@ -288,6 +288,30 @@ if ( $command =~ /^(?:start|restart)$/ ) { if ( $Config{ZM_MIN_RTSP_PORT} ) { runCommand('zmdc.pl start zm_rtsp_server'); } + # run and pass parameters to AlarmServer.py + if ($Config{ZM_OPT_USE_ALARMSERVER} ) { + my $cmd='zmdc.pl start zmalarm-server.py '. $Config{ZM_OPT_ALS_PORT}; + if ($Config{ZM_OPT_ALS_LOGENTRY} ) { + $cmd = $cmd . ' --log=y'; + } + else { + $cmd = $cmd . ' --log=n'; + } + if ($Config{ZM_OPT_ALS_TRIGGEREVENT} ) { + $cmd = $cmd . ' --event=y'; + } + else { + $cmd = $cmd . ' --event=n'; + } + + if ($Config{ZM_OPT_ALS_ALARM} ) { + $cmd = $cmd . ' --alarm=y'; + } + else { + $cmd = $cmd . ' --alarm=n'; + } + runCommand($cmd); + } } else { $retval = 1; } From 896a05c65d03bea0303e6a9ba35adcf4db90e261 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Sat, 6 Aug 2022 09:22:38 -0400 Subject: [PATCH 043/122] Fix memleak due to not deleting okpt in VideoStore destructor --- src/zm_videostore.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zm_videostore.cpp b/src/zm_videostore.cpp index fe771160c..d7a721f06 100644 --- a/src/zm_videostore.cpp +++ b/src/zm_videostore.cpp @@ -747,6 +747,7 @@ VideoStore::~VideoStore() { avformat_free_context(oc); delete[] next_dts; next_dts = nullptr; + delete opkt; } // VideoStore::~VideoStore() bool VideoStore::setup_resampler() { From cad80eb37d12630dadcccb5f657bd05fa23e9810 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Sat, 6 Aug 2022 09:54:23 -0400 Subject: [PATCH 044/122] Revert "Fix memleak due to not deleting okpt in VideoStore destructor" This reverts commit 896a05c65d03bea0303e6a9ba35adcf4db90e261. --- src/zm_videostore.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/zm_videostore.cpp b/src/zm_videostore.cpp index d7a721f06..fe771160c 100644 --- a/src/zm_videostore.cpp +++ b/src/zm_videostore.cpp @@ -747,7 +747,6 @@ VideoStore::~VideoStore() { avformat_free_context(oc); delete[] next_dts; next_dts = nullptr; - delete opkt; } // VideoStore::~VideoStore() bool VideoStore::setup_resampler() { From d0a7b5128335c2f75af061447c548d43c59cc41c Mon Sep 17 00:00:00 2001 From: Ratchanan Srirattanamet Date: Mon, 8 Aug 2022 03:13:08 +0700 Subject: [PATCH 045/122] db: start the processing thread after all fields are initialized Initializing `zmDbQueue::mThread` with initializer list makes the thread start in the middle of object initialization. This means `zmDbQueue:: process()` could start and reach mCondition.wait(lock); before `std:: wait_condition`'s constructor, which causes deadlock. To make sure thread won't start before object initialize, move `mThread`'s initialization to constructor's body. This _at last_ solves the random zmu deadlock issue that has plagued my setup for almost a year. --- src/zm_db.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/zm_db.cpp b/src/zm_db.cpp index eda0b3166..29e805a65 100644 --- a/src/zm_db.cpp +++ b/src/zm_db.cpp @@ -227,9 +227,10 @@ zmDbRow::~zmDbRow() { } zmDbQueue::zmDbQueue() : - mThread(&zmDbQueue::process, this), mTerminate(false) -{ } +{ + mThread = std::thread(&zmDbQueue::process, this); +} zmDbQueue::~zmDbQueue() { stop(); From d1b5451c7e632e90b352bad12dc307677ae35a26 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 8 Aug 2022 13:57:09 -0400 Subject: [PATCH 046/122] Ignore errors decoding log message --- web/skins/classic/views/js/log.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/skins/classic/views/js/log.js b/web/skins/classic/views/js/log.js index 8bad64bf1..d3824ab0d 100644 --- a/web/skins/classic/views/js/log.js +++ b/web/skins/classic/views/js/log.js @@ -42,7 +42,11 @@ function ajaxRequest(params) { } function processRows(rows) { $j.each(rows, function(ndx, row) { - row.Message = decodeURIComponent(row.Message); + try { + row.Message = decodeURIComponent(row.Message); + } catch(e) { + // ignore errors + } }); return rows; } From eb9ccf41f273d9f95ad03ec0a2b1fce578ccdfb4 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 8 Aug 2022 13:58:22 -0400 Subject: [PATCH 047/122] keyframe_interval gets reset so can give erroneous logs. Use a second variable to start the actual found keyframe interval. Use a const ref to prevent copying in notify_all --- src/zm_packetqueue.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index de545d166..6f77c5ec5 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -262,7 +262,9 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { return; } - int keyframe_interval = 1; + int max_keyframe_interval = 1; + int keyframe_interval_count = 1; + ZMLockedPacket *lp = new ZMLockedPacket(zm_packet); if (!lp->trylock()) { Debug(4, "Failed getting lock on first packet"); @@ -297,11 +299,13 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { if (zm_packet->packet->stream_index == video_stream_id) { if (zm_packet->keyframe) { - Debug(4, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval); - keyframe_interval = 1; + Debug(4, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval_count); + + if (max_keyframe_interval < keyframe_interval_count) max_keyframe_interval = keyframe_interval_count; + keyframe_interval_count = 1; next_front = it; } else { - keyframe_interval++; + keyframe_interval_count++; } ++video_packets_to_delete; if (packet_counts[video_stream_id] - video_packets_to_delete <= pre_event_video_packet_count + tail_count) { @@ -313,7 +317,7 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { ++it; } // end while - if ((keyframe_interval == 1) and max_video_packet_count) { + if ((max_keyframe_interval == 1) and max_video_packet_count) { Warning("Did not find a second keyframe in the packet queue. It may be that" " the Max Image Buffer setting is lower than the keyframe interval. We" " need it to be greater than the keyframe interval."); @@ -321,7 +325,7 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { Debug(1, "Resulting it pointing at latest packet? %d, next front points to begin? %d, Keyframe interval %d", ( *it == add_packet ), ( next_front == pktQueue.begin() ), - keyframe_interval + keyframe_interval_count ); if (next_front != pktQueue.begin()) { while (pktQueue.begin() != next_front) { @@ -350,7 +354,7 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { void PacketQueue::stop() { deleting = true; condition.notify_all(); - for (const auto p : pktQueue) p->notify_all(); + for (const auto &p : pktQueue) p->notify_all(); } void PacketQueue::clear() { From d41792ae00711280d478ef39501ae9ce297d82bc Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 8 Aug 2022 23:45:53 -0500 Subject: [PATCH 048/122] Adds Janus options Profile-ID Override and Use RTSP Restream to work around camera issues --- db/zm_create.sql.in | 2 ++ db/zm_update-1.37.20.sql | 37 ++++++++++++++++++++++++ src/zm_monitor.cpp | 9 ++++-- src/zm_monitor.h | 4 +++ src/zm_monitor_janus.cpp | 45 +++++++++++++++++++---------- web/includes/Monitor.php | 2 ++ web/includes/actions/monitor.php | 1 + web/lang/en_gb.php | 10 +++++++ web/skins/classic/views/monitor.php | 22 ++++++++++++++ 9 files changed, 113 insertions(+), 19 deletions(-) create mode 100644 db/zm_update-1.37.20.sql diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 659064fe3..75f264a0a 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -465,6 +465,8 @@ CREATE TABLE `Monitors` ( `Decoding` enum('None','Ondemand','KeyFrames','KeyFrames+Ondemand', 'Always') NOT NULL default 'Always', `JanusEnabled` BOOLEAN NOT NULL default false, `JanusAudioEnabled` BOOLEAN NOT NULL default false, + `Janus_Profile_Override` VARCHAR(30) NOT NULL DEFAULT '', + `Janus_Use_RTSP_Restream` BOOLEAN NOT NULL default false, `LinkedMonitors` varchar(255), `Triggers` set('X10') NOT NULL default '', `EventStartCommand` VARCHAR(255) NOT NULL DEFAULT '', diff --git a/db/zm_update-1.37.20.sql b/db/zm_update-1.37.20.sql new file mode 100644 index 000000000..b74e9d064 --- /dev/null +++ b/db/zm_update-1.37.20.sql @@ -0,0 +1,37 @@ +-- +-- Update Monitors Table to include Janus_Profile_Override +-- + +SELECT 'Checking for Janus_Profile_Override in Monitors'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'Janus_Profile_Override' + ) > 0, +"SELECT 'Column Janus_Profile_Override already exists in Monitors'", +"ALTER TABLE Monitors ADD Janus_Profile_Override varchar(30) DEFAULT '' AFTER `JanusAudioEnabled`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +-- +-- Update Monitors Table to include Janus_Use_RTSP_Restream +-- + +SELECT 'Checking for Janus_Use_RTSP_Restream in Monitors'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'Janus_Use_RTSP_Restream' + ) > 0, +"SELECT 'Column Janus_Use_RTSP_Restream already exists in Monitors'", +"ALTER TABLE Monitors ADD Janus_Use_RTSP_Restream BOOLEAN NOT NULL DEFAULT false AFTER `Janus_Profile_Override`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 420551071..fb88a5a39 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -82,7 +82,7 @@ struct Namespace namespaces[] = std::string load_monitor_sql = "SELECT `Id`, `Name`, `ServerId`, `StorageId`, `Type`, `Capturing`+0, `Analysing`+0, `AnalysisSource`+0, `AnalysisImage`+0," "`Recording`+0, `RecordingSource`+0, `Decoding`+0, " -"`JanusEnabled`, `JanusAudioEnabled`, " +"`JanusEnabled`, `JanusAudioEnabled`, `Janus_Profile_Override`, `Janus_Use_RTSP_Restream`," "`LinkedMonitors`, `EventStartCommand`, `EventEndCommand`, `AnalysisFPSLimit`, `AnalysisUpdateDelay`, `MaxFPS`, `AlarmMaxFPS`," "`Device`, `Channel`, `Format`, `V4LMultiBuffer`, `V4LCapturesPerFrame`, " // V4L Settings "`Protocol`, `Method`, `Options`, `User`, `Pass`, `Host`, `Port`, `Path`, `SecondPath`, `Width`, `Height`, `Colours`, `Palette`, `Orientation`+0, `Deinterlacing`, " @@ -166,6 +166,8 @@ Monitor::Monitor() decoding(DECODING_ALWAYS), janus_enabled(false), janus_audio_enabled(false), + janus_profile_override(""), + janus_use_rtsp_restream(false), //protocol //method //options @@ -313,8 +315,7 @@ Monitor::Monitor() /* std::string load_monitor_sql = "SELECT `Id`, `Name`, `ServerId`, `StorageId`, `Type`, `Capturing`+0, `Analysing`+0, `AnalysisSource`+0, `AnalysisImage`+0," - "`Recording`+0, `RecordingSource`+0, - `Decoding`+0, JanusEnabled, JanusAudioEnabled, " + "`Recording`+0, `RecordingSource`+0, `Decoding`+0, JanusEnabled, JanusAudioEnabled, Janus_Profile_Override, Janus_Use_RTSP_Restream" "LinkedMonitors, `EventStartCommand`, `EventEndCommand`, " "AnalysisFPSLimit, AnalysisUpdateDelay, MaxFPS, AlarmMaxFPS," "Device, Channel, Format, V4LMultiBuffer, V4LCapturesPerFrame, " // V4L Settings @@ -375,6 +376,8 @@ void Monitor::Load(MYSQL_ROW dbrow, bool load_zones=true, Purpose p = QUERY) { // See below after save_jpegs for a recalculation of decoding_enabled janus_enabled = dbrow[col] ? atoi(dbrow[col]) : false; col++; janus_audio_enabled = dbrow[col] ? atoi(dbrow[col]) : false; col++; + janus_profile_override = std::string(dbrow[col] ? dbrow[col] : ""); col++; + janus_use_rtsp_restream = dbrow[col] ? atoi(dbrow[col]) : false; col++; linked_monitors_string = dbrow[col] ? dbrow[col] : ""; col++; event_start_command = dbrow[col] ? dbrow[col] : ""; col++; diff --git a/src/zm_monitor.h b/src/zm_monitor.h index 29d80ec77..0635516f8 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -338,6 +338,7 @@ protected: //helper class for CURL static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp); bool Janus_Healthy; + bool Use_RTSP_Restream; std::string janus_session; std::string janus_handle; std::string janus_endpoint; @@ -345,6 +346,7 @@ protected: std::string rtsp_username; std::string rtsp_password; std::string rtsp_path; + std::string profile_override; public: explicit JanusManager(Monitor *parent_); @@ -375,6 +377,8 @@ protected: DecodingOption decoding; // Whether the monitor will decode h264/h265 packets bool janus_enabled; // Whether we set the h264/h265 stream up on janus bool janus_audio_enabled; // Whether we tell Janus to try to include audio. + std::string janus_profile_override; // The Profile-ID to force the stream to use. + bool janus_use_rtsp_restream; // Point Janus at the ZM RTSP output, rather than the camera directly. std::string protocol; std::string method; diff --git a/src/zm_monitor_janus.cpp b/src/zm_monitor_janus.cpp index 0994b014f..d4c4d007f 100644 --- a/src/zm_monitor_janus.cpp +++ b/src/zm_monitor_janus.cpp @@ -25,7 +25,9 @@ Monitor::JanusManager::JanusManager(Monitor *parent_) : Janus_Healthy(false) { //constructor takes care of init and calls add_to - parent = parent_; + //parent = parent_; + Use_RTSP_Restream = parent->janus_use_rtsp_restream; + profile_override = parent->janus_profile_override; if ((config.janus_path != nullptr) && (config.janus_path[0] != '\0')) { janus_endpoint = config.janus_path; //remove the trailing slash if present @@ -33,22 +35,29 @@ Monitor::JanusManager::JanusManager(Monitor *parent_) : } else { janus_endpoint = "127.0.0.1:8088/janus"; } - std::size_t at_pos = parent->path.find("@", 7); - if (at_pos != std::string::npos) { - //If we find an @ symbol, we have a username/password. Otherwise, passwordless login. - std::size_t colon_pos = parent->path.find(":", 7); //Search for the colon, but only after the rtsp:// text. - if (colon_pos == std::string::npos) { - //Looks like an invalid url - throw std::runtime_error("Cannot Parse URL for Janus."); - } - rtsp_username = parent->path.substr(7, colon_pos-7); - rtsp_password = parent->path.substr(colon_pos+1, at_pos - colon_pos - 1); - rtsp_path = "rtsp://"; - rtsp_path += parent->path.substr(at_pos + 1); - } else { + if (Use_RTSP_Restream) { + int restream_port = config.min_rtsp_port; rtsp_username = ""; rtsp_password = ""; - rtsp_path = parent->path; + rtsp_path = "rtsp://127.0.0.1:" + std::to_string(restream_port) + "/" + parent->rtsp_streamname; + } else { + std::size_t at_pos = parent->path.find("@", 7); + if (at_pos != std::string::npos) { + //If we find an @ symbol, we have a username/password. Otherwise, passwordless login. + std::size_t colon_pos = parent->path.find(":", 7); //Search for the colon, but only after the rtsp:// text. + if (colon_pos == std::string::npos) { + //Looks like an invalid url + throw std::runtime_error("Cannot Parse URL for Janus."); + } + rtsp_username = parent->path.substr(7, colon_pos-7); + rtsp_password = parent->path.substr(colon_pos+1, at_pos - colon_pos - 1); + rtsp_path = "rtsp://"; + rtsp_path += parent->path.substr(at_pos + 1); + } else { + rtsp_username = ""; + rtsp_password = ""; + rtsp_path = parent->path; + } } } @@ -108,7 +117,7 @@ int Monitor::JanusManager::check_janus() { curl_easy_cleanup(curl); if (res != CURLE_OK) { //may mean an error code thrown by Janus, because of a bad session - Warning("Attempted %s got %s", endpoint.c_str(), curl_easy_strerror(res)); + Warning("Attempted to send %s to %s and got %s", postData.c_str(), endpoint.c_str(), curl_easy_strerror(res)); janus_session = ""; janus_handle = ""; return -1; @@ -151,6 +160,10 @@ int Monitor::JanusManager::add_to_janus() { postData += "\", \"type\" : \"rtsp\", \"rtsp_quirk\" : true, "; postData += "\"url\" : \""; postData += rtsp_path; + if (profile_override[0] != '\0') { + postData += "\", \"videofmtp\" : \""; + postData += profile_override; + } if (rtsp_username != "") { postData += "\", \"rtsp_user\" : \""; postData += rtsp_username; diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 92f342c4a..655a1e6c2 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -146,6 +146,8 @@ public static function getStatuses() { 'Decoding' => 'Always', 'JanusEnabled' => array('type'=>'boolean','default'=>0), 'JanusAudioEnabled' => array('type'=>'boolean','default'=>0), + 'Janus_Profile_Override' => '', + 'Janus_Use_RTSP_Restream' => array('type'=>'boolean','default'=>0), 'LinkedMonitors' => array('type'=>'set', 'default'=>null), 'Triggers' => array('type'=>'set','default'=>''), 'EventStartCommand' => '', diff --git a/web/includes/actions/monitor.php b/web/includes/actions/monitor.php index b27ff4443..f22221bcb 100644 --- a/web/includes/actions/monitor.php +++ b/web/includes/actions/monitor.php @@ -91,6 +91,7 @@ if ($action == 'save') { 'DecodingEnabled' => 0, 'JanusEnabled' => 0, 'JanusAudioEnabled' => 0, + 'Janus_Use_RTSP_Restream' => 0, 'Exif' => 0, 'RTSPDescribe' => 0, 'V4LMultiBuffer' => '', diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index d93207f5d..d1a3d7b1e 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -891,6 +891,16 @@ None: No frames will be decoded, live view and thumbnails will not be available~ Attempt to enable audio in the Janus stream. Has no effect for cameras without audio support, but can prevent a stream playing if your camera sends an audio format unsupported by the browser.' ), + 'FUNCTION_JANUS_PROFILE_OVERRIDE' => array( + 'Help' => ' + Manually set a Profile-ID, which can force a browser to try to play a given stream. Try "42e01f" + for a universally supported value, or leave this blank to use the Profile-ID specified by the source.' + ), + 'FUNCTION_JANUS_USE_RTSP_RESTREAM' => array( + 'Help' => ' + If your camera will not work under Janus with any other options, enable this to use the ZoneMinder + RTSP restream as the Janus source.' + ), 'ImageBufferCount' => array( 'Help' => ' Number of raw images available in /dev/shm. Currently should be set in the 3-5 range. Used for live viewing.' diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 01a231c18..e5b88aec8 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -1180,6 +1180,7 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor ?> +
JanusAudioEnabled() ? ' checked="checked"' : '' ?>/> @@ -1190,6 +1191,27 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor ?> + + + +'.$OLANG['FUNCTION_JANUS_PROFILE_OVERRIDE']['Help'].'
'; + } +?> + + + + + Janus_Use_RTSP_Restream() ? ' checked="checked"' : '' ?>/> +'.$OLANG['FUNCTION_JANUS_USE_RTSP_RESTREAM']['Help'].''; + } +?> + + + DefaultRate()); ?> From 6c0e34e84bcfb64411521850571f19ee548c16c6 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 13:41:14 -0400 Subject: [PATCH 049/122] Fix loading info from ControlAddress. Fix path used when testing auth. --- .../lib/ZoneMinder/Control/Trendnet.pm | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm index 666350f31..b1ba74a39 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm @@ -25,22 +25,43 @@ our $ADDRESS = ''; use ZoneMinder::Logger qw(:all); use ZoneMinder::Config qw(:all); +use URI; + +sub credentials { + my $self = shift; + ($USERNAME, $PASSWORD) = @_; + Debug("Setting credentials to $USERNAME/$PASSWORD"); +} sub open { my $self = shift; $self->loadMonitor(); - if ( ( $self->{Monitor}->{ControlAddress} =~ /^(?https?:\/\/)?(?[^:@]+)?:?(?[^\/@]+)?@?(?
.*)$/ ) ) { + if ($self->{Monitor}{ControlAddress} + and + $self->{Monitor}{ControlAddress} ne 'user:pass@ip' + and + $self->{Monitor}{ControlAddress} ne 'user:port@ip' + and + ($self->{Monitor}->{ControlAddress} =~ /^(?https?:\/\/)?(?[^:@]+)?:?(?[^\/@]+)?@?(?
.*)$/) + ) { $PROTOCOL = $+{PROTOCOL} if $+{PROTOCOL}; $USERNAME = $+{USERNAME} if $+{USERNAME}; $PASSWORD = $+{PASSWORD} if $+{PASSWORD}; $ADDRESS = $+{ADDRESS} if $+{ADDRESS}; + } elsif ($self->{Monitor}{Path}) { + Debug("Using Path for credentials: $self->{Monitor}{Path}"); + + my $uri = URI->new($self->{Monitor}{Path}); + Debug("Using Path for credentials: $self->{Monitor}{Path}" . $uri->userinfo()); + ( $USERNAME, $PASSWORD ) = split(/:/, $uri->userinfo()) if $uri->userinfo(); + $ADDRESS = $uri->host(); } else { Error('Failed to parse auth from address ' . $self->{Monitor}->{ControlAddress}); $ADDRESS = $self->{Monitor}->{ControlAddress}; } if ( !($ADDRESS =~ /:/) ) { - Error('You generally need to also specify the port. I will append :80'); + Debug('You generally need to also specify the port. I will append :80'); $ADDRESS .= ':80'; } @@ -58,7 +79,7 @@ sub open { $self->{ua}->credentials($ADDRESS,$REALM,$USERNAME,$PASSWORD); # Detect REALM - my $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/cgi/ptdc.cgi'); + my $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/'); if ( $res->is_success ) { $self->{state} = 'open'; @@ -79,7 +100,7 @@ sub open { $REALM = $1; Debug("Changing REALM to $REALM"); $self->{ua}->credentials($ADDRESS,$REALM,$USERNAME,$PASSWORD); - $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/cgi/ptdc.cgi'); + $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/'); if ( $res->is_success() ) { $self->{state} = 'open'; return !undef; From f09355f2ffadf7af7d83e5c7fb5c2e8402c9bd4c Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 13:41:43 -0400 Subject: [PATCH 050/122] If monitor has Control configured and control supports rebooting, reboot camera on fail to capture. --- scripts/zmwatch.pl.in | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/zmwatch.pl.in b/scripts/zmwatch.pl.in index bf5120e41..5bba0e33c 100644 --- a/scripts/zmwatch.pl.in +++ b/scripts/zmwatch.pl.in @@ -78,7 +78,7 @@ $SIG{TERM} = \&TermHandler; $SIG{INT} = \&TermHandler; Info('Watchdog starting, pausing for '.START_DELAY.' seconds'); -sleep(START_DELAY); +#sleep(START_DELAY); my $dbh = zmDbConnect(); @@ -127,6 +127,12 @@ while (!$zm_terminate) { # We can't get the last capture time so can't be sure it's died, it might just be starting up. my $startup_time = zmGetStartupTime($monitor); if (($now - $startup_time) > $Config{ZM_WATCH_MAX_DELAY}) { + if ($monitor->ControlId()) { + my $control = $monitor->Control(); + if ($control->CanReboot() and $control->open()) { + $control->reboot(); + } + } $log->logPrint(ZoneMinder::Logger::WARNING+$monitor->ImportanceNumber(), "Restarting capture daemon for $$monitor{Name}, no image since startup. ". "Startup time was $startup_time - now $now > $Config{ZM_WATCH_MAX_DELAY}" @@ -146,9 +152,9 @@ while (!$zm_terminate) { my $image_delay = $now - $capture_time; Debug("Monitor $monitor->{Id} last captured $image_delay seconds ago, max is $max_image_delay"); if ($image_delay > $max_image_delay) { - $log->logPrint(ZoneMinder::Logger::WARNING+$monitor->ImportanceNumber(), - 'Restarting capture daemon for '.$monitor->{Name}. - ", time since last capture $image_delay seconds ($now-$capture_time)"); + $log->logPrint(ZoneMinder::Logger::WARNING+$monitor->ImportanceNumber(), + 'Restarting capture daemon for '.$monitor->{Name}. + ", time since last capture $image_delay seconds ($now-$capture_time)"); $monitor->control('restart'); next; } From e5c871ab7e54d14b2497e5919ed4390ced321795 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 14:35:17 -0400 Subject: [PATCH 051/122] Fix eslint --- web/skins/classic/views/js/log.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/js/log.js b/web/skins/classic/views/js/log.js index d3824ab0d..b29153051 100644 --- a/web/skins/classic/views/js/log.js +++ b/web/skins/classic/views/js/log.js @@ -44,7 +44,7 @@ function processRows(rows) { $j.each(rows, function(ndx, row) { try { row.Message = decodeURIComponent(row.Message); - } catch(e) { + } catch (e) { // ignore errors } }); From a83ed1dbf594fe1d105a7fb89b886f1742535048 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 15:01:25 -0400 Subject: [PATCH 052/122] Don't use array_keys_first as it doesn't exist in php < 7.3. --- web/skins/classic/views/monitor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 01a231c18..9dbf4fbb0 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -629,7 +629,7 @@ $localMethods = array( if (!ZM_HAS_V4L2) unset($localMethods['v4l2']); echo htmlSelect('newMonitor[Method]', $localMethods, - ((count($localMethods)<=1) ? array_key_first($localMethods) : $monitor->Method()), + ((count($localMethods)==1) ? array_keys($localMethods)[0] : $monitor->Method()), array('data-on-change'=>'submitTab', 'data-tab-name'=>$tab) ); ?> @@ -1125,6 +1125,7 @@ $videowriter_encoders = array( 'hevc_vaapi' => 'hevc_vaapi', 'libvpx-vp9' => 'libvpx-vp9', 'libsvtav1' => 'libsvtav1', + 'libaom-av1' => 'libaom-av1' ); echo htmlSelect('newMonitor[Encoder]', $videowriter_encoders, $monitor->Encoder());?> From 3034636501a7fedab4058b1fe2e8f54677496c13 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 15:47:39 -0400 Subject: [PATCH 053/122] Provide support for libaom-av1 --- src/zm_videostore.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zm_videostore.cpp b/src/zm_videostore.cpp index fe771160c..210d80f03 100644 --- a/src/zm_videostore.cpp +++ b/src/zm_videostore.cpp @@ -53,6 +53,7 @@ VideoStore::CodecData VideoStore::codec_data[] = { { AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ422P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_VP9, "vp9", "libvpx-vp9", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_AV1, "av1", "libsvtav1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, + { AV_CODEC_ID_AV1, "av1", "libaom-av1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, #else { AV_CODEC_ID_H265, "h265", "libx265", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P }, From ebd4a30666e30a61be44ddf9b954b7f4bc08cfbd Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 9 Aug 2022 15:04:09 -0500 Subject: [PATCH 054/122] Update ZM_MIN_RTSP_PORT description --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 3b975c5a2..34bfbf900 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -978,13 +978,12 @@ our @options = ( { name => 'ZM_MIN_RTSP_PORT', default => '', - description => 'Start of port range to contact for RTSP streaming video.', + description => 'Port used for RTSP streaming video.', help => q` - The beginng of a port range that will be used to offer + The port that will be used to offer RTSP streaming of live captured video. - Each monitor will use this value plus the Monitor Id to stream - content. So a value of 2000 here will cause a stream for Monitor 1 to - hit port 2001.`, + Each camera to be streamed must be enabled + under its misc tab.`, type => $types{integer}, category => 'network', }, From 2c48d83860c2ee652e3a0a5008aeeab077833673 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 9 Aug 2022 15:17:40 -0500 Subject: [PATCH 055/122] Properly hide Janus options when Janus is disabled for a given monitor. --- web/skins/classic/views/js/monitor.js | 10 +++++++++- web/skins/classic/views/monitor.php | 2 -- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/web/skins/classic/views/js/monitor.js b/web/skins/classic/views/js/monitor.js index f36f3e2b3..a80ea031f 100644 --- a/web/skins/classic/views/js/monitor.js +++ b/web/skins/classic/views/js/monitor.js @@ -262,18 +262,26 @@ function initPage() { window.location.assign('?view=console'); }); - //manage the Janus audio check + //manage the Janus settings div if (document.getElementsByName("newMonitor[JanusEnabled]")[0].checked) { document.getElementById("FunctionJanusAudioEnabled").hidden = false; + document.getElementById("FunctionJanusProfileOverride").hidden = false; + document.getElementById("FunctionJanusUseRTSPRestream").hidden = false; } else { document.getElementById("FunctionJanusAudioEnabled").hidden = true; + document.getElementById("FunctionJanusProfileOverride").hidden = true; + document.getElementById("FunctionJanusUseRTSPRestream").hidden = true; } document.getElementsByName("newMonitor[JanusEnabled]")[0].addEventListener('change', function() { if (this.checked) { document.getElementById("FunctionJanusAudioEnabled").hidden = false; + document.getElementById("FunctionJanusProfileOverride").hidden = false; + document.getElementById("FunctionJanusUseRTSPRestream").hidden = false; } else { document.getElementById("FunctionJanusAudioEnabled").hidden = true; + document.getElementById("FunctionJanusProfileOverride").hidden = true; + document.getElementById("FunctionJanusUseRTSPRestream").hidden = true; } }); diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index e5b88aec8..644e8f2fb 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -1180,7 +1180,6 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor ?> -
JanusAudioEnabled() ? ' checked="checked"' : '' ?>/> @@ -1211,7 +1210,6 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor ?> -
DefaultRate()); ?> From f5a6a0a5d937fcb32933fa3071d0743b82ba7146 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 9 Aug 2022 18:52:31 -0400 Subject: [PATCH 056/122] Test for existence of monitors[i] before trying to kill it just to reduce javascript errors --- web/skins/classic/views/js/montage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/skins/classic/views/js/montage.js b/web/skins/classic/views/js/montage.js index 4806c2ed4..6fc5522f0 100644 --- a/web/skins/classic/views/js/montage.js +++ b/web/skins/classic/views/js/montage.js @@ -265,8 +265,8 @@ function initPage() { // If you click on the navigation links, shut down streaming so the browser can process it document.querySelectorAll('#main-header-nav a').forEach(function(el) { el.onclick = function() { - for (var i = 0, length = monitors.length; i < length; i++) { - monitors[i].kill(); + for (let i = 0, length = monitors.length; i < length; i++) { + if (monitors[i]) monitors[i].kill(); } }; }); From 702df653f9e60c66c650b28551803c67248646e2 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 10 Aug 2022 03:59:18 -0500 Subject: [PATCH 057/122] Fix typo in field name --- web/skins/classic/views/monitor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index d34372d0e..b25b06cbc 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -1193,7 +1193,7 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor - + '.$OLANG['FUNCTION_JANUS_PROFILE_OVERRIDE']['Help'].''; From c18a5e422a030a09f9e3e157b65f512fb521e4f1 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 08:55:06 -0400 Subject: [PATCH 058/122] Rework code to be smaller. Don't require SystemView permission to post a log entry. Default to ERR if invalid err code provided instead of PANIC so that the log entry still gets saved --- web/ajax/log.php | 84 ++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 49 deletions(-) diff --git a/web/ajax/log.php b/web/ajax/log.php index 513c9f63f..0d371d52c 100644 --- a/web/ajax/log.php +++ b/web/ajax/log.php @@ -6,39 +6,33 @@ $message = ''; // INITIALIZE AND CHECK SANITY // -if ( !canView('System') ) - $message = 'Insufficient permissions to view log entries for user '.$user['Username']; // task must be set -if ( !isset($_REQUEST['task']) ) { +if (!isset($_REQUEST['task'])) { $message = 'This request requires a task to be set'; -} else if ( $_REQUEST['task'] != 'query' && $_REQUEST['task'] != 'create' ) { +} else if ($_REQUEST['task'] == 'query') { + if (!canView('System')) { + $message = 'Insufficient permissions to view log entries for user '.$user['Username']; + } else { + $data = queryRequest(); + } +} else if ($_REQUEST['task'] == 'create' ) { + global $user; + if (!$user) { + // We allow any logged in user to create logs. This opens us up to DOS by malicious user + $message = 'Insufficient permissions to view log entries for user '.$user['Username']; + } else { + createRequest(); + } +} else { // Only the query and create tasks are supported at the moment $message = 'Unrecognised task '.$_REQUEST['task']; -} else { - $task = $_REQUEST['task']; } -if ( $message ) { +if ($message) { ajaxError($message); return; } - -// -// MAIN LOOP -// - -switch ( $task ) { - case 'create' : - createRequest(); - break; - case 'query' : - $data = queryRequest(); - break; - default : - ZM\Fatal('Unrecognised task '.$task); -} // end switch task - ajaxResponse($data); // @@ -46,35 +40,29 @@ ajaxResponse($data); // function createRequest() { - if ( !empty($_POST['level']) && !empty($_POST['message']) ) { + if (!empty($_POST['level']) && !empty($_POST['message'])) { ZM\logInit(array('id'=>'web_js')); - $string = $_POST['message']; - $file = !empty($_POST['file']) ? preg_replace('/\w+:\/\/[\w.:]+\//', '', $_POST['file']) : ''; - if ( !empty($_POST['line']) ) { - $line = validInt($_POST['line']); - } else { - $line = NULL; - } + $line = empty($_POST['line']) ? NULL : validInt($_POST['line']); $levels = array_flip(ZM\Logger::$codes); - if ( !isset($levels[$_POST['level']]) ) { - ZM\Panic('Unexpected logger level '.$_POST['level']); + if (!isset($levels[$_POST['level']])) { + ZM\Error('Unexpected logger level '.$_POST['level']); + $_POST['level'] = 'ERR'; } $level = $levels[$_POST['level']]; - ZM\Logger::fetch()->logPrint($level, $string, $file, $line); + ZM\Logger::fetch()->logPrint($level, $_POST['message'], $file, $line); } else { ZM\Error('Invalid log create: '.print_r($_POST, true)); } } function queryRequest() { - // Offset specifies the starting row to return, used for pagination $offset = 0; - if ( isset($_REQUEST['offset']) ) { - if ( ( !is_int($_REQUEST['offset']) and !ctype_digit($_REQUEST['offset']) ) ) { + if (isset($_REQUEST['offset'])) { + if ((!is_int($_REQUEST['offset']) and !ctype_digit($_REQUEST['offset']))) { ZM\Error('Invalid value for offset: ' . $_REQUEST['offset']); } else { $offset = $_REQUEST['offset']; @@ -83,8 +71,8 @@ function queryRequest() { // Limit specifies the number of rows to return $limit = 100; - if ( isset($_REQUEST['limit']) ) { - if ( ( !is_int($_REQUEST['limit']) and !ctype_digit($_REQUEST['limit']) ) ) { + if (isset($_REQUEST['limit'])) { + if ((!is_int($_REQUEST['limit']) and !ctype_digit($_REQUEST['limit']))) { ZM\Error('Invalid value for limit: ' . $_REQUEST['limit']); } else { $limit = $_REQUEST['limit']; @@ -100,11 +88,11 @@ function queryRequest() { $col_alt = array('DateTime', 'Server'); $sort = 'TimeKey'; - if ( isset($_REQUEST['sort']) ) { + if (isset($_REQUEST['sort'])) { $sort = $_REQUEST['sort']; - if ( $sort == 'DateTime' ) $sort = 'TimeKey'; + if ($sort == 'DateTime') $sort = 'TimeKey'; } - if ( !in_array($sort, array_merge($columns, $col_alt)) ) { + if (!in_array($sort, array_merge($columns, $col_alt))) { ZM\Error('Invalid sort field: ' . $sort); return; } @@ -127,10 +115,9 @@ function queryRequest() { $advsearch = isset($_REQUEST['filter']) ? json_decode($_REQUEST['filter'], JSON_OBJECT_AS_ARRAY) : array(); // Search contains a user entered string to search on $search = isset($_REQUEST['search']) ? $_REQUEST['search'] : ''; - if ( count($advsearch) ) { - - foreach ( $advsearch as $col=>$text ) { - if ( !in_array($col, array_merge($columns, $col_alt)) ) { + if (count($advsearch)) { + foreach ($advsearch as $col=>$text) { + if (!in_array($col, array_merge($columns, $col_alt))) { ZM\Error("'$col' is not a searchable column name"); continue; } @@ -142,8 +129,7 @@ function queryRequest() { $wherevalues = $query['values']; $where = ' WHERE (' .implode(' OR ', $likes). ')'; - } else if ( $search != '' ) { - + } else if ($search != '') { $search = '%' .$search. '%'; foreach ( $columns as $col ) { array_push($likes, $col.' LIKE ?'); @@ -167,7 +153,7 @@ function queryRequest() { $results = dbFetchAll($query['sql'], NULL, $query['values']); global $dateTimeFormatter; - foreach ( $results as $row ) { + foreach ($results as $row) { $row['DateTime'] = $dateTimeFormatter->format($row['TimeKey']); $Server = ZM\Server::find_one(array('Id'=>$row['ServerId'])); From e10c1e8d65e10853a81c530dfabb74477d188687 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 09:18:15 -0400 Subject: [PATCH 059/122] Fix deprecation warning due to implicit conversion to integer. Make it explicit. --- web/ajax/watch.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/ajax/watch.php b/web/ajax/watch.php index 0642d4bfa..9229c99ac 100644 --- a/web/ajax/watch.php +++ b/web/ajax/watch.php @@ -65,7 +65,7 @@ foreach ( $rows as $row ) { $row['imgHtml'] = 'Event '.$event->Id().''; $row['Name'] = validHtmlStr($row['Name']); $row['StartDateTime'] = $dateTimeFormatter->format(strtotime($row['StartDateTime'])); - $row['Length'] = gmdate('H:i:s', $row['Length'] ); + $row['Length'] = gmdate('H:i:s', intval($row['Length'])); $returned_rows[] = $row; } # end foreach row matching search From 0078a6f639a0dcca727fbf626babad86fe266ac2 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 09:18:32 -0400 Subject: [PATCH 060/122] Log entire backtrace when invalid value for width --- web/includes/Monitor.php | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 655a1e6c2..f703d4d34 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -843,12 +843,10 @@ public static function getStatuses() { */ function getStreamHTML($options) { if (isset($options['scale']) and $options['scale'] != '' and $options['scale'] != 'fixed') { - Debug("Have scale:" . $options['scale']); - if ( $options['scale'] != 'auto' && $options['scale'] != '0' ) { - #ZM\Warning('Setting dimensions from scale:'.$options['scale']); + if ($options['scale'] != 'auto' && $options['scale'] != '0') { $options['width'] = reScale($this->ViewWidth(), $options['scale']).'px'; $options['height'] = reScale($this->ViewHeight(), $options['scale']).'px'; - } else if ( ! ( isset($options['width']) or isset($options['height']) ) ) { + } else if (!(isset($options['width']) or isset($options['height']))) { $options['width'] = '100%'; $options['height'] = 'auto'; } @@ -856,41 +854,35 @@ public static function getStatuses() { $options['scale'] = 100; # scale is empty or 100 # There may be a fixed width applied though, in which case we need to leave the height empty - if ( ! ( isset($options['width']) and $options['width'] ) ) { + if (!(isset($options['width']) and $options['width'])) { # Havn't specified width. If we specified height, then we should # use a width that keeps the aspect ratio, otherwise no scaling, # no dimensions, so assume the dimensions of the Monitor - if ( ! (isset($options['height']) and $options['height']) ) { + if (!(isset($options['height']) and $options['height'])) { # If we havn't specified any scale or dimensions, then we must be using CSS to scale it in a dynamic way. Can't make any assumptions. - #$options['width'] = $monitor->ViewWidth().'px'; - #$options['height'] = $monitor->ViewHeight().'px'; } } else { - #ZM\Warning("Have width ".$options['width']); - if ( preg_match('/^(\d+)px$/', $options['width'], $matches) ) { + if (preg_match('/^(\d+)px$/', $options['width'], $matches)) { $scale = intval(100*$matches[1]/$this->ViewWidth()); - #ZM\Warning("Scale is $scale"); - if ( $scale < $options['scale'] ) + if ($scale < $options['scale']) $options['scale'] = $scale; - } else if ( preg_match('/^(\d+)%$/', $options['width'], $matches) ) { + } else if (preg_match('/^(\d+)%$/', $options['width'], $matches)) { $scale = intval($matches[1]); - if ( $scale < $options['scale'] ) + if ($scale < $options['scale']) $options['scale'] = $scale; } else { $backTrace = debug_backtrace(); - $file = $backTrace[1]['file']; - $line = $backTrace[1]['line']; - Warning('Invalid value for width: '.$options['width']. ' from '.$file.':'.$line); + Warning('Invalid value for width: '.$options['width']. ' from '.print_r($backTrace, true)); } } } - if ( ! isset($options['mode'] ) ) { + if (!isset($options['mode'])) { $options['mode'] = 'stream'; } - if ( ! isset($options['width'] ) ) + if (!isset($options['width'])) $options['width'] = 0; - if ( ! isset($options['height'] ) ) + if (!isset($options['height'])) $options['height'] = 0; if (!isset($options['maxfps'])) { From 3136f26e4072789928d79e32aff09749263dad38 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 10:31:57 -0400 Subject: [PATCH 061/122] Fix warnings about keyframe interval and maximagebuffer count on jpeg streams. --- src/zm_packetqueue.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 6f77c5ec5..01869c0dc 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -298,14 +298,13 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { #endif if (zm_packet->packet->stream_index == video_stream_id) { + keyframe_interval_count++; if (zm_packet->keyframe) { Debug(4, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval_count); if (max_keyframe_interval < keyframe_interval_count) max_keyframe_interval = keyframe_interval_count; keyframe_interval_count = 1; next_front = it; - } else { - keyframe_interval_count++; } ++video_packets_to_delete; if (packet_counts[video_stream_id] - video_packets_to_delete <= pre_event_video_packet_count + tail_count) { From 9480e34f2bb03595d3438015b582647d0b840c32 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 11:33:35 -0400 Subject: [PATCH 062/122] Add bionic and focal builds --- .github/workflows/create-packages.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/create-packages.yml b/.github/workflows/create-packages.yml index 5e7754e2d..7993d00b8 100644 --- a/.github/workflows/create-packages.yml +++ b/.github/workflows/create-packages.yml @@ -13,6 +13,10 @@ jobs: dist: buster - os: debian dist: bullseye + - os: bionic + dist: focal + - os: ubuntu + dist: focal runs-on: ubuntu-latest steps: From d970b02079dc9f1a001903468660ec1c8f0e5a02 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 11:53:05 -0400 Subject: [PATCH 063/122] Bump version to 1.37.20 to pickup Janus db changes --- distros/redhat/zoneminder.spec | 2 +- version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distros/redhat/zoneminder.spec b/distros/redhat/zoneminder.spec index b7a0ef948..a25094ead 100644 --- a/distros/redhat/zoneminder.spec +++ b/distros/redhat/zoneminder.spec @@ -37,7 +37,7 @@ %global _hardened_build 1 Name: zoneminder -Version: 1.37.19 +Version: 1.37.20 Release: 1%{?dist} Summary: A camera monitoring and analysis tool Group: System Environment/Daemons diff --git a/version b/version index b49b97a4b..6373bf824 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.37.19 +1.37.20 From 80227d749a6bfbe3211c432add9bd00866030419 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 11:56:34 -0400 Subject: [PATCH 064/122] Fix bionic-focal --- .github/workflows/create-packages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-packages.yml b/.github/workflows/create-packages.yml index 7993d00b8..57e911363 100644 --- a/.github/workflows/create-packages.yml +++ b/.github/workflows/create-packages.yml @@ -13,8 +13,8 @@ jobs: dist: buster - os: debian dist: bullseye - - os: bionic - dist: focal + - os: ubuntu + dist: bionic - os: ubuntu dist: focal runs-on: ubuntu-latest From 1f978f0ac2fe94cc6108c6834c20ee7a66550b3c Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 17:57:11 -0400 Subject: [PATCH 065/122] Detect out of order packets --- src/zm_packetqueue.cpp | 22 +++++++++++++++++++++- src/zm_packetqueue.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 01869c0dc..18d836c11 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -33,7 +33,8 @@ PacketQueue::PacketQueue(): packet_counts(nullptr), deleting(false), keep_keyframes(false), - warned_count(0) + warned_count(0), + has_out_of_order_packets_(false) { } @@ -87,6 +88,24 @@ bool PacketQueue::queuePacket(std::shared_ptr add_packet) { { std::unique_lock lck(mutex); if (deleting or zm_terminate) return false; + + if (!has_out_of_order_packets_ and (add_packet->packet->dts != AV_NOPTS_VALUE)) { + auto rit = pktQueue.rbegin(); + // Find the previous packet for the stream, and check dts + while (rit != pktQueue.rend()) { + if ((*rit)->packet->stream_index == add_packet->packet->stream_index) { + if ((*rit)->packet->dts >= add_packet->packet->dts) { + Debug(1, "Have out of order packets"); + ZM_DUMP_PACKET((*rit)->packet, "queued_packet"); + ZM_DUMP_PACKET(add_packet->packet, "add_packet"); + has_out_of_order_packets_ = true; + } + break; + } + rit++; + } // end while + } + pktQueue.push_back(add_packet); for ( auto iterators_it = iterators.begin(); @@ -358,6 +377,7 @@ void PacketQueue::stop() { void PacketQueue::clear() { deleting = true; + // Why are we notifying? condition.notify_all(); if (!packet_counts) // special case, not initialised return; diff --git a/src/zm_packetqueue.h b/src/zm_packetqueue.h index 340af7ddf..e468e2369 100644 --- a/src/zm_packetqueue.h +++ b/src/zm_packetqueue.h @@ -47,6 +47,7 @@ class PacketQueue { std::mutex mutex; std::condition_variable condition; int warned_count; + bool has_out_of_order_packets_; public: PacketQueue(); @@ -65,6 +66,7 @@ class PacketQueue { void dumpQueue(); unsigned int size(); unsigned int get_packet_count(int stream_id) const { return packet_counts[stream_id]; }; + bool has_out_of_order_packets() const { return has_out_of_order_packets_; }; void clearPackets(const std::shared_ptr &packet); int packet_count(int stream_id); From 852b67bf21c40806b3d5bb4b0376aeeef04d874d Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2022 15:30:36 -0400 Subject: [PATCH 066/122] Don't call format on an empty string and only pass the integer part of it --- web/ajax/log.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/ajax/log.php b/web/ajax/log.php index 0d371d52c..68fe41a25 100644 --- a/web/ajax/log.php +++ b/web/ajax/log.php @@ -154,7 +154,7 @@ function queryRequest() { global $dateTimeFormatter; foreach ($results as $row) { - $row['DateTime'] = $dateTimeFormatter->format($row['TimeKey']); + $row['DateTime'] = empty($row['TimeKey']) ? '' : $dateTimeFormatter->format(intval($row['TimeKey'])); $Server = ZM\Server::find_one(array('Id'=>$row['ServerId'])); $row['Server'] = $Server ? $Server->Name() : ''; From 71986a815ab832e59ed59eecee3b63418665a3e5 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 11 Aug 2022 12:56:11 -0400 Subject: [PATCH 067/122] Don't need max_keyframe_interval. Whether our it is still pointing at the front is enough. Only log the warning if the packetqueue is full and we couldn't find another keyframe. --- src/zm_packetqueue.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 18d836c11..8bfcad42a 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -281,7 +281,6 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { return; } - int max_keyframe_interval = 1; int keyframe_interval_count = 1; ZMLockedPacket *lp = new ZMLockedPacket(zm_packet); @@ -321,7 +320,6 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { if (zm_packet->keyframe) { Debug(4, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval_count); - if (max_keyframe_interval < keyframe_interval_count) max_keyframe_interval = keyframe_interval_count; keyframe_interval_count = 1; next_front = it; } @@ -335,11 +333,6 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { ++it; } // end while - if ((max_keyframe_interval == 1) and max_video_packet_count) { - Warning("Did not find a second keyframe in the packet queue. It may be that" - " the Max Image Buffer setting is lower than the keyframe interval. We" - " need it to be greater than the keyframe interval."); - } Debug(1, "Resulting it pointing at latest packet? %d, next front points to begin? %d, Keyframe interval %d", ( *it == add_packet ), ( next_front == pktQueue.begin() ), @@ -364,6 +357,12 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { pktQueue.pop_front(); packet_counts[zm_packet->packet->stream_index] -= 1; } + } else { + if (max_video_packet_count >= packet_counts[video_stream_id]) { + Warning("Did not find a second keyframe in the packet queue. It may be that" + " the Max Image Buffer setting is lower than the keyframe interval. We" + " need it to be greater than the keyframe interval + pre event count."); + } } // end if have at least max_video_packet_count video packets remaining return; From cdc356f547013eeae5b6177a5dd3d098ae4162e1 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 11 Aug 2022 13:23:13 -0400 Subject: [PATCH 068/122] Keep track of max_keyframe_interval and log it when complaining --- src/zm_packetqueue.cpp | 12 +++++++----- src/zm_packetqueue.h | 2 ++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 8bfcad42a..25fe58eb5 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -34,7 +34,8 @@ PacketQueue::PacketQueue(): deleting(false), keep_keyframes(false), warned_count(0), - has_out_of_order_packets_(false) + has_out_of_order_packets_(false), + max_keyframe_interval_(0) { } @@ -134,8 +135,8 @@ bool PacketQueue::queuePacket(std::shared_ptr add_packet) { warned_count++; Warning("You have set the max video packets in the queue to %u." " The queue is full. Either Analysis is not keeping up or" - " your camera's keyframe interval is larger than this setting." - , max_video_packet_count); + " your camera's keyframe interval %d is larger than this setting." + , max_video_packet_count, max_keyframe_interval_); } for ( @@ -318,8 +319,9 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { if (zm_packet->packet->stream_index == video_stream_id) { keyframe_interval_count++; if (zm_packet->keyframe) { - Debug(4, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval_count); - + Debug(3, "Have a video keyframe so setting next front to it. Keyframe interval so far is %d", keyframe_interval_count); + if (keyframe_interval_count > max_keyframe_interval_) + max_keyframe_interval_ = keyframe_interval_count; keyframe_interval_count = 1; next_front = it; } diff --git a/src/zm_packetqueue.h b/src/zm_packetqueue.h index e468e2369..e4405ba3a 100644 --- a/src/zm_packetqueue.h +++ b/src/zm_packetqueue.h @@ -48,6 +48,7 @@ class PacketQueue { std::condition_variable condition; int warned_count; bool has_out_of_order_packets_; + int max_keyframe_interval_; public: PacketQueue(); @@ -67,6 +68,7 @@ class PacketQueue { unsigned int size(); unsigned int get_packet_count(int stream_id) const { return packet_counts[stream_id]; }; bool has_out_of_order_packets() const { return has_out_of_order_packets_; }; + int get_max_keyframe_interval() const { return max_keyframe_interval_; }; void clearPackets(const std::shared_ptr &packet); int packet_count(int stream_id); From 1f9746e6c03eb759d7ffbe8fd38b4dcb9373a578 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 11 Aug 2022 15:10:49 -0400 Subject: [PATCH 069/122] Add bool stopping() to packetqueue. --- src/zm_packetqueue.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zm_packetqueue.h b/src/zm_packetqueue.h index e4405ba3a..52ec531f1 100644 --- a/src/zm_packetqueue.h +++ b/src/zm_packetqueue.h @@ -63,6 +63,7 @@ class PacketQueue { bool queuePacket(std::shared_ptr packet); void stop(); + bool stopping() const { return deleting; }; void clear(); void dumpQueue(); unsigned int size(); From cec9e32a79e782bb73682f7a35e8dc37b44f2c6e Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 11 Aug 2022 15:23:35 -0400 Subject: [PATCH 070/122] Use new packetqueue.stopping() to not wait when the packetqueue is stopping --- src/zm_monitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index fb88a5a39..d9f6dd35d 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -1919,13 +1919,13 @@ bool Monitor::Analyse() { /* try to stay behind the decoder. */ if (decoding != DECODING_NONE) { - while (!snap->decoded and !zm_terminate and !analysis_thread->Stopped()) { + while (!snap->decoded and !zm_terminate and !analysis_thread->Stopped() and !packetqueue.stopping()) { // Need to wait for the decoder thread. packetqueue.notify_all(); Debug(1, "Waiting for decode"); packet_lock->wait(); } // end while ! decoded - if (zm_terminate or analysis_thread->Stopped()) { + if (zm_terminate or analysis_thread->Stopped() or packetqueue.stopping()) { delete packet_lock; return false; } From 42d8be01ce6b3598130024602bbd0abf4ab96cd6 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 11 Aug 2022 20:40:03 -0400 Subject: [PATCH 071/122] set decoded=true and notify when deleting packets from queue. Analysing might be waiting on the packet. --- src/zm_packetqueue.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 25fe58eb5..41c65e18c 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -172,6 +172,9 @@ bool PacketQueue::queuePacket(std::shared_ptr add_packet) { } } // end foreach iterator + zm_packet->decoded = true; // Have to in case analysis is waiting on it + zm_packet->notify_all(); + it = pktQueue.erase(it); packet_counts[zm_packet->packet->stream_index] -= 1; Debug(1, @@ -246,12 +249,8 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { // If not doing passthrough, we don't care about starting with a keyframe so logic is simpler while ((*pktQueue.begin() != add_packet) and (packet_counts[video_stream_id] > pre_event_video_packet_count + tail_count)) { std::shared_ptr zm_packet = *pktQueue.begin(); - ZMLockedPacket *lp = new ZMLockedPacket(zm_packet); - if (!lp->trylock()) { - delete lp; - break; - } - delete lp; + ZMLockedPacket lp(zm_packet); + if (!lp.trylock()) break; if (is_there_an_iterator_pointing_to_packet(zm_packet)) { Warning("Found iterator at beginning of queue. Some thread isn't keeping up"); @@ -373,7 +372,9 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { void PacketQueue::stop() { deleting = true; condition.notify_all(); - for (const auto &p : pktQueue) p->notify_all(); + for (const auto &p : pktQueue) { + p->notify_all(); + } } void PacketQueue::clear() { From 39afe4fd24b8b22cad61890445634f1f5af56e85 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 12 Aug 2022 11:05:23 -0400 Subject: [PATCH 072/122] Remove warning about maxImageBuffer. It will be handled in queuePacket as it was before, only now we actually tell about the keyframe interval. It is entirely common to not get to another keyframe due to locked packets during event writing. --- src/zm_packetqueue.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 41c65e18c..fcad7b0ef 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -358,12 +358,6 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { pktQueue.pop_front(); packet_counts[zm_packet->packet->stream_index] -= 1; } - } else { - if (max_video_packet_count >= packet_counts[video_stream_id]) { - Warning("Did not find a second keyframe in the packet queue. It may be that" - " the Max Image Buffer setting is lower than the keyframe interval. We" - " need it to be greater than the keyframe interval + pre event count."); - } } // end if have at least max_video_packet_count video packets remaining return; From 1cf0245acacf75c32514e30a9d873510f0035731 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 12 Aug 2022 18:21:58 -0400 Subject: [PATCH 073/122] Don't set AVFMT_TS_NONSTRICT. Crashes on ffmpeg 5. Fixes #3497 --- src/zm_videostore.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zm_videostore.cpp b/src/zm_videostore.cpp index 210d80f03..2255595cf 100644 --- a/src/zm_videostore.cpp +++ b/src/zm_videostore.cpp @@ -155,7 +155,10 @@ bool VideoStore::open() { oc->metadata = pmetadata; // Dirty hack to allow us to set flags. Needed for ffmpeg5 out_format = const_cast(oc->oformat); + // ffmpeg 5 crashes if we do this +#if !LIBAVFORMAT_VERSION_CHECK(59, 16,100, 9, 0) out_format->flags |= AVFMT_TS_NONSTRICT; // allow non increasing dts +#endif const AVCodec *video_out_codec = nullptr; From 603d10a072a27990af2dba831aea38f30cf7434c Mon Sep 17 00:00:00 2001 From: "parvit (Vittorio Parrella)" Date: Mon, 15 Aug 2022 12:55:04 -0400 Subject: [PATCH 074/122] janus password integration --- src/zm_monitor_janus.cpp | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/zm_monitor_janus.cpp b/src/zm_monitor_janus.cpp index d4c4d007f..99665aa9b 100644 --- a/src/zm_monitor_janus.cpp +++ b/src/zm_monitor_janus.cpp @@ -18,7 +18,9 @@ // #include "zm_monitor.h" +#include +std::string escape_json_string( std::string input ); Monitor::JanusManager::JanusManager(Monitor *parent_) : parent(parent_), @@ -35,29 +37,19 @@ Monitor::JanusManager::JanusManager(Monitor *parent_) : } else { janus_endpoint = "127.0.0.1:8088/janus"; } + + rtsp_username = ""; + rtsp_password = ""; + if( parent->user.length() > 0 ) { + rtsp_username = escape_json_string(parent->user); + rtsp_password = escape_json_string(parent->pass); + } + if (Use_RTSP_Restream) { int restream_port = config.min_rtsp_port; - rtsp_username = ""; - rtsp_password = ""; rtsp_path = "rtsp://127.0.0.1:" + std::to_string(restream_port) + "/" + parent->rtsp_streamname; } else { - std::size_t at_pos = parent->path.find("@", 7); - if (at_pos != std::string::npos) { - //If we find an @ symbol, we have a username/password. Otherwise, passwordless login. - std::size_t colon_pos = parent->path.find(":", 7); //Search for the colon, but only after the rtsp:// text. - if (colon_pos == std::string::npos) { - //Looks like an invalid url - throw std::runtime_error("Cannot Parse URL for Janus."); - } - rtsp_username = parent->path.substr(7, colon_pos-7); - rtsp_password = parent->path.substr(colon_pos+1, at_pos - colon_pos - 1); - rtsp_path = "rtsp://"; - rtsp_path += parent->path.substr(at_pos + 1); - } else { - rtsp_username = ""; - rtsp_password = ""; - rtsp_path = parent->path; - } + rtsp_path = parent->path; } } @@ -164,7 +156,7 @@ int Monitor::JanusManager::add_to_janus() { postData += "\", \"videofmtp\" : \""; postData += profile_override; } - if (rtsp_username != "") { + if (rtsp_username.length() > 0) { postData += "\", \"rtsp_user\" : \""; postData += rtsp_username; postData += "\", \"rtsp_pwd\" : \""; @@ -292,3 +284,15 @@ int Monitor::JanusManager::get_janus_handle() { janus_handle = response.substr(pos + 6, 16); return 1; } //get_janus_handle + +std::string escape_json_string( std::string input ) { + std::string tmp; + tmp = std::regex_replace(input, std::regex("\n"), "\\n"); + tmp = std::regex_replace(tmp, std::regex("\b"), "\\b"); + tmp = std::regex_replace(tmp, std::regex("\f"), "\\f"); + tmp = std::regex_replace(tmp, std::regex("\r"), "\\r"); + tmp = std::regex_replace(tmp, std::regex("\t"), "\\t"); + tmp = std::regex_replace(tmp, std::regex("\""), "\\\""); + tmp = std::regex_replace(tmp, std::regex("\\"), "\\\\"); + return tmp; +} From de5b8bd8935837e59422b622d732ac3ebe0c92a1 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 13:01:49 -0400 Subject: [PATCH 075/122] Handle width=100% and remove code that worked around montage layouts with width=%. --- web/js/MonitorStream.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/js/MonitorStream.js b/web/js/MonitorStream.js index 48bf113bd..6578c89f8 100644 --- a/web/js/MonitorStream.js +++ b/web/js/MonitorStream.js @@ -114,7 +114,13 @@ function MonitorStream(monitorData) { } } else if (parseInt(width) || parseInt(height)) { if (width) { - newscale = parseInt(100*parseInt(width)/this.width); + if (width.search('px') != -1) { + newscale = parseInt(100*parseInt(width)/this.width); + } else { // % + // Set it, then get the calculated width + monitor_frame.css('width', width); + newscale = parseInt(100*parseInt(monitor_frame.width())/this.width); + } } else if (height) { newscale = parseInt(100*parseInt(height)/this.height); width = parseInt(this.width * newscale / 100)+'px'; @@ -124,10 +130,11 @@ function MonitorStream(monitorData) { width = Math.round(parseInt(this.width) * newscale / 100)+'px'; height = Math.round(parseInt(this.height) * newscale / 100)+'px'; } - if (width && (width != '0px') && - ((monitor_frame[0].style.width===undefined) || (-1 == monitor_frame[0].style.width.search('%'))) + if (width && (width != '0px') + // This next is for montage layouts where we use things like 33% + //&& ((monitor_frame[0].style.width===undefined) || (-1 == monitor_frame[0].style.width.search('%'))) ) { - monitor_frame.css('width', width); + monitor_frame.css('width', parseInt(width)); } if (height && height != '0px') img.style.height = height; @@ -143,6 +150,7 @@ function MonitorStream(monitorData) { const stream_frame = $j('#monitor'+this.id); if (!newscale) { newscale = parseInt(100*parseInt(stream_frame.width())/this.width); + console.log("Calculated stream scale from ", stream_frame.width(), '/', this.width, '=', newscale); } if (img.nodeName == 'IMG') { if (newscale > 100) newscale = 100; // we never request a larger image, as it just wastes bandwidth From baa45bff4b686383eb4b7701bddd9daac7b306e9 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 13:02:55 -0400 Subject: [PATCH 076/122] Don't setScale after layout, just do setSteamScale because setScale will alter widths and heights --- web/skins/classic/views/js/montage.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/web/skins/classic/views/js/montage.js b/web/skins/classic/views/js/montage.js index 6fc5522f0..beb37a61c 100644 --- a/web/skins/classic/views/js/montage.js +++ b/web/skins/classic/views/js/montage.js @@ -1,3 +1,4 @@ +const monitors = new Array(); const VIEWING = 0; const EDITING = 1; @@ -65,14 +66,9 @@ function selectLayout(new_layout_id) { //$j('#height').val('auto'); } - var width = $j('#width').val(); - var height = $j('#height').val(); - var scale = $j('#scale').val(); - for (var i = 0, length = monitors.length; i < length; i++) { - var monitor = monitors[i]; - monitor.setScale(scale, width, height); + for (let i = 0, length = monitors.length; i < length; i++) { + monitors[i].setStreamScale(); } // end foreach monitor - console.log("Done selectLayout"); } // end function selectLayout(element) function changeHeight() { @@ -235,7 +231,6 @@ function handleClick(evt) { } } -const monitors = new Array(); function initPage() { $j("#hdrbutton").click(function() { $j("#flipMontageHeader").slideToggle("slow"); From 071147fba71c5b8fed8f74bf03ad3b0abfb9c906 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 13:04:50 -0400 Subject: [PATCH 077/122] Remove no longer used code to protect percentage widths --- web/js/MonitorStream.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/web/js/MonitorStream.js b/web/js/MonitorStream.js index 6578c89f8..c61c3e55d 100644 --- a/web/js/MonitorStream.js +++ b/web/js/MonitorStream.js @@ -130,10 +130,7 @@ function MonitorStream(monitorData) { width = Math.round(parseInt(this.width) * newscale / 100)+'px'; height = Math.round(parseInt(this.height) * newscale / 100)+'px'; } - if (width && (width != '0px') - // This next is for montage layouts where we use things like 33% - //&& ((monitor_frame[0].style.width===undefined) || (-1 == monitor_frame[0].style.width.search('%'))) - ) { + if (width && (width != '0px')) { monitor_frame.css('width', parseInt(width)); } if (height && height != '0px') img.style.height = height; From 408b42edd4f3b9ba4190c33111f5aad3b8c8e810 Mon Sep 17 00:00:00 2001 From: "parvit (Vittorio Parrella)" Date: Mon, 15 Aug 2022 14:30:48 -0400 Subject: [PATCH 078/122] correct regex escaping --- src/zm_monitor_janus.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/zm_monitor_janus.cpp b/src/zm_monitor_janus.cpp index 99665aa9b..e72468eb6 100644 --- a/src/zm_monitor_janus.cpp +++ b/src/zm_monitor_janus.cpp @@ -287,12 +287,12 @@ int Monitor::JanusManager::get_janus_handle() { std::string escape_json_string( std::string input ) { std::string tmp; - tmp = std::regex_replace(input, std::regex("\n"), "\\n"); - tmp = std::regex_replace(tmp, std::regex("\b"), "\\b"); - tmp = std::regex_replace(tmp, std::regex("\f"), "\\f"); - tmp = std::regex_replace(tmp, std::regex("\r"), "\\r"); - tmp = std::regex_replace(tmp, std::regex("\t"), "\\t"); - tmp = std::regex_replace(tmp, std::regex("\""), "\\\""); - tmp = std::regex_replace(tmp, std::regex("\\"), "\\\\"); + tmp = regex_replace(input, regex("\n"), "\\n"); + tmp = regex_replace(tmp, regex("\b"), "\\b"); + tmp = regex_replace(tmp, regex("\f"), "\\f"); + tmp = regex_replace(tmp, regex("\r"), "\\r"); + tmp = regex_replace(tmp, regex("\t"), "\\t"); + tmp = regex_replace(tmp, regex("\""), "\\\""); + tmp = regex_replace(tmp, regex("[\\\\]"), "\\\\"); return tmp; } From 3642abd1551d6e977f4e2dc075fd8ccfc2255660 Mon Sep 17 00:00:00 2001 From: "parvit (Vittorio Parrella)" Date: Mon, 15 Aug 2022 14:35:16 -0400 Subject: [PATCH 079/122] typo --- src/zm_monitor_janus.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/zm_monitor_janus.cpp b/src/zm_monitor_janus.cpp index e72468eb6..630455259 100644 --- a/src/zm_monitor_janus.cpp +++ b/src/zm_monitor_janus.cpp @@ -287,12 +287,12 @@ int Monitor::JanusManager::get_janus_handle() { std::string escape_json_string( std::string input ) { std::string tmp; - tmp = regex_replace(input, regex("\n"), "\\n"); - tmp = regex_replace(tmp, regex("\b"), "\\b"); - tmp = regex_replace(tmp, regex("\f"), "\\f"); - tmp = regex_replace(tmp, regex("\r"), "\\r"); - tmp = regex_replace(tmp, regex("\t"), "\\t"); - tmp = regex_replace(tmp, regex("\""), "\\\""); - tmp = regex_replace(tmp, regex("[\\\\]"), "\\\\"); + tmp = regex_replace(input, std::regex("\n"), "\\n"); + tmp = regex_replace(tmp, std::regex("\b"), "\\b"); + tmp = regex_replace(tmp, std::regex("\f"), "\\f"); + tmp = regex_replace(tmp, std::regex("\r"), "\\r"); + tmp = regex_replace(tmp, std::regex("\t"), "\\t"); + tmp = regex_replace(tmp, std::regex("\""), "\\\""); + tmp = regex_replace(tmp, std::regex("[\\\\]"), "\\\\"); return tmp; } From aa030afcb6eb1bbea87ac9ded5bc53614546d64d Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 17:58:56 -0400 Subject: [PATCH 080/122] Make checkCommandQueue it's own thread, meaning we use blocking I/O and will still respond when it takes forever to send a jpeg. Make warning about broken stream into a Debug. The signal doesn't set zm_terminate fast enough. --- src/zm_eventstream.cpp | 28 ++++++++++---------- src/zm_monitorstream.cpp | 36 +++++++++++++------------- src/zm_stream.cpp | 55 +++++++++++++++++++++------------------- src/zm_stream.h | 4 ++- 4 files changed, 63 insertions(+), 60 deletions(-) diff --git a/src/zm_eventstream.cpp b/src/zm_eventstream.cpp index 9dafae3cd..09dd2554c 100644 --- a/src/zm_eventstream.cpp +++ b/src/zm_eventstream.cpp @@ -842,25 +842,17 @@ void EventStream::runStream() { SystemTimePoint::duration last_frame_offset = Seconds(0); SystemTimePoint::duration time_to_event = Seconds(0); + std::thread command_processor; + if (connkey) { + command_processor = std::thread(&EventStream::checkCommandQueue, this); + } + while ( !zm_terminate ) { now = std::chrono::steady_clock::now(); Microseconds delta = Microseconds(0); send_frame = false; - if ( connkey ) { - // commands may set send_frame to true - while ( checkCommandQueue() && !zm_terminate ) { - // The idea is to loop here processing all commands before proceeding. - } - - // Update modified time of the socket .lock file so that we can tell which ones are stale. - if (now - last_comm_update > Hours(1)) { - touch(sock_path_lock); - last_comm_update = now; - } - } - // Get current frame data FrameData *frame_data = &event_data->frames[curr_frame_id-1]; @@ -1075,7 +1067,15 @@ void EventStream::runStream() { delete vid_stream; } - closeComms(); + if (connkey) { + if (command_processor.joinable()) { + Debug(1, "command_processor is joinable"); + command_processor.join(); + } else { + Debug(1, "command_processor is not joinable"); + } + command_processor.join(); + } } // end void EventStream::runStream() bool EventStream::send_file(const std::string &filepath) { diff --git a/src/zm_monitorstream.cpp b/src/zm_monitorstream.cpp index 9b6b4a0dd..0007fe292 100644 --- a/src/zm_monitorstream.cpp +++ b/src/zm_monitorstream.cpp @@ -429,7 +429,8 @@ bool MonitorStream::sendFrame(Image *image, SystemTimePoint timestamp) { ) { if (!zm_terminate) { // If the pipe was closed, we will get signalled SIGPIPE to exit, which will set zm_terminate - Warning("Unable to send stream frame: %s", strerror(errno)); + // ICON: zm_terminate might not get set yet. Make it a debug + Debug(1, "Unable to send stream frame: %s", strerror(errno)); } return false; } @@ -532,6 +533,12 @@ void MonitorStream::runStream() { } else { Debug(2, "Not using playback_buffer"); } // end if connkey && playback_buffer + + std::thread command_processor; + if (connkey) { + command_processor = std::thread(&MonitorStream::checkCommandQueue, this); + } + while (!zm_terminate) { if (feof(stdout)) { @@ -546,23 +553,6 @@ void MonitorStream::runStream() { monitor->setLastViewed(); bool was_paused = paused; - bool got_command = false; // commands like zoom should output a frame even if paused - if (connkey) { - while (checkCommandQueue() && !zm_terminate) { - Debug(2, "checking command Queue for connkey: %d", connkey); - // Loop in here until all commands are processed. - Debug(2, "Have checking command Queue for connkey: %d", connkey); - got_command = true; - } - if (zm_terminate) break; - // Update modified time of the socket .lock file so that we can tell which ones are stale. - if (now - last_comm_update > Hours(1)) { - touch(sock_path_lock); - last_comm_update = now; - } - } else { - Debug(1, "No connkey"); - } // end if connkey if (!checkInitialised()) { if (!loadMonitor(monitor_id)) { if (!sendTextFrame("Not connected")) { @@ -868,7 +858,15 @@ void MonitorStream::runStream() { if (zm_terminate) Debug(1, "zm_terminate"); - closeComms(); + if (connkey) { + if (command_processor.joinable()) { + Debug(1, "command_processor is joinable"); + command_processor.join(); + } else { + Debug(1, "command_processor is not joinable"); + } + command_processor.join(); + } } // end MonitorStream::runStream void MonitorStream::SingleImage(int scale) { diff --git a/src/zm_stream.cpp b/src/zm_stream.cpp index 7f6337a18..16f30795a 100644 --- a/src/zm_stream.cpp +++ b/src/zm_stream.cpp @@ -21,6 +21,8 @@ #include "zm_box.h" #include "zm_monitor.h" +#include "zm_signal.h" + #include #include #include @@ -108,34 +110,35 @@ void StreamBase::updateFrameRate(double fps) { } } // void StreamBase::updateFrameRate(double fps) -bool StreamBase::checkCommandQueue() { - if ( sd >= 0 ) { - CmdMsg msg; - memset(&msg, 0, sizeof(msg)); - int nbytes = recvfrom(sd, &msg, sizeof(msg), MSG_DONTWAIT, 0, 0); - if ( nbytes < 0 ) { - if ( errno != EAGAIN ) { - Error("recvfrom(), errno = %d, error = %s", errno, strerror(errno)); - return false; +void StreamBase::checkCommandQueue() { + while (!zm_terminate) { + // Update modified time of the socket .lock file so that we can tell which ones are stale. + if (now - last_comm_update > Hours(1)) { + touch(sock_path_lock); + last_comm_update = now; + } + + if (sd >= 0) { + CmdMsg msg; + memset(&msg, 0, sizeof(msg)); + int nbytes = recvfrom(sd, &msg, sizeof(msg), 0, /*MSG_DONTWAIT*/ 0, 0); + if (nbytes < 0) { + if (errno != EAGAIN) { + Error("recvfrom(), errno = %d, error = %s", errno, strerror(errno)); + } + } else { + Debug(2, "Message length is (%d)", nbytes); + processCommand(&msg); + got_command = true; } + } else if (connkey) { + Warning("No sd in checkCommandQueue, comms not open for connkey %06d?", connkey); + } else { + // Perfectly valid if only getting a snapshot + Debug(1, "No sd in checkCommandQueue, comms not open."); } - //else if ( (nbytes != sizeof(msg)) ) - //{ - //Error( "Partial message received, expected %d bytes, got %d", sizeof(msg), nbytes ); - //} - else { - Debug(2, "Message length is (%d)", nbytes); - processCommand(&msg); - return true; - } - } else if ( connkey ) { - Warning("No sd in checkCommandQueue, comms not open for connkey %06d?", connkey); - } else { - // Perfectly valid if only getting a snapshot - Debug(1, "No sd in checkCommandQueue, comms not open."); - } - return false; -} // end bool StreamBase::checkCommandQueue() + } // end while !zm_terminate +} // end void StreamBase::checkCommandQueue() Image *StreamBase::prepareImage(Image *image) { /* zooming should happen before scaling to preserve quality diff --git a/src/zm_stream.h b/src/zm_stream.h index fd5a27a3e..d46e89893 100644 --- a/src/zm_stream.h +++ b/src/zm_stream.h @@ -146,6 +146,7 @@ protected: VideoStream *vid_stream; CmdMsg msg; + bool got_command = false; // commands like zoom should output a frame even if paused unsigned char *temp_img_buffer; // Used when encoding or sending file data size_t temp_img_buffer_size; @@ -155,7 +156,7 @@ protected: bool checkInitialised(); void updateFrameRate(double fps); Image *prepareImage(Image *image); - bool checkCommandQueue(); + void checkCommandQueue(); virtual void processCommand(const CmdMsg *msg)=0; public: @@ -189,6 +190,7 @@ public: frame_count(0), last_frame_count(0), frame_mod(1), + got_command(false), temp_img_buffer(nullptr), temp_img_buffer_size(0) { From a41cba5c3301b5b797250d4a5a2cf9e1139f8064 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 17:59:17 -0400 Subject: [PATCH 081/122] Quote and spacing --- web/ajax/stream.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/web/ajax/stream.php b/web/ajax/stream.php index 492d8d8bd..3fc91c7c8 100644 --- a/web/ajax/stream.php +++ b/web/ajax/stream.php @@ -19,14 +19,14 @@ $semaphore_tries = 10; $have_semaphore = false; while ($semaphore_tries) { - if ( version_compare( phpversion(), '5.6.1', '<') ) { + if (version_compare( phpversion(), '5.6.1', '<')) { # don't have support for non-blocking $have_semaphore = sem_acquire($semaphore); } else { $have_semaphore = sem_acquire($semaphore, 1); } if ($have_semaphore !== false) break; - ZM\Debug("Failed to get semaphore, trying again"); + ZM\Debug('Failed to get semaphore, trying again'); usleep(100000); $semaphore_tries -= 1; } @@ -114,7 +114,7 @@ if ($have_semaphore !== false) { } else if ( $numSockets < 0 ) { ajaxError("Socket closed $remSockFile"); } else if ( $numSockets == 0 ) { - ZM\Error("Timed out waiting for msg $remSockFile"); + ZM\Error("Timed out waiting for msg $remSockFile after waiting $timeout seconds"); socket_set_nonblock($socket); #ajaxError("Timed out waiting for msg $remSockFile"); } else if ( $numSockets > 0 ) { @@ -123,7 +123,7 @@ if ($have_semaphore !== false) { } } - switch( $nbytes = @socket_recvfrom($socket, $msg, MSG_DATA_SIZE, 0, $remSockFile) ) { + switch ($nbytes = @socket_recvfrom($socket, $msg, MSG_DATA_SIZE, 0, $remSockFile)) { case -1 : ajaxError("socket_recvfrom( $remSockFile ) failed: ".socket_strerror(socket_last_error())); break; @@ -180,7 +180,7 @@ if ($have_semaphore !== false) { } sem_release($semaphore); } else { - ajaxError("Unable to get semaphore."); + ajaxError('Unable to get semaphore.'); } ajaxError('Unrecognised action or insufficient permissions in ajax/stream'); From 9501da8a4108d3eff5cf1eb9af3b4332cdf5dd81 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 15 Aug 2022 17:59:25 -0400 Subject: [PATCH 082/122] Remove debug --- web/includes/functions.php | 1 - 1 file changed, 1 deletion(-) diff --git a/web/includes/functions.php b/web/includes/functions.php index 165c8f2c3..03a2727d8 100644 --- a/web/includes/functions.php +++ b/web/includes/functions.php @@ -720,7 +720,6 @@ function canStreamIframe() { } function canStreamNative() { - ZM\Debug("ZM_WEB_CAN_STREAM:".ZM_WEB_CAN_STREAM.' isInternetExplorer: ' . isInternetExplorer() . ' isOldChrome:' . isOldChrome()); // Old versions of Chrome can display the stream, but then it blocks everything else (Chrome bug 5876) return ( ZM_WEB_CAN_STREAM == 'yes' || ( ZM_WEB_CAN_STREAM == 'auto' && (!isInternetExplorer() && !isOldChrome()) ) ); } From 6762ec5166a278d9f4846b09e9732a4783c74786 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 13:19:29 -0400 Subject: [PATCH 083/122] Split out realm detection and use it in sendCmdPost. Our initial query on / doesn't fail as the camera doesn't require authorization for /. --- .../lib/ZoneMinder/Control/Trendnet.pm | 123 ++++++++++-------- 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm index b1ba74a39..fa51eced5 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/Trendnet.pm @@ -26,6 +26,7 @@ our $ADDRESS = ''; use ZoneMinder::Logger qw(:all); use ZoneMinder::Config qw(:all); use URI; +use LWP::UserAgent; sub credentials { my $self = shift; @@ -65,64 +66,73 @@ sub open { $ADDRESS .= ':80'; } - use LWP::UserAgent; $self->{ua} = LWP::UserAgent->new; $self->{ua}->agent('ZoneMinder Control Agent/'.ZoneMinder::Base::ZM_VERSION); $self->{state} = 'closed'; # credentials: ("ip:port" (no prefix!), realm (string), username (string), password (string) - Debug ( "sendCmd credentials control address:'".$ADDRESS + Debug("sendCmd credentials control address:'".$ADDRESS ."' realm:'" . $REALM . "' username:'" . $USERNAME . "' password:'".$PASSWORD ."'" ); - $self->{ua}->credentials($ADDRESS,$REALM,$USERNAME,$PASSWORD); # Detect REALM - my $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/'); - - if ( $res->is_success ) { - $self->{state} = 'open'; + $REALM = $self->detect_realm($PROTOCOL, $ADDRESS, $REALM, $USERNAME, $PASSWORD, '/'); + if (defined($REALM)) { return !undef; } - - if ( $res->status_line() eq '401 Unauthorized' ) { - - my $headers = $res->headers(); - foreach my $k ( keys %$headers ) { - Debug("Initial Header $k => $$headers{$k}"); - } - - if ( $$headers{'www-authenticate'} ) { - my ( $auth, $tokens ) = $$headers{'www-authenticate'} =~ /^(\w+)\s+(.*)$/; - if ( $tokens =~ /\w+="([^"]+)"/i ) { - if ( $REALM ne $1 ) { - $REALM = $1; - Debug("Changing REALM to $REALM"); - $self->{ua}->credentials($ADDRESS,$REALM,$USERNAME,$PASSWORD); - $res = $self->{ua}->get($PROTOCOL.$ADDRESS.'/'); - if ( $res->is_success() ) { - $self->{state} = 'open'; - return !undef; - } - Error('Authentication still failed after updating REALM' . $res->status_line); - $headers = $res->headers(); - foreach my $k ( keys %$headers ) { - Debug("Initial Header $k => $$headers{$k}"); - } # end foreach - } else { - Error('Authentication failed, not a REALM problem'); - } - } else { - Error('Failed to match realm in tokens'); - } # end if - } else { - Debug('No headers line'); - } # end if headers - } # end if $res->status_line() eq '401 Unauthorized' return undef; } # end sub open +sub detect_realm { + my ($self, $protocol, $address, $realm, $username, $password, $url) = @_; + + $self->{ua}->credentials($address, $realm, $username, $password); + my $res = $self->{ua}->get($protocol.$address.$url); + + if ($res->is_success) { + Debug(1, 'Success opening without realm detection for '.$url); + return $realm; + } + + if ($res->status_line() ne '401 Unauthorized') { + return $realm; + } + + my $headers = $res->headers(); + foreach my $k ( keys %$headers ) { + Debug("Initial Header $k => $$headers{$k}"); + } + + if ($$headers{'www-authenticate'}) { + my ( $auth, $tokens ) = $$headers{'www-authenticate'} =~ /^(\w+)\s+(.*)$/; + if ( $tokens =~ /\w+="([^"]+)"/i ) { + if ($realm ne $1) { + $realm = $1; + Debug("Changing REALM to $realm"); + $self->{ua}->credentials($address, $realm, $username, $password); + $res = $self->{ua}->get($protocol.$address.$url); + if ($res->is_success()) { + return $realm; + } + Error('Authentication still failed after updating REALM' . $res->status_line); + $headers = $res->headers(); + foreach my $k ( keys %$headers ) { + Debug("Initial Header $k => $$headers{$k}"); + } # end foreach + } else { + Error('Authentication failed, not a REALM problem'); + } + } else { + Error('Failed to match realm in tokens'); + } # end if + } else { + Debug('No headers line'); + } # end if headers + return undef; +} + sub sendCmd { # This routine is used for all moving, which are all GET commands... my $self = shift; @@ -158,17 +168,14 @@ sub sendCmdPost { my $url = shift; my $form = shift; - my $result = undef; - - if ( $url eq undef ) { + if ($url eq undef) { Error('url passed to sendCmdPost is undefined.'); return -1; } - #Debug('sendCmdPost url: ' . $url . ' cmd: ' . $cmd); + Debug('sendCmdPost url: ' . $PROTOCOL.$ADDRESS.$url); - my $res; - $res = $self->{ua}->post( + my $res = $self->{ua}->post( $PROTOCOL.$ADDRESS.$url, Referer=>$PROTOCOL.$ADDRESS.$url, Content=>$form @@ -176,13 +183,19 @@ sub sendCmdPost { Debug("sendCmdPost credentials control to: $PROTOCOL$ADDRESS$url realm:'" . $REALM . "' username:'" . $USERNAME . "' password:'".$PASSWORD."'"); - if ( $res->is_success ) { - Debug($res->content); - return !undef; + if (!$res->is_success) { + Error("sendCmdPost Error check failed: '".$res->status_line()."' cmd:"); + my $new_realm = $self->detect_realm($PROTOCOL, $ADDRESS, $REALM, $USERNAME, $PASSWORD, $url); + if (defined($new_realm) and ($new_realm ne $REALM)) { + Debug("Success after re-detecting realm. New realm is $new_realm"); + return !undef; + } + Warning('Failed to reboot'); + return undef; } - Error("sendCmdPost Error check failed: '".$res->status_line()."' cmd:"); + Debug($res->content); - return $result; + return !undef; } # end sub sendCmdPost sub move { @@ -399,6 +412,10 @@ sub reset { sub reboot { my $self = shift; Debug('Camera Reboot'); + if (!$$self{open}) { + Warning("Not open. opening. Should call ->open() before calling reboot()"); + return if !$self->open(); + } $self->sendCmdPost('/eng/admin/reboot.cgi', { reboot => 'true' }); #$referer = 'http://'.$HI->ip().'/eng/admin/tools_default.cgi'; #$initial_url = $HI->ip().'/eng/admin/tools_default.cgi'; From b9c97e6795b8235644f0411fceed1c0d9a09becb Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 15:15:01 -0400 Subject: [PATCH 084/122] Fix crash due to deplicated join. Don't output BOUNDARY unless image loading suceeds --- src/zm_eventstream.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/zm_eventstream.cpp b/src/zm_eventstream.cpp index 09dd2554c..d3076c170 100644 --- a/src/zm_eventstream.cpp +++ b/src/zm_eventstream.cpp @@ -717,9 +717,8 @@ bool EventStream::sendFrame(Microseconds delta_us) { } else { bool send_raw = (type == STREAM_JPEG) && ((scale >= ZM_SCALE_BASE) && (zoom == ZM_SCALE_BASE)) && !filepath.empty(); - fprintf(stdout, "--" BOUNDARY "\r\n"); - if (send_raw) { + fprintf(stdout, "--" BOUNDARY "\r\n"); if (!send_file(filepath)) { Error("Can't send %s: %s", filepath.c_str(), strerror(errno)); return false; @@ -784,6 +783,7 @@ bool EventStream::sendFrame(Microseconds delta_us) { int img_buffer_size = 0; uint8_t *img_buffer = temp_img_buffer; + fprintf(stdout, "--" BOUNDARY "\r\n"); switch ( type ) { case STREAM_JPEG : send_image->EncodeJpeg(img_buffer, &img_buffer_size); @@ -1074,7 +1074,6 @@ void EventStream::runStream() { } else { Debug(1, "command_processor is not joinable"); } - command_processor.join(); } } // end void EventStream::runStream() From a26c9f09353c06d1e63f1bcbaf8c2bdc439df1df Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 15:16:22 -0400 Subject: [PATCH 085/122] Handle case where time_base is not set in the codec. Fixes h265 not playing right. Don't eek until a significant difference in time. Lots more debug output. Pass codec when initialising codec context. Mostly this fixes playback of h265 --- src/zm_ffmpeg_input.cpp | 90 ++++++++++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/src/zm_ffmpeg_input.cpp b/src/zm_ffmpeg_input.cpp index ab2429adb..314f45ecf 100644 --- a/src/zm_ffmpeg_input.cpp +++ b/src/zm_ffmpeg_input.cpp @@ -13,7 +13,7 @@ FFmpeg_Input::FFmpeg_Input() { } FFmpeg_Input::~FFmpeg_Input() { - if ( input_format_context ) { + if (input_format_context) { Close(); } } // end ~FFmpeg_Input() @@ -26,9 +26,9 @@ int FFmpeg_Input::Open( const AVStream * audio_in_stream, const AVCodecContext * audio_in_ctx ) { - int max_stream_index = video_stream_id = video_in_stream->index; + int max_stream_index = video_stream_id = video_in_stream->index; - if ( audio_in_stream ) { + if (audio_in_stream) { max_stream_index = video_in_stream->index > audio_in_stream->index ? video_in_stream->index : audio_in_stream->index; audio_stream_id = audio_in_stream->index; } @@ -61,17 +61,17 @@ int FFmpeg_Input::Open(const char *filepath) { streams = new stream[input_format_context->nb_streams]; Debug(2, "Have %d streams", input_format_context->nb_streams); - for ( unsigned int i = 0; i < input_format_context->nb_streams; i += 1 ) { - if ( is_video_stream(input_format_context->streams[i]) ) { + for (unsigned int i = 0; i < input_format_context->nb_streams; i += 1) { + if (is_video_stream(input_format_context->streams[i])) { zm_dump_stream_format(input_format_context, i, 0, 0); - if ( video_stream_id == -1 ) { + if (video_stream_id == -1) { video_stream_id = i; // if we break, then we won't find the audio stream } else { Warning("Have another video stream."); } - } else if ( is_audio_stream(input_format_context->streams[i]) ) { - if ( audio_stream_id == -1 ) { + } else if (is_audio_stream(input_format_context->streams[i])) { + if (audio_stream_id == -1) { Debug(2, "Audio stream is %d", i); audio_stream_id = i; } else { @@ -82,10 +82,8 @@ int FFmpeg_Input::Open(const char *filepath) { } streams[i].frame_count = 0; - streams[i].context = avcodec_alloc_context3(nullptr); - avcodec_parameters_to_context(streams[i].context, input_format_context->streams[i]->codecpar); - if ( !(streams[i].codec = avcodec_find_decoder(streams[i].context->codec_id)) ) { + if (!(streams[i].codec = avcodec_find_decoder(input_format_context->streams[i]->codecpar->codec_id))) { Error("Could not find input codec"); avformat_close_input(&input_format_context); return AVERROR_EXIT; @@ -93,8 +91,15 @@ int FFmpeg_Input::Open(const char *filepath) { Debug(1, "Using codec (%s) for stream %d", streams[i].codec->name, i); } + Debug(1, "Allocating"); + streams[i].context = avcodec_alloc_context3(streams[i].codec); + Debug(1, "Parameters"); + avcodec_parameters_to_context(streams[i].context, input_format_context->streams[i]->codecpar); + Debug(1, "Dumping codec"); + zm_dump_codec(streams[i].context); + error = avcodec_open2(streams[i].context, streams[i].codec, nullptr); - if ( error < 0 ) { + if (error < 0) { Error("Could not open input codec (error '%s')", av_make_error_string(error).c_str()); avcodec_free_context(&streams[i].context); @@ -102,19 +107,25 @@ int FFmpeg_Input::Open(const char *filepath) { input_format_context = nullptr; return error; } + zm_dump_codec(streams[i].context); + if (!(streams[i].context->time_base.num && streams[i].context->time_base.den)) { + Warning("Setting to default time base"); + streams[i].context->time_base.num = 1; + streams[i].context->time_base.den = 90000; + } } // end foreach stream - if ( video_stream_id == -1 ) + if (video_stream_id == -1) Debug(1, "Unable to locate video stream in %s", filepath); - if ( audio_stream_id == -1 ) + if (audio_stream_id == -1) Debug(3, "Unable to locate audio stream in %s", filepath); return 1; } // end int FFmpeg_Input::Open( const char * filepath ) int FFmpeg_Input::Close( ) { - if ( streams ) { - for ( unsigned int i = 0; i < input_format_context->nb_streams; i += 1 ) { + if (streams) { + for (unsigned int i = 0; i < input_format_context->nb_streams; i += 1) { avcodec_close(streams[i].context); avcodec_free_context(&streams[i].context); streams[i].context = nullptr; @@ -123,7 +134,7 @@ int FFmpeg_Input::Close( ) { streams = nullptr; } - if ( input_format_context ) { + if (input_format_context) { avformat_close_input(&input_format_context); input_format_context = nullptr; } @@ -131,7 +142,7 @@ int FFmpeg_Input::Close( ) { } // end int FFmpeg_Input::Close() AVFrame *FFmpeg_Input::get_frame(int stream_id) { - int frameComplete = false; + bool frameComplete = false; av_packet_ptr packet{av_packet_alloc()}; if (!packet) { @@ -139,9 +150,9 @@ AVFrame *FFmpeg_Input::get_frame(int stream_id) { return nullptr; } - while ( !frameComplete ) { + while (!frameComplete) { int ret = av_read_frame(input_format_context, packet.get()); - if ( ret < 0 ) { + if (ret < 0) { if ( // Check if EOF. (ret == AVERROR_EOF || (input_format_context->pb && input_format_context->pb->eof_reached)) || @@ -159,7 +170,7 @@ AVFrame *FFmpeg_Input::get_frame(int stream_id) { av_packet_guard pkt_guard{packet}; - if ( (stream_id >= 0) && (packet->stream_index != stream_id) ) { + if ((stream_id >= 0) && (packet->stream_index != stream_id)) { Debug(1,"Packet is not for our stream (%d)", packet->stream_index ); continue; } @@ -178,22 +189,36 @@ AVFrame *FFmpeg_Input::get_frame(int stream_id) { frame = nullptr; continue; } else { - if ( is_video_stream(input_format_context->streams[packet->stream_index]) ) { + if (is_video_stream(input_format_context->streams[packet->stream_index])) { zm_dump_video_frame(frame.get(), "resulting video frame"); } else { zm_dump_frame(frame.get(), "resulting frame"); } } - frameComplete = 1; + frameComplete = true; + if (context->time_base.num && context->time_base.den) { // Convert timestamps to stream timebase instead of codec timebase frame->pts = av_rescale_q(frame->pts, context->time_base, input_format_context->streams[stream_id]->time_base ); + } else { + Warning("No timebase set in context!"); + } + if (is_video_stream(input_format_context->streams[packet->stream_index])) { + zm_dump_video_frame(frame.get(), "resulting video frame"); + } else { + zm_dump_frame(frame.get(), "resulting frame"); + } } // end while !frameComplete + if (is_video_stream(input_format_context->streams[packet->stream_index])) { + zm_dump_video_frame(frame.get(), "resulting video frame"); + } else { + zm_dump_frame(frame.get(), "resulting frame"); + } return frame.get(); } // end AVFrame *FFmpeg_Input::get_frame @@ -252,7 +277,8 @@ AVFrame *FFmpeg_Input::get_frame(int stream_id, double at) { last_seek_request = seek_target; - if (frame->pts + frame->pkt_duration < seek_target) { + // Normally it is likely just the next packet. Need a heuristic for seeking, something like duration * keyframe interval + if (frame->pts + 10*frame->pkt_duration < seek_target) { Debug(1, "Jumping ahead"); if (( ret = av_seek_frame(input_format_context, stream_id, seek_target, AVSEEK_FLAG_FRAME @@ -264,14 +290,14 @@ AVFrame *FFmpeg_Input::get_frame(int stream_id, double at) { get_frame(stream_id); } // Seeking seems to typically seek to a keyframe, so then we have to decode until we get the frame we want. - if ( frame->pts <= seek_target ) { - if ( is_video_stream(input_format_context->streams[stream_id]) ) { - zm_dump_video_frame(frame, "pts <= seek_target"); - } else { - zm_dump_frame(frame, "pts <= seek_target"); - } - while ( frame && (frame->pts < seek_target) ) { - if ( !get_frame(stream_id) ) { + if (frame->pts <= seek_target) { + while (frame && (frame->pts + frame->pkt_duration < seek_target)) { + if (is_video_stream(input_format_context->streams[stream_id])) { + zm_dump_video_frame(frame, "pts <= seek_target"); + } else { + zm_dump_frame(frame, "pts <= seek_target"); + } + if (!get_frame(stream_id)) { Warning("Got no frame. returning nothing"); return frame.get(); } From e655cc345fc6a6c3d5d6e7eb8105b9e173bf112a Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 15:16:37 -0400 Subject: [PATCH 086/122] Fix crash due to deplicated join. --- src/zm_monitorstream.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/zm_monitorstream.cpp b/src/zm_monitorstream.cpp index 0007fe292..f8e7de132 100644 --- a/src/zm_monitorstream.cpp +++ b/src/zm_monitorstream.cpp @@ -865,7 +865,6 @@ void MonitorStream::runStream() { } else { Debug(1, "command_processor is not joinable"); } - command_processor.join(); } } // end MonitorStream::runStream From 82b71d5b12deb03d843dd5a68713d4e661adbd10 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 16:32:33 -0400 Subject: [PATCH 087/122] Don't update notes from this frame on continuous recording. Fixes #3550 --- src/zm_monitor.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index d9f6dd35d..9202d2fcc 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -2132,11 +2132,12 @@ bool Monitor::Analyse() { shared_data->state = state = ((shared_data->recording == RECORDING_ALWAYS) ? IDLE : TAPE); } else { Debug(1, - "State %d %s because analysis_image_count(%d)-last_alarm_count(%d) > post_event_count(%d) and timestamp.tv_sec(%" PRIi64 ") - recording.tv_src(%" PRIi64 ") >= min_section_length(%" PRIi64 ")", + "State %d %s because analysis_image_count(%d)-last_alarm_count(%d) = %d > post_event_count(%d) and timestamp.tv_sec(%" PRIi64 ") - recording.tv_src(%" PRIi64 ") >= min_section_length(%" PRIi64 ")", state, State_Strings[state].c_str(), analysis_image_count, last_alarm_count, + analysis_image_count - last_alarm_count, post_event_count, static_cast(std::chrono::duration_cast(snap->timestamp.time_since_epoch()).count()), static_cast(std::chrono::duration_cast(GetVideoWriterStartTime().time_since_epoch()).count()), @@ -2155,8 +2156,6 @@ bool Monitor::Analyse() { Event::AddPreAlarmFrame(snap->image, snap->timestamp, score, nullptr); } else if (state == ALARM) { if (event) { - if (noteSetMap.size() > 0) - event->updateNotes(noteSetMap); if (section_length >= Seconds(min_section_length) && (event->Duration() >= section_length)) { Warning("%s: %03d - event %" PRIu64 ", has exceeded desired section length. %" PRIi64 " - %" PRIi64 " = %" PRIi64 " >= %" PRIi64, name.c_str(), analysis_image_count, event->Id(), @@ -2166,6 +2165,8 @@ bool Monitor::Analyse() { static_cast(Seconds(section_length).count())); closeEvent(); event = openEvent(snap, cause, noteSetMap); + } else if (noteSetMap.size() > 0) { + event->updateNotes(noteSetMap); } } else if (shared_data->recording != RECORDING_NONE) { event = openEvent(snap, cause, noteSetMap); From f4d77116ea454193de1551be963e6210f477bf5f Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 16 Aug 2022 16:37:45 -0400 Subject: [PATCH 088/122] Add SetVideoWriterStartTime(starting_packet->timestamp);. We use shared->data->recording.tv_sec etc... but since we don't set it, it is always 0. --- src/zm_monitor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 9202d2fcc..b4da839dd 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -2805,6 +2805,7 @@ Event * Monitor::openEvent( event = new Event(this, starting_packet->timestamp, cause, noteSetMap); shared_data->last_event_id = event->Id(); + SetVideoWriterStartTime(starting_packet->timestamp); strncpy(shared_data->alarm_cause, cause.c_str(), sizeof(shared_data->alarm_cause)-1); if (!event_start_command.empty()) { From dc24be4d9971fd1e6182ea846482f4bbdf734998 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 14:58:18 -0400 Subject: [PATCH 089/122] Test for success loading Control --- scripts/zmwatch.pl.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zmwatch.pl.in b/scripts/zmwatch.pl.in index 5bba0e33c..aae549b23 100644 --- a/scripts/zmwatch.pl.in +++ b/scripts/zmwatch.pl.in @@ -129,7 +129,7 @@ while (!$zm_terminate) { if (($now - $startup_time) > $Config{ZM_WATCH_MAX_DELAY}) { if ($monitor->ControlId()) { my $control = $monitor->Control(); - if ($control->CanReboot() and $control->open()) { + if ($control and $control->CanReboot() and $control->open()) { $control->reboot(); } } From 4c5ec4c01fca219d9873ee05dd8c14c052eab948 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 14:59:02 -0400 Subject: [PATCH 090/122] Add a Control file for Grandstream cameras --- .../lib/ZoneMinder/Control/Grandstream.pm | 281 ++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 scripts/ZoneMinder/lib/ZoneMinder/Control/Grandstream.pm diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/Grandstream.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/Grandstream.pm new file mode 100644 index 000000000..a59c1ab09 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/Grandstream.pm @@ -0,0 +1,281 @@ +# ========================================================================== +# +# ZoneMinder GrandSteam Control Protocol Module +# Copyright (C) 2021 ZoneMinder Inc +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# ========================================================================== +# +# This module contains the implementation of the Vivotek ePTZ camera control +# protocol +# +package ZoneMinder::Control::Grandstream; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +# ========================================================================== +# +# Vivotek ePTZ Control Protocol +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Config qw(:all); +use ZoneMinder::General qw(:all); + +use Time::HiRes qw( usleep ); +use URI::Encode qw(uri_encode); +use XML::LibXML; +use Digest::MD5 qw(md5 md5_hex md5_base64); + + +our $REALM = ''; +our $PROTOCOL = 'https://'; +our $USERNAME = 'admin'; +our $PASSWORD = ''; +our $ADDRESS = ''; +our $BASE_URL = ''; + +my %config_types = ( + upgrade => { + P6767 => { default_value=>1, desc=>'Firmware Upgrade Method http' }, + P192 => { desc=>'Firmware Server Path' }, + }, + date => { + P64 => { desc=>'Timezone' }, + P5006 => { default_value=>1, desc=>'Enable NTP' }, + P30 => { desc=>'NTP Server', }, + }, + access => { + P12053 => {default_value=>1, desc=>'Enable UPnP Search' }, + }, + cmos => { + #P12314=> { value=>0, desc=>'Power Frequency' }, + }, + video => { + #P12306 => { value=>'26', desc=>'primary codec' },# 26: h264, 96: mjpeg, 98: h265 + P12313 => { desc=>'primary profile' },# 0: baseline, 1: main, 2: high + P12307 => { desc=>'primary resolution' }, # 1025: 1920x1080 1023: 1280x960, 1022: 1280x720 + P12904 => { desc=>'primary fps', }, # fps 5,10,15,20,25,30 + P12311 => { desc=>'Image quality', }, # 0 very high, 4 very low + P12312 => { desc=>'Iframe interval', }, # i-frame interval 5-100 + }, + osd => { + P10044 => { default_value=> 1, desc=>'Display Time' }, + #P10045 => { value=> 1, desc=>'Display Text' }, + P10001 => { default_value=> 1, desc=>'OSD Date Format' }, + #P10040 => { value=>'', desc=> 'OSD Text' }, + }, + audio => { + P14000 => { default_value=>1, desc=>'Audio codec' }, # 1,2 + P14003 => { default_value=>0, desc=>'Audio out volume' }, # 0-6 + P14002 => { default_value=>0, desc=>'Audio in volume' }, # 0-6 + }, + debug => { + P8042 => { default_value=>0, desc=>'Debug log protocol' }, # 0: UDP 1: SSL/TLS + P207 => { desc=>'Debug Log Server' }, + P208 => { desc=>'Debug Log Level' }, + }, + ); + +sub open { + my $self = shift; + $self->loadMonitor(); + + if ($self->{Monitor}{ControlAddress} + and + $self->{Monitor}{ControlAddress} ne 'user:pass@ip' + and + $self->{Monitor}{ControlAddress} ne 'user:port@ip' + ) { + Debug("Getting connection details from Path " . $self->{Monitor}->{ControlAddress}); + if (($self->{Monitor}->{ControlAddress} =~ /^(?https?:\/\/)?(?[^:@]+)?:?(?[^\/@]+)?@?(?
.*)$/)) { + $PROTOCOL = $+{PROTOCOL} if $+{PROTOCOL}; + $USERNAME = $+{USERNAME} if $+{USERNAME}; + $PASSWORD = $+{PASSWORD} if $+{PASSWORD}; + $ADDRESS = $+{ADDRESS} if $+{ADDRESS}; + } + } elsif ($self->{Monitor}->{Path}) { + Debug("Getting connection details from Path " . $self->{Monitor}->{Path}); + if (($self->{Monitor}->{Path} =~ /^(?(https?|rtsp):\/\/)?(?[^:@]+)?:?(?[^\/@]+)?@?(?
[^:\/]+)/)) { + $USERNAME = $+{USERNAME} if $+{USERNAME}; + $PASSWORD = $+{PASSWORD} if $+{PASSWORD}; + $ADDRESS = $+{ADDRESS} if $+{ADDRESS}; + } + Debug("username:$USERNAME password:$PASSWORD address:$ADDRESS"); + } else { + Error('Failed to parse auth from address ' . $self->{Monitor}->{ControlAddress}); + $ADDRESS = $self->{Monitor}->{ControlAddress}; + } + $BASE_URL = $PROTOCOL.$ADDRESS; + + use LWP::UserAgent; + $self->{ua} = LWP::UserAgent->new; + $self->{ua}->agent('ZoneMinder Control Agent/'.ZoneMinder::Base::ZM_VERSION); + $self->{ua}->ssl_opts(verify_hostname => 0, SSL_verify_mode => 0x00); + $self->{ua}->cookie_jar( {} ); + + + my $rescode = ''; + my $url = $BASE_URL.'/goform/login?cmd=login&type=0&user='.$USERNAME; + my $response = $self->get($url); + if ($response->is_success()) { + my $dom = XML::LibXML->load_xml(string => $response->content); + my $challengeString = $dom->getElementsByTagName('ChallengeCode')->string_value(); + Debug('challengstring: '.$challengeString); + my $authcode = md5_hex($challengeString.':GSC36XXlZpRsFzCbM:'.$PASSWORD); + $url .= '&authcode='.$authcode; + $response = $self->get($url); + $dom = XML::LibXML->load_xml(string => $response->content); + $rescode = $dom->getElementsByTagName('ResCode'); + } else { + Warning("Falling back to old style"); + $PROTOCOL = 'http://'; + $BASE_URL = $PROTOCOL.$USERNAME.':'.$PASSWORD.'@'.$ADDRESS; + } + + $self->{state} = 'open'; +} + +sub get { + my $self = shift; + my $url = shift; + Debug("Getting $url"); + my $response = $self->{ua}->get($url); + Debug('Response: '. $response->status_line . ' ' . $response->content); + return $response; +} + +sub close { + my $self = shift; + $self->{state} = 'closed'; +} + +sub sendCmd { + my ($self, $cmd, $speedcmd) = @_; + + $self->printMsg( $speedcmd, 'Tx' ); + $self->printMsg( $cmd, 'Tx' ); + + my $req = HTTP::Request->new( GET => $BASE_URL."/cgi-bin/camctrl/eCamCtrl.cgi?stream=0&$speedcmd&$cmd"); + my $res = $self->{ua}->request($req); + + if (!$res->is_success) { + Error('Request failed: '.$res->status_line().' (URI: '.$req->as_string().')'); + } + return $res->is_success; +} + +sub get_config { + my $self = shift; + + my %config; + foreach my $category ( @_ ? @_ : keys %config_types ) { + my $response = $self->get($BASE_URL.'/goform/config?cmd=get&type='.$category); + my $dom = XML::LibXML->load_xml(string => $response->content); + if (!$dom) { + Error("No document from :".$response->content()); + return; + } + Debug($dom->toString(1)); + $config{$category} = {}; + my $Configuration = $dom->getElementsByTagName('Configuration'); + my $xml = $Configuration->get_node(0); + if (!$xml) { + Warning("UNable to get Configuration node from ".$response->content()); + return \%config; + } + foreach my $node ($xml->childNodes()) { + $config{$category}{$node->nodeName} = { + value=>$node->textContent + }; + } + } # end foreach category + return \%config; +} # end sub get_config + +sub set_config { + my $self = shift; + my $updates = shift; + + my $url = join('&', $BASE_URL.'/goform/config?cmd=set', + map { $_.'='.uri_encode(uri_encode($$updates{$_}{value}, { encode_reserved=>1} )) } keys %$updates ); + my $response = $self->get($url); + return 0 if !$response->is_success(); + return 0 if ($response->content !~ /Successful/i); + return 1; +} + +sub reboot { + my $self = shift; + $self->get($BASE_URL.'/goform/config?cmd=reboot'); +} + +sub ping { + return -1 if ! $ADDRESS; + + require Net::Ping; + + my $p = Net::Ping->new(); + my $rv = $p->ping($ADDRESS); + $p->close(); + return $rv; +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::Control::Grandstream - ZoneMinder Perl extension for Grandstream +camera control protocol + +=head1 SYNOPSIS + + use ZoneMinder::Control::Grandstream; + +=head1 DESCRIPTION + +This module implements the protocol used in various Grandstream IP cameras. + +=head2 EXPORT + +None. + +=head1 SEE ALSO + +I would say, see ZoneMinder::Control documentation. But it is a stub. + +=head1 AUTHOR + +Isaac Connor Eisaac@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2021 by ZoneMinder Inc + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + +=cut From 84f14a03b0a61334d353cae1d69d9d0f5a532ac4 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 15:00:01 -0400 Subject: [PATCH 091/122] Set auto_relay as well as auth_hash. getNavBar uses it --- web/ajax/stream.php | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/web/ajax/stream.php b/web/ajax/stream.php index 3fc91c7c8..059f390c7 100644 --- a/web/ajax/stream.php +++ b/web/ajax/stream.php @@ -38,7 +38,7 @@ if ($have_semaphore !== false) { $localSocketFile = ZM_PATH_SOCKS.'/zms-'.sprintf('%06d',$_REQUEST['connkey']).'w.sock'; if ( file_exists($localSocketFile) ) { ZM\Warning("sock file $localSocketFile already exists?! Is someone else talking to zms?"); - // They could be. We can maybe have concurrent requests from a browser. + // They could be. We can maybe have concurrent requests from a browser. } if ( !socket_bind($socket, $localSocketFile) ) { ajaxError("socket_bind( $localSocketFile ) failed: ".socket_strerror(socket_last_error())); @@ -85,8 +85,8 @@ if ($have_semaphore !== false) { $max_socket_tries = 1000; // FIXME This should not exceed web_ajax_timeout while ( !file_exists($remSockFile) && $max_socket_tries-- ) { - //sometimes we are too fast for our own good, if it hasn't been setup yet give it a second. - // WHY? We will just send another one... + //sometimes we are too fast for our own good, if it hasn't been setup yet give it a second. + // WHY? We will just send another one... // ANSWER: Because otherwise we get a log of errors logged //ZM\Debug("$remSockFile does not exist, waiting, current " . (time() - $start_time) . ' seconds' ); @@ -146,14 +146,17 @@ if ($have_semaphore !== false) { $data['rate'] /= RATE_BASE; $data['delay'] = round( $data['delay'], 2 ); $data['zoom'] = round( $data['zoom']/SCALE_BASE, 1 ); - if (ZM_OPT_USE_AUTH && (ZM_AUTH_RELAY == 'hashed')) { - $auth_hash = generateAuthHash(ZM_AUTH_HASH_IPS); - if (isset($_REQUEST['auth']) and ($_REQUEST['auth'] != $auth_hash)) { - $data['auth'] = $auth_hash; - ZM\Debug('including new auth hash '.$data['auth'].'because doesnt match request auth hash '.$_REQUEST['auth']); - } else { - ZM\Debug('Not including new auth hash becase it hasn\'t changed '.$auth_hash); - } + if (ZM_OPT_USE_AUTH) { + if (ZM_AUTH_RELAY == 'hashed') { + $auth_hash = generateAuthHash(ZM_AUTH_HASH_IPS); + if (isset($_REQUEST['auth']) and ($_REQUEST['auth'] != $auth_hash)) { + $data['auth'] = $auth_hash; + ZM\Debug('including new auth hash '.$data['auth'].'because doesnt match request auth hash '.$_REQUEST['auth']); + } else { + ZM\Debug('Not including new auth hash becase it hasn\'t changed '.$auth_hash); + } + } + $data['auth_relay'] = get_auth_relay(); } ajaxResponse(array('status'=>$data)); break; @@ -167,11 +170,14 @@ if ($have_semaphore !== false) { } $data['rate'] /= RATE_BASE; $data['zoom'] = round($data['zoom']/SCALE_BASE, 1); - if ( ZM_OPT_USE_AUTH && (ZM_AUTH_RELAY == 'hashed') ) { - $auth_hash = generateAuthHash(ZM_AUTH_HASH_IPS); - if ( isset($_REQUEST['auth']) and ($_REQUEST['auth'] != $auth_hash) ) { - $data['auth'] = $auth_hash; - } + if ( ZM_OPT_USE_AUTH ) { + if (ZM_AUTH_RELAY == 'hashed') { + $auth_hash = generateAuthHash(ZM_AUTH_HASH_IPS); + if ( isset($_REQUEST['auth']) and ($_REQUEST['auth'] != $auth_hash) ) { + $data['auth'] = $auth_hash; + } + } + $data['auth_relay'] = get_auth_relay(); } ajaxResponse(array('status'=>$data)); break; From 1362207a21e5c5b4e38cb21a88651e8e6dc8c522 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 15:00:42 -0400 Subject: [PATCH 092/122] Use const instead of var to flush out duplicates for things that shouldn't change in javascript land --- web/skins/classic/js/skin.js.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/web/skins/classic/js/skin.js.php b/web/skins/classic/js/skin.js.php index 0ad7b9566..945165821 100644 --- a/web/skins/classic/js/skin.js.php +++ b/web/skins/classic/js/skin.js.php @@ -25,24 +25,24 @@ global $user; ?> -var AJAX_TIMEOUT = ; -var navBarRefresh = ; -var currentView = ''; +const AJAX_TIMEOUT = ; +const navBarRefresh = ; +const currentView = ''; -var exportProgressString = ''; -var exportFailedString = ''; -var exportSucceededString = ''; -var cancelString = ''; +const exportProgressString = ''; +const exportFailedString = ''; +const exportSucceededString = ''; +const cancelString = ''; -var thisUrl = ''; -var skinPath = ''; -var serverId = ''; +const thisUrl = ''; +const skinPath = ''; +const serverId = ''; -var canView = {}; -var canEdit = {}; +const canView = {}; +const canEdit = {}; -var ANIMATE_THUMBS = ; -var SCALE_BASE = ; +const ANIMATE_THUMBS = ; +const SCALE_BASE = ; var refreshParent = ; -var imagePrefix = ""; +const imagePrefix = ''; var auth_hash = ''; var auth_relay = ''; @@ -121,7 +121,7 @@ const CMD_QUERY = ; const CMD_QUIT = ; const CMD_MAXFPS = ; -var stateStrings = new Array(); +const stateStrings = new Array(); stateStrings[STATE_UNKNOWN] = ""; stateStrings[STATE_IDLE] = ""; stateStrings[STATE_PREALARM] = ""; From 8eab9bc518ff2e83f2127c98bcc8f64380e9936a Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 15:01:04 -0400 Subject: [PATCH 093/122] Remove SCALE_BASE as it is defined globally already --- web/skins/classic/views/js/watch.js.php | 1 - 1 file changed, 1 deletion(-) diff --git a/web/skins/classic/views/js/watch.js.php b/web/skins/classic/views/js/watch.js.php index f78b58f47..49f45a851 100644 --- a/web/skins/classic/views/js/watch.js.php +++ b/web/skins/classic/views/js/watch.js.php @@ -55,7 +55,6 @@ monitorData[monitorData.length] = { } // end foreach monitor ?> -var SCALE_BASE = ; var scale = ''; var statusRefreshTimeout = ; From 4bd7fc8fcfbbc2eda7787a3a0c8ecac13ff96476 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 17 Aug 2022 15:34:39 -0400 Subject: [PATCH 094/122] Clear out width=auto and height=auto to prevent warnings in logs --- web/includes/Monitor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index f703d4d34..4f167312b 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -880,9 +880,9 @@ public static function getStatuses() { if (!isset($options['mode'])) { $options['mode'] = 'stream'; } - if (!isset($options['width'])) + if (!isset($options['width']) or $options['width'] == 'auto') $options['width'] = 0; - if (!isset($options['height'])) + if (!isset($options['height']) or $options['height'] == 'auto') $options['height'] = 0; if (!isset($options['maxfps'])) { From 442d7b1c89c6ca5b30993a721c3f4ffcbf8e9dbe Mon Sep 17 00:00:00 2001 From: "parvit (Vittorio Parrella)" Date: Thu, 18 Aug 2022 05:05:18 -0400 Subject: [PATCH 095/122] integrated dynamic client and server update of path, user and password values --- web/includes/Monitor.php | 72 +++++++++++++++++++++++++++ web/includes/functions.php | 19 +++++++ web/skins/classic/views/js/monitor.js | 70 ++++++++++++++++++++++++++ web/skins/classic/views/monitor.php | 2 + 4 files changed, 163 insertions(+) diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index f703d4d34..6d631ca16 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -289,6 +289,78 @@ public static function getStatuses() { return $this->{'Server'}; } + public function Path($new=null) { + // set the new value if requested + if( $new !== null ) { + $this->{'Path'} = $new; + } + + $old_us = $this->{'User'}; + $old_ps = $this->{'Pass'}; + + // empty value or old auth values terminate + if( strlen($this->{'Path'}) == 0 ) + return $this->{'Path'}; + + // extract the authentication part from the path given + $values = extract_auth_values_from_url($this->{'Path'}); + + // If no values for User and Pass fields are present then terminate + if( count( $values ) !== 2 ) { + return $this->{'Path'}; + } + + $us = $values[0]; + $ps = $values[1]; + + // Update the auth fields if they were empty and remove them from the path + // or if they are equal between the path and field + if( (strlen($old_us) == 0 || strlen($old_ps) == 0) || + ($us == $old_us && $ps == $old_ps) ) + { + $this->{'Path'} = str_replace("$us:$ps@", "", $this->{'Path'}); + $this->{'User'} = $us; + $this->{'Pass'} = $ps; + } + return $this->{'Path'}; + } + + public function User($new=null) { + if( $new !== null ) { + // no url check if the update has different value + $this->{'User'} = $new; + } + + if( strlen($this->{'User'}) > 0 ) + return $this->{'User'}; + + // Only try to update from path if the field is empty + $values = extract_auth_values_from_url($this->{'Path'}); + if( count( $values ) == 2 ) { + $us = $values[0]; + $this->{'User'} = $values[0]; + } + return $this->{'User'}; + } + + public function Pass($new=null) { + if( $new !== null ) { + // no url check if the update has different value + $this->{'Pass'} = $new; + } + + if( strlen($this->{'Pass'}) > 0 ) + return $this->{'Pass'}; + + // Only try to update from path if the field is empty + $values = extract_auth_values_from_url($this->{'Path'}); + if( count( $values ) == 2 ) { + $ps = $values[1]; + $this->{'Pass'} = $values[1]; + } + return $this->{'Pass'}; + } + public function __call($fn, array $args) { if (count($args)) { if (is_array($this->defaults[$fn]) and $this->defaults[$fn]['type'] == 'set') { diff --git a/web/includes/functions.php b/web/includes/functions.php index 165c8f2c3..11be49921 100644 --- a/web/includes/functions.php +++ b/web/includes/functions.php @@ -2346,4 +2346,23 @@ function get_subnets($interface) { return $subnets; } +function extract_auth_values_from_url($url): array { + $protocolPrefixPos = strpos($url, '://'); + if( $protocolPrefixPos === false ) + return array(); + + $authSeparatorPos = strpos($url, '@', $protocolPrefixPos+3); + if( $authSeparatorPos === false ) + return array(); + + $fieldsSeparatorPos = strpos($url, ':', $protocolPrefixPos+3); + if( $fieldsSeparatorPos === false || $authSeparatorPos < $fieldsSeparatorPos ) + return array(); + + $username = substr( $url, $protocolPrefixPos+3, $fieldsSeparatorPos-($protocolPrefixPos+3) ); + $password = substr( $url, $fieldsSeparatorPos+1, $authSeparatorPos-$fieldsSeparatorPos-1 ); + + return array( $username, $password ); +} + ?> diff --git a/web/skins/classic/views/js/monitor.js b/web/skins/classic/views/js/monitor.js index a80ea031f..a01669c81 100644 --- a/web/skins/classic/views/js/monitor.js +++ b/web/skins/classic/views/js/monitor.js @@ -302,6 +302,18 @@ function initPage() { } }); + let monitorPath = document.getElementsByName("newMonitor[Path]")[0]; + monitorPath.addEventListener('keyup', change_Path); // on edit sync path -> user & pass + monitorPath.addEventListener('blur', change_Path); // remove fields from path if user & pass equal on end of edit + + let monitorUser = document.getElementsByName("newMonitor[User]"); + if( monitorUser.length > 0 ) + monitorUser[0].addEventListener('blur', change_Path); // remove fields from path if user & pass equal + + let monitorPass = document.getElementsByName("newMonitor[Pass]"); + if( monitorPass.length > 0 ) + monitorPass[0].addEventListener('blur', change_Path); // remove fields from path if user & pass equal + if ( parseInt(ZM_OPT_USE_GEOLOCATION) ) { if ( window.L ) { const form = document.getElementById('contentForm'); @@ -343,6 +355,64 @@ function initPage() { updateLinkedMonitorsUI(); } // end function initPage() +function change_Path(event) { + var pathInput = document.getElementsByName("newMonitor[Path]")[0]; + + var protoPrefixPos = pathInput.value.indexOf('://'); + if( protoPrefixPos == -1 ) + return; + + // check the formatting of the url + var authSeparatorPos = pathInput.value.indexOf( '@', protoPrefixPos+3 ); + if( authSeparatorPos == -1 ) { + console.warn('ignoring URL incorrectly formatted, missing "@"'); + return; + } + + var fieldsSeparatorPos = pathInput.value.indexOf( ':', protoPrefixPos+3 ); + if( authSeparatorPos == -1 || fieldsSeparatorPos >= authSeparatorPos ) { + console.warn('ignoring URL incorrectly formatted, missing ":"'); + return; + } + + var usernameValue = pathInput.value.substring( protoPrefixPos+3, fieldsSeparatorPos ); + var passwordValue = pathInput.value.substring( fieldsSeparatorPos+1, authSeparatorPos ); + if( usernameValue.length == 0 || passwordValue.length == 0 ) { + console.warn('ignoring URL incorrectly formatted, empty username or password'); + return; + } + + // get the username / password inputs + var userInput = document.getElementsByName("newMonitor[User]"); + var passInput = document.getElementsByName("newMonitor[Pass]"); + + if (userInput.length != 1 || passInput.length != 1) { + return + } + + // on editing update the fields only if they are empty or a prefix of the new value + if( event.type != 'blur' ) { + if( userInput[0].value.length == 0 || usernameValue.indexOf(userInput[0].value) == 0 || + userInput[0].value.indexOf(usernameValue) == 0 ) + { + userInput[0].value = usernameValue; + } + + if( passInput[0].value.length == 0 || passwordValue.indexOf(passInput[0].value) == 0 || + passInput[0].value.indexOf(passwordValue) == 0 ) + { + passInput[0].value = passwordValue; + } + + return; + } + + // on leaving the input sync the values and remove it from the url + // only if they already match (to not overwrite already present values) + if( userInput[0].value == usernameValue && passInput[0].value == passwordValue ) + pathInput.value = pathInput.value.substring(0, protoPrefixPos+3) + pathInput.value.substring(authSeparatorPos+1, pathInput.value.length); +} + function change_WebColour() { $j('#WebSwatch').css( 'backgroundColor', diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index a5a9dc2c1..c1b6260de 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -688,6 +688,8 @@ include('_monitor_source_nvsocket.php'); Type() == 'Remote' ) { ?> + + Protocol(), "updateMethods( this );if(this.value=='rtsp'){\$('RTSPDescribe').setStyle('display','table-row');}else{\$('RTSPDescribe').hide();}" ); ?> From 9a10568a5d2d51113861d3c359f8876eae128dac Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 18 Aug 2022 09:54:27 -0400 Subject: [PATCH 096/122] SCALE BASE is already deifned --- web/skins/classic/views/js/event.js.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/web/skins/classic/views/js/event.js.php b/web/skins/classic/views/js/event.js.php index 5807d8d47..b881dcd65 100644 --- a/web/skins/classic/views/js/event.js.php +++ b/web/skins/classic/views/js/event.js.php @@ -13,8 +13,6 @@ global $popup; ?> -var SCALE_BASE = ; - // // PHP variables to JS // From a31e09f23476b0b19a558f43a20c1762f0cd141d Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 18 Aug 2022 10:25:32 -0400 Subject: [PATCH 097/122] Update material icons to v1.11.10 --- web/fonts/MaterialIcons-Regular.eot | Bin 143258 -> 0 bytes web/fonts/MaterialIcons-Regular.ttf | Bin 128180 -> 0 bytes web/fonts/MaterialIcons-Regular.woff | Bin 57620 -> 0 bytes web/fonts/MaterialIcons-Regular.woff2 | Bin 44300 -> 0 bytes web/fonts/material-icons.woff | Bin 0 -> 164812 bytes web/fonts/material-icons.woff2 | Bin 0 -> 128552 bytes web/skins/classic/css/base/skin.css | 34 +++++++++----------------- 7 files changed, 11 insertions(+), 23 deletions(-) delete mode 100644 web/fonts/MaterialIcons-Regular.eot delete mode 100644 web/fonts/MaterialIcons-Regular.ttf delete mode 100644 web/fonts/MaterialIcons-Regular.woff delete mode 100644 web/fonts/MaterialIcons-Regular.woff2 create mode 100644 web/fonts/material-icons.woff create mode 100644 web/fonts/material-icons.woff2 diff --git a/web/fonts/MaterialIcons-Regular.eot b/web/fonts/MaterialIcons-Regular.eot deleted file mode 100644 index 70508ebabc9992e64f1314f866b2d7ab90438c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143258 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 Hzx)3OGG_Ot diff --git a/web/fonts/MaterialIcons-Regular.ttf b/web/fonts/MaterialIcons-Regular.ttf deleted file mode 100644 index 7015564ad166a3e9d88c82f17829f0cc01ebe29a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128180 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 ohyj3!`#ee%L;DTjx@8!5k5~VH0QmdE^#A|> diff --git a/web/fonts/MaterialIcons-Regular.woff b/web/fonts/MaterialIcons-Regular.woff deleted file mode 100644 index b648a3eea2d16b6ce783906d6b7d5f251b9eb56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57620 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

wF7DI|Kx|V1sBQ9FYs>m5C)C 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 BJ$(QG diff --git a/web/fonts/MaterialIcons-Regular.woff2 b/web/fonts/MaterialIcons-Regular.woff2 deleted file mode 100644 index 9fa211252080046a23b2449dbdced6abc2b0bb34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44300 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 QW8}wPUeo^@jR61v08@RD2LJ#7 diff --git a/web/fonts/material-icons.woff b/web/fonts/material-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..7ba51f8e7ee204c9a497388ed7cee883d6862ba4 GIT binary patch literal 164812 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

1t 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

aXw4_7p$uUaN!zD-2lL%i%KR;-*3Zc^x#I;c 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 literal 0 HcmV?d00001 diff --git a/web/fonts/material-icons.woff2 b/web/fonts/material-icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3d95fdfd6d9d6fdbb3650a9e7739ed5f5874537c GIT binary patch literal 128552 zcmV(}K+wN;Pew8T0RR910rn^W4*&oF1%5yP0rk!R0RR9100000000000000000000 z0000Q92*QAgWoI$U;yfR2m}!b3XsAqjK&TN#Z&+RHUcCAqHY8r1%i49AX`aXluXnl z-0Yg~eFG{K3o1mnA@Egddzsp~)B%~>{H-9JW78i}BP~AK_5hwUbspVGA}Kzrb$YV@ z|NsC0|Nj>zld!Exx}7AueJJvjLQxbIQSp2Zgh_WqE)80Ay(kOeErP;*;X{VyoCC{T zN^#t+M3)QJ0~&0$ON?^in@zhzXE|q=O<>swa~5Rj?z=1_Vyd=3^s~YviY>&PlMPIF zude2`d^o}Dlhwzk3e?IT#L&v9OD7&doQrFu>JKKK34+>7HZ7Pb$N9Cpyp?Xb-dxrD zWmyxgDD|Bpj=PJ<>93W$o!ToMXf$PVcg@TccX!Rq$e!plm0R37mi|5KGVLIyKVF;lRTwgrXSP4B>q>6 z^YyeqG%70{a1!5`HU7X9GnitglK2?M9{o|QA`qcJ43&S=hiDHCyxLXer4Kk9QQr&B zRj>8As^bZpt#q%jQ9b#e{4XhAByr=}gz2o}U>cJli6BDUTy;=T{7I*18Z=CE>J;mJ zJ;7joiIAjGFf3Xa1JiWc4X>Lwz?(ceb#rHtYi z_xTlX0j6AE2Ph#(NHfY@8$IYnANmOoJZdwSfSNU|A#={nfK<+*WK=G zveeRmOBGB%9+C=LfpT&@;Nkhcu?M|xW_IU?SjQ#`j!#M?ET96i1QIp7=n7w<%R<%G zb$HUve|NdN+{n5l7a$}d0|F$V5C~ICfWVfSgegmgfCF&ggs8|+YaM`~{*SmSsI7I@ zq6Nn!ZgkV_tfC#u1p#o(ZV~0dVQY@k0-n-nU^AFVedG}=-Twys()wO$iljx8J@6p9 zsn}I)FBK#e%ck|K&_XAWPm_1`&otmcQkxblL39v3tg;PSg6IP2lOj44$Zlr$f_0%r ztw>oE%sSPK24gICe&sciLQzb}gJ?%i|LGO>~f zO+#WjmC!Usl1U^Vczl!H&wXfKp~eHW`30)^_0<0L)!pJlKL!_IB>?DwU$UjL)$Y(I}#~Lyu4+$%b zm4B892n0zSs0>Fnae}LL5Gq)AZOhZ`Y6S~wwN*H2Hy{eZ1tgC}mVko#?qhKYDqwlfwSu5s-u=~Du$%29jL-$O%QQD#=C|7R zi_^qzGgbQQ?X7?e=Nkt!um0%ebV2XymNb!4F7X%2bKT? zX?#he+4bexxlXTP7Y5SAP~r>#w4H_9?oTzfzRI~(+51UgNCpkv)rJ7sQMYzEVL`oD z@#<5oiTiR@U!`k-qz)`dJjqhx04+n{BcQqgUyXj{ul5eJk2UzLNuSt1(T7QNw~gE6 zY(&-IGU>%snWkGgsbvHaZ;YLJjqwx`B?jhMN*bio9Gn+IAHWM%4%0h7yOW@u!V**n zDHRYE|0rGaBSQb^?wF+zU`9(r>GZJoewKMxHYtn2prm($Y+8Mt{e8yE;|KixzbpO! zD(S*|Rno)64*MK#u=#*tT5Y%x_H<9dOzUTQwr&0VO25)?!$9KDfFW?fknp4ATmp~h z0%yGyi0{|R-jVO`IWEs+&&FNVhaec+V*_s1B@(cFWQ0fh|I5_gZ5K#T)Xew~^&{n| z`A+eNv#031TBq1`U+Q|VUN!nvcLS(GBXk1{-2h2+gQV0TseZ2tU{#^X0YORvNqrxJ zlKv+tX_O{v#>WyMP5>uT6E%)Mu6(@ndeTop^LKV${>9Q>eeeF#OMAKTV&mn;_Pwc9 zE^8$EG)MQTIi8T?7%Q~Z&FNFxJHu+cU$1glAHOOF=xWAvp;)&B3y5fv&6T45FV034 z$h`pBy&C|CzCabg4U*lflzBp17h|1P)|qR$XBy|)LL06t4adCsFIB56in83K+=1$- zo=x&ZsiVB%?#`3aX>Plxbl&%>epLZgzfd6X3k3oNLIMF%0*b*^1yBNtq{KWR&Gsuo zl$WO6{V272pCosnY@BC2fc#!2Lg_T*@ zy|??Go!51y33-?rP0EU@x&I@2o=_Wv0TdErkO+lv1|HVm^J&LkPv$AH}GDj%JthEtXQetKQY(qRfZPV~i zK^HTGP$Yy$7?l(nNX1~Phs@a?w$Hb|Pm!@@D~@~_RC0}wqM#KcQ3|L;WnvqaR# z&VIIjwcf8ii&w18{cq-))Ri*@zrNy+AD*1`r+0@PYf>lrIB6eAc>hKpw+GIe%6EDc zZt|d=Saz`%1Eu;=K%*I`5vVTVSBZL`Ofa(upjV>tI7gF=)_p-NLP>2N3&Fx>T3_7C z(*V>U03V`s0Pd%z{lBSY?-<);5f+A45(27()JcdaBN4!dlFaFlL<5~B6v~{98ZztC z44W`)vOybIb-sOz&N?*dvGy&SG)1G-Q}yM`6s^AM5*3RTD4c>4m*c{dCdCA0A|W(1 z!45QcdCUE7i+|uDNF;!paVbFq|M46_i^HQ{KB1JHA;mDXWu5NwW;2tt{Kq>igmF#^ zMFDfeC14tlK(U8F_W<_7wa9XzM7oLJCQac%dx{7FojX*?L5Lpd<^kWohZ<>LUfU7~ zovCSQZ;LA($Pw9W2-f366F5*o1U}NDF&iZTvK>p*je%t)nYkj$DDJ6AukKWjk=tO=qjbe3L)F5LA?L?9*^OE(Y*u==VGo{1<2-7Tc_eg+E@ZQ`8n(ugXi zk#A%<)5ET1(T9E|^G5DiUoB$FP>@anMEfZ=N5A^iH#B|^*xR*8l}~+2Z=3tr?Zrfq zL8qS!Vg@aNW-3qLJ`X_F$T?U&kgDEvE9W7xEg~ZTtAqDCRIYhj1 zV6`z*>~pq%I^;rnEegx*4l8qz5Uwt29g8nllAEcRvI-QAQ^KT|Gw`J1C+->U03C&! zh*GE=+w1SlHd)>D{vGMTKv0JD%@tfO+|t!AD36Tniu|9vTnYpb!9;+wQ>Z&SKu6VhEgq=u|5-rR-#} zh1mmYtKV7T3^tuK3#j8TveMQj@gYpkA-g2tDA^dzb!|To>C|y7h?bYGt6J`Cb12#h z#S}X}#s1cIRaUJoN8BrJjYt|jOkR{WgGVX7O21*3lfb2Tv82^3N)FQ?9*~UQ&Atf3 zO_fvDX}on(kggr|dF*h&gQ+9xkU8GbQ?0b#%Zm`|6T{J#oEGP&3x~k8H+W!wOo)01 zLDG)36Q+mmE?qGVuF2_b0&YLQXF!<~-PAB`W8^x0$>kkFk41o0e}*%cs=!Wm7p^BV z=-|G0PvKjy5~dI2l8yPI{j&RE@R&CaZX{XC1V4ihFud%8#BIKVGtjFc%{VxNb#FMJ zVR#;1b%s`!t1HM3=3r2Tl8Oi$nBf*|au+f` zXpY3nBD@IqPZCuD333EKjH57(!3(E28Z97U9istn?lHTqK7=bXX+``)jy$~az!wBe z&u`lUga<^L<|f<$5T>|yyA2+T8S!tTRa182qeIg~1_c~wZt#w~UF%}UJIEGRczEX2 zI6StI3%`Tqhp&P>`%B=as~o(l0n$Fhh!OQmEQKKL>)6@pwQj^)wqq;S{F6oS<*N|$ zuDr1eO-NSy*ID2dWI~4Ziw~qsDn$rcAb+^sixEP@?Hb%NqilKMw$ILgX&cxN;M5^& z5+@wtz9Gx5aBYr_y5_AQX`ys#Bk&^?5I?K_nt?Pfh3tfa{%>Z9fyBs=RO5@8j$kAN zQ&<>?3K2a1dCkVu(S^q>3@tRc^V{us+qEkfty{Hh!Q!kon?QS7k`dF9Ms?C!lu@CC zf&$$P3wjht;z0`sd`%$)T|9EK@l(vg=%GV1XnoUFe`?UYdkvC_az$&WV#&%%7cP>* zDWp8bMTBNOCOi|-0YM8O%Jp4nq=V3?r$q=2H68^5$X|)1sgPGp-P5wbIex;YnuHzjnUP5D&bKQ+jCB(2d{vdn^W|U5HOWNMhfW$U2ch+USV;+ zCE0R6Rn!BNS+tNNd<5R0lFk_`^|9n;$QlQ36Y!=ak*)rw!Pgm6t*mDgtsp!J#fcn1 zY3r5txa zrWm#UaxDawJ?vVX<|2W5a$zBYixL{+c9LK4K%bFvRxKP$D9}x=g5(9@nXs_$ ze}|%P!AQWmHUUFUR| zY7lsHyctASVWm6i4(?_pASG40lh4-NuguFlwCHGl!gh$p8Oh{{$BuF6BQ zF(EQ&PL!|9MqwD|HlJWp$OyjW;o(q6Q9$-?*n6`X^MkNN^%i1a&x{JvL>;?=W6VE5 zq!P18yx5v4K$ZDKVrKSxX+JjGCmMZy`P! zdRVk0)iolUFY~O0qnts#j)3^nAc(K z3ZaE6n;0zZ`A>_|2^(rL^c<#?UiAHA2nG{j{m`oX+X~<`T>!DcUb)QTEp({xBif%M z)Ct@uYdDcTW``G!=7~lc4m!yckZp0rl(W~-d#Hrg(bt$=fhVmsj&JTWE(L8dk*PqC zFj2F6=y32?Pjf0M$%?a(Oq?ep6wwcesZ2{frJ6oT-mfdQ!fu<=#{M%`gN|qcx0KU{ zgV0jGvmq(E5x$&<)T=8ygo7Nz}SxW>a=Iu2H5PY zm=5Y=I{ea36=oRy#549=7>>nTYDPyaCtU{RM2HMRmcWmsqv8LhEB$?t_>*29@7*mo zKA$r>xnpwP^)BAKR&Typ>$75uZJ!x!^uS3Qk1-mNp|jKSQ(+?VCVsJqRJfLLnVP$r zc2S45SDUp)^O&^^siz7mudwnei;^fN9rVWrX#Z`ewGFlP);8QiGp%fs>MN+Sk~&je zMRlo8N?SxBWv8StRjs=tfPv{ zk;gR7gp=Sx7D8ZQBDA3nFnE~wiFfXt`jJQHzT)1w7oL5_*36qQYQ0rPELv@uK`(MD zHB>9EHMPR3noKMGH$6m`(mpgta8|HWFkg@%m>|ITkN98k?R>8_`#1ilpMUlr-0IZv zOU|7;QG~*qw8kImh{)H`trubHHCHL7M(aEDo@x@5@X09FfuT7XY0pK z`ndmAZnA9Snk^UT(oaEHUX`StOA3nwbm&nfMHmMvMDQWe;tq)Y(G!oDc8US1zq@SG zW2degi>f22Dg2+a0gH(WWh$?sT*;a*`LF~+3ov`EngUn7yi5coW59x`c=rJ!=Lx0b z2jm$-P?i&`<4^?o(s9rzoWL`oV{`|9kFI2gV0b6^0-o-H;BDikl4l>L`36^xVlgi1 zAtymT2g>Vxs=#boS(D9kbc@ICwwnl029|9qHja9H=9?>6AxPot14M-#9)+Py+j&x; zu2VoZxiCXsqf{OwZP*%bA~fCTE`WGIU!MPMgi74=2pz{MBf;6zaS|sCl$pqugsIt# zp&#&5)WC6y?N`t%#Ee5BNjuB%4T8J3I|)~TKvouKJWUl~i9s|VUA*slhh2>URhV@9&i=1hDj?eGVEFYG_d`L&DE! zHx1<`{cyTKGWZl0lDP{pU14@HXHH*8O!RWy4lQXc7KSvFFehL!Yk{DzpA_B1YY0%j0HqDnL@;6+v@0qmUWQR{7K^GUK?yBjirOftHGvwHqX(YD17cK2dZjW9k^iSc^UiU93^ zC*9d<(#5@P=&o_I$q2wKP&t{>#(KNd!*;LwIuUbeb9m#-(rWKfs?t@MLUXgp z%ElYjkLKeYE_^v36t$4OJaL8K<7 z13?U9ALK$b=~$WqOfA9TXkfNqSrb(6@lmB;NvWgZsYQ}LBiJGsD=j>VlKC^){r$tn zJ(yiOg_bACu^+!FMz>G>)Ck}oNPaNaVr5Btyr8U1btpYfa&B1a<@o#aC*_0LCF2l? zcd-*c;A=%PUHkBesDf{FOfChkAOys6`jt&h<`%6;`@;)An0=@4iL}~zWSfL!)E(Ki zTRQYUt;a2h8fU;hWte{nyJnIRPNBWgRf8T^ zsjXu+S8z=`17>A%)MX5KXad&vzfM8viV4s_2~+7XxyH8`l?Y`Hp0Xj=cclplzC3rO zpNay*>N-YM4l_seXcM(mWM5FAPM@+Wrmm0$8n$eQPd==a9r&(r-joeWT;ET`rdxi^ zm!mPADL}`tM2d%NgV-jh^;NU>QFgbi>>m|GsuP%Tl@2B$qsfZI~Y+^9r3h3a&ix70~;%Fq~gQZ?J?5wh56)V{TTYXXWC)?7B~ex;$`YvO;ZsIP z^ZP2FPRdk4iKg8RK&SAz`^>1JJFZ3lYF1962xf;1=I8Dji%We9+vz{SOgkFt@J3bsrBa#qk-eX zLi&P@D%6s8C5ENyCdVSDYhz~4L8pb*G+DU8>A1xpt(z|ZQG#Ya^weXz)dZ`nt6{P5 zZY&|onT3|XXH5ORIG;iq3^)YqIU_^|%-p8?Fl~nM{4OVQ=#E9!hy9X*Uae_zOIx*S zIR_O=BUjI6UK@VJPRpvdFbK%DlvoNG@C990)pGUltt<~)^Ean zabY7%OH0+E7Cfxx&?RsX;kBl`S#FAPN&zvC?6S;QNW^ZpE=8Fx6_r6GtX{P#H~NN% zI(^B#CCsVMZvbbBZRi9#G(&MTDL%4(20MjE^9G&XbO76hGZ+o*){>P4A?AWPKvk>g zJn?|bFPv_^ezS_@2U*qyc2QGZ=K2s-$t+TYK5+)yKrsSsSTe0TpsjICo1gIyN>|P@ zfl!>oO!o%gd#46M0;;K{mdiH5E3CgoHwS#NP!O$B&uj|rwiCiwyNlO|FVrtao*r)8 zSoGaLDtTik%lmwS%YN%u353kij6B4EqG~c<<+RvadAXWX_Z0~nkR}DWs-!^A!W%# zqzcBo&D>}l%W&eL@k0iyAG&SWzIDUynm)%%(pU{86QwGzRH|@=LPc0;1tm&jSFj%p zHqS$Y;~{_f&YRJ%L{+qkZ-Tww#EY?jWv}CD1$qc@#hpQ5(1m7VLp18MQBV;lCC~)# zP7OZsT=0gol69i;ftXpE+>`7o>ApV7#@u-*3Q#jmMW{+&>p&H-%*_Tvhd8WXzAy$L zv&99x`>j=KA)uN6Yb6uDB?Z?;N=&EVH7+Jwgg^-yhi-!RHU*|=DRsotU@*Z1o)iiirLvlBN6)K7?D%_}U2zV0t;NB$?Z8Zun@ui{}MuM_>x2sW~W^15K0 zVrt>YMGC~!R1K?4F8otoS2;}I1{?i$`O79lg36MguK+^T)4%~CNtWkD5A6$epVrKm z4Xmm4!Zy#aUl2ogpPj{x6K>t0V>fR#`y&4iu75$2vxb#g)8<+X-GNXTSu3Fiz&sUQ z=x*dTP#CgRELs21Ksp5bT3=59;J%9O@rp4<)C=?bh#0gsGQ)uq5KwpaDL-L?{(o*k zaJ3eO)V6{;`brSE#?+Mvn1PFhhG z`WUF)Hv!H(Pg&aan-|_3eGeHqnbNkHKaEBlj0%Xz6HoZX7hZImiydwoYk;W|bS<$e zH-e;a>vC3No{{_l+AEtANL64QQq97vEpo+Q7>4Tg1UNw$5!$*=19gPTzR?h~^BX;T za8oE@PkcD*pc0#N_(BQ7c!gdSe$*&OUO)hQU86Vy52)4TAJcF=SbM2K7|)L9&gHPc zwbjPzG-sBL{_|zpb?eDU2&k75kQLVr_LKy4ED31I+2aTn5D6t1rr-dvgNVW6FEnOH z#C6cMUieh+^FRFc$6x*4H{|Bbu{*l)^zoZGcl^k?c3L|yv&ovN@!jjBu)e&mu%1A6 z(j-d=Pe>gQ2QLDg2u+USnZY~mYz^#9-I&;M13h)Ku5t=XudML%%+N~h(jFQ_Zyqf!(@Z|5HsP~ zwejbVGOaxI$1i|c&^T6-Ov0vw{Rs+!8-TRszhfuaEXMFSe{Y!36!1htZR`p=f|B_~ zNn3J({#IN9xUXmW5(V>lsMxV3g$&reByt!AevO>~?wS_HJL@sKC;MG~puREfEi5Qo zcWYcS^@1t1loa5;5m-z9B~8s_DpgagHjPGLE+tJ^J1Qkza+#|^zU_4gWFh%e!qM4= z)-I;D6gdzt=mWrf3y&IJhGl*jj4Pw+KioXx4$ajYH#wvact;Yg)0bn!*P~k?77?*hWddsEWeLp%=8I)pp&q#&{VC7)KOgT``JH>j57BmZj z2k!l3u%CWNo8D4~*$Xe2=?q6HfT0`9$)e$$Wx9=+=Cfh#QU}ew@%p;OR7o`(;kiW? zm+)ryT;t_3Av88CLUSZf1DUrg)?JI&ERBaK87#1??y>e^uCcnxq=#{lzvn3f zoMqXj%W7tYo?k>Pv(o`Cb!I-x*A#f((R0^nfz%PFt#$0;G2r1}wQfs;K3* zt%=patOqr10TbB5zN^gw>Y4Of47Vw0$YuuBhtB~E4IWa;ukDKtZ))y?L$o&C`-HP| zVdqSu#F3aw&aC-o82P@&SM^2V0#KX%=b3>9SiNc!X`G6&$x3W4skil}rr!v5DY{Y{ z`hhoeLX)z}23xKdu_*^jG)6AcdPlg8(g*7x7E>CL%G5NGR(ox(*q^&7vZIBCXqNn> zl~oN=y8t@LJ^NBIx+i!2->y-=+uc>g1t-}}%g|4)mm)fvO5otE!G0^7qEFmk+R>p7 zBpy+;J9)7l7Aoun7pR~{pB%HQrWuCsnYU_MK61V<&Z6l5EBh+JdJT?>0g9)Z22CMH z9%8_qO9vHCQI^*=ObJX_V5qi)ifF6MMu{wWgAxWsTcP%l#pDP1N8~3&qG+}DHjnl( zA5j$7G8oVmCY5txnp^VF&Zz54j;q;KHJ&xePS=kRLNgTmtFc)Rk1>_)=`sv_4=SpL z*+?ata7v@HZ*{}kQoN^B?#|iS>Z=K-Ke1|Gix)>r1&S)lBy7JvpeZqZSs28|C;D;KQ*Q9KtLl3(t!@?Y@Esr~<3^+8_0o-wVvrII~Hrqhud_TmbQ8<8xqJmo7d zy21Glwu99cNF~onsl`hDJ)@f#KMxQW4Qj(TnS{MJFBm*d7=7xjfR%Mjz?oj3JS`lal{}VD-FUd2v0t8 zf+<{LuXrl)V!l=s-^7C=t2c`cdWT&cSi1hTkO%$d%8t;%V!mcIOYyW-JZy1smT8n# zC2U~hb?UZ&_5d0w5r5=a(){O7V$azB?YG=d%ePs$(AK~7##>);=We|6zEQS);rZD) z^_d)d$RRvv^E7tw3{z{c{l?0{8Yp$P`<9)yYt~J(294Apd45>xkFG0Lwm_leB|a=e zcqXFK4_1KO<}DAq%S{n6E;(aKxs7t&Y*>h!0gR(*>^8JTH57(;L$w@4s*@oF%)4w~ z1dBU%&XE={*<6aZyv*vEqX?25Z3tS?Ly-ssyeT> zRr!{JDC1>Milg3F9sbC+V>0B;XD6zgGO4C)}6h$$}-* zy`2QW(PDOox{1D{qXJ#KT;P_@bus4PUDN780(X71MMgnFWHY})AmyN>0NEzcW$+q^ z>^}kUAZa3Q>-lqaA5wh7Oj4w06QTu;(zEs;xhDc2;w6kpLh+!pfrErWeVo2l>&XQr z@MJ~Mk*|O!kCzEA0*i=58-b21?7_!rx`T_2&?7%1e!ttqJCbKn z5VU=qwezqJBFX9<=nY7Oo8$*|=3U`{;IOWRdv`F&M+61tC?Sm0aF+1o zATo2|54L8Wu(mLE#xR_HS-))ewqCwVs~0ZNqnCPBiseMLAgxrkK<+#YN#Vna94=HE zbnJN>H+ses#tfdRu|tPxNCr+7chj&JhY zg((z4@{Ire6n_sP(5J?qgnzPX%xw!er7L9gbrKs16bW8K%v&ZlDNE{Qa5lQ{-!(s; zdUt<)W;aT9Im;^Uqf%l@w^}HjHyt#5`x%GTT{q_=ejt~k!3V^m7c-Ec!MaV?l*ieK z?z?7@T!$6OP)b5E#A2R+`n+FkZqpXyaK0f&n;Au$Pj|qYHzfhL; znK5=MkZPap<~zwFC!^cO1w@`=ZDT+lyXUJ>M431|iumpMsW~@PtlYOX4sbxHECs?|XH2EVz`^0LVr?$G_BNUQgA))e0J=mT&m;TRT-{h$(?F;Th2=Q@q8{7LC8u{tLz z?!2*+lADSx$v-IV>ug2lVfDlIP;{NPK3gpgj{Z)v{lRbHWPq@b@hTT)!{xCpx|G7SS9Oh6@w+K(j(B3GtRE?2(00PIo_ zHsbzP>n0u`bsK)pu$dqB^a2Uw|Qxl3Q;h5Z|sbkeN$J z9uSRKf+Td3uX)eKhDxAiv2FYz^_hDLxoqpLIE8dy}$tC+%Y2tPB(t^OvaC%a&QJ(o$b2E9a=T*(6q4| zC}TBORYg@5t5|j6q9}~Kqz}tMx>TWAiVY0{_xUaKjKf~K`;%tQ?6Kxv3`;4q;9|`P z=Ati(&1h_TUFl%EU1=B!QS{*Be6yNL#h3$asdXjuSiYr0Dazs?bphm?QC2ES3oC_^ z(nLVhRqTN7IEF3-m>LV7=iajRLWbc6T89L1*+ud0Z|J^Rx&=$d;}zMgL$CxG}c_u1R3A8X)jn1DnIu>rhHaOSbJ;vb|&bCtyNnB;RxJ zdq&1KcZ|=3nAT9Px$`blHkN)~o3!afUD>)cL1pCUUbY^DKQYH(eL3dpfEwi+tN_I{ zZ9^33v(y4M(gAL5MB`ktu^~Ze#rJtimlzi%LeFj_*I<4!Y=S|cq|-4p8vNFfAkSo1 zYA{Q+Otm~ETcQ>0FEmpmKe|zuf7Dz{OS^!G0AEnFI1klvknJAi3~5W8sCO0=tiA$r z9G`8h$y{>QZ!;&TXmdqs=r~4f34jJ9M%x_)rC;!lEPK58994f2qYff0yFWArs`-E& zH%qh3`Z+;F$?JYVt~xACZHh+0GD?2=I2Q%Xp-ha^7rDwH(IMWe)0dj?$-Ax2HVzuF z`vc+283lWsiiJ5L6g+6puWY!owK~94Ml0)3tCfO-!Db!+=@NR{h+I|hUNYdMj(Q&k zk5Vzt7GF>$cp&IV7;`8hE0#EKo1jUf)7=qWYyh}KZ*0h5=qF=O4CV}1bf5*>f|C)t zn6}~;-&D;4v!`kCWKH;pOeJdwB$cjfc(Qqc(NtzEFV1A(;#>xQL?JU3eBTSGF;i`7 z^G+@@M(aT6I?=5JBkp5Z9j&q5Lxsu_hx4FMGbQBF1}&isKPWq=WXcr5)7>S~6q&@@ z+vYrhtMWIEnAvOHtozoz+_b?Bl;798nlDg55e<$Hic0DkUwG6FE_Sk`?PimEVC{RP zh%{>|a&a?@9R;`;qdOJ)By`{%MSvw*u!?gbBdClcA~g_dFX;4cT~RrZ?ai-feSmy# ze#Iyw{VwFOv1%H`A#8MSrnpTc9XxzUmCci1KyobdVX&6!la7(#t+;L*5M{?`nf~p( zzOTlb)ou88aSWVwTdt*?Q#(`% zTX1n>|#BMDtCde zQ6Tz4t+tdoo#C_IR^%ht^3_~h7OpPe9&j-~C#xGVa=@rbZJQTE(-%tHH*S)Klf|WL zT(Yrv3X>bkq&`m2e(%a>?IH04?l77l}{Q)Tw)SbnQ zIZ)65oiVn9{GG$OR`_~PX|Xf2sULJ}(T0IhR&eHj$O3ED-YywKRz^hhPE5vX-yLI) z`Pq_OhQv^C=vPU$M&Pa)+O8yK+dD<9ex_0r1XFbU^@{CFssE8?N;?+MblUE2d0F7uWPm3c^x& zozmwOqZTieBau*NF4XJeIV-T~3^S`p~69Y@MSc~AaExq>go8ENgoxl9PIB%yv_LL_+ z<#~9-d2vAc;)F4i%`j=20pmst8nk}twyOr+wrtc>J?OG28mB=rR;p-)GKI>Qtfb(? z)y$;{&St9c*c8DJc0fGlH{W>H9noc7q1&3Hw1TU88WEo-MerJ(pecx4Xfr~y(AtH_ zvdpe&a@_B>Ie%s#XGwvIGnd{5`A8CZEk*UV*|-+%!*agL5M&NLGh!hwO_`4aNl&P= zq=O+VIIF|rbUKEl3}76I&drC)X-tnXIBQm6o=Ft%fM=ruc3TIz?RHR@kRdvjlEU%Q zk$)bddI&g_`mxq=1mWB28?g>C6!lVOT58k$`)nx+@-j=G%#UJJDp!WskkNhe8$IkI zS+b@Ty=~55LuKOnv zY0J{eiwR2g5PV9iCuh{(cr=b+QK~OJXDZd2b$-nCw!*^4X^v~%7EdOW#h#WNuutNe z7S>`{VsRVk)`n|(LPFSFwDrLf%8ro%9OX~~t~Y>S-f;Bct~}QTOTD9m(cp)FkvU~= zO@p(wPxJ|9C3G5M86hG|M()cxw<`on#xJ-((Q;&yn+TraR+jkOH7P5kc4lN{Ps!{o z8AkzKTnRpFTHpDon-(Ay?Wom*9~N%)1`ruN`!xuP*`dz{N*ANV#-b$XrGIKP5ePnD z{KW$&@TG!<;4${QJ^G_g$>=_B60))bA0<*WKxk0|VhxU&MG>C6E4!wvf66=W9EIqk zU;hWUu@U{x3p;h`Y5X(3;mT!0Q~cM3HWh`nMb*U(1hNpFEGczVP-5!j@c`^#p(F@% z3@8a8$j8Bjful<^FW6ZbIAT)7o!zk2CTllevuJT30(o&oQkuvKD-zffMu#F{To_Tn zhX#&TI#_*q7RF6J{pi7?r$2D&ayQL-Y}K&aHq9G0NrT)F{butDrHfQsyplr6M^?h~ zB4uc15=O~Je_&CyjhDbr;+*p*78j=8$qO^@)P=cs>r)ET%K)P@u$zVfvLl(HZSGUi za>0|KJ|YYV@Gp)~A8IkR{(h0|Xd|TX!Q7>+sxm;>a2ht4q@h=fGz(Yw+l{JWH zD}l*DRfGO!PfF6|u8D9YWU`y!oE%d#K`}%1a)mV~Eazw+h)6*YLCZ6D<~qpN@-K*) zN~v*fI^@v&Mc?S&yM4*gds9P@2YqK*=}e@f!YNhF+THCc1Le$b+7%>CZIcjm#hw)j zz?^qAG4qv4gELI&jAuek=@=~Pd|WIFqvaA&v|K7mmdk{{TrN&8SBTQ(O7Z`4a}oP7 zDiNot&hcDC0Yg38>M;ZO_I`JXeAB%xPP#`h^iTYNU3%*G)<5DgZK=b=xudEUT!An8 zJ-lQ$4*wYkJUX>)mJz}??xQz_vG}+p_`GF3DM7h~L!grO(&zbvm>Z#72cwkv966>0 z!QhLk_*UI?h2krAF!;+LfUic(C;*IPJHz)P;vE}tGSJGB$4KGXFIWa~LfsdFl0ed~ z^y}$GKV0DUES<&F+!VlQ9@VK4AKd1@)?SPJ@o8TrwNKu8rygdYnrkqpW#+e$3pAbre_6% zF!LzSsyH+p&c(+LKiI^U*)DA|>$m6{LGx_4lp_U$H&!L7f|CiBMva2H^B~D_>Z0a0 zU(qG(W?%FAbql8naqe;+y?9JCdq_5vdau(G7-0Q_rA;nEQWXw=h=RN{By6=~iv){Q zjjFXzhv>s3LaFx%=5sH4Z-Sb0n0x{-+D{1PF%c#_+l3w0{yp5)LSM~)&qnBQ{jO7% zynAb3Pp=@OI?i?X3XBGBR1$KvN#>7@`OAphgX3Q3dwtjlo-)={Wuq!EDp?8(?2?q- zdVQLV1J7An!h^ytbuMvYBM9)xxIh{QEsNWHY&2(I7LN)7$MS%9_tnvP;8634PfdgU zackn=1oo?C2^a?@=&QYzHSRao6Ei?aTu?CIRM5DEZ=maK}GTSYfL-3-lejRah!_C`{ZEak1yn13Q1 z82|G~5BbO*?2$a6T<#VNwq3ns+ZFq2k>s?$est3ncjbo5FTQ9OkmMhC#QEea4u3U3 zT{vpsv;(J^YQX)~wt3?oT6AdCSoKz2iAu|ssFjN4eH=cAorn0ljHXYSJTf%+0YsPm z?IW+dH+qxiQzKjy+OB<0;weZ=GX=E~R`G?bZ-=hZ?(uk!@ekld0NO&cPf1LP3c8^k zRus133~6G9v5wy-U@39&ES=K9R{|^6+c+FvKjLMUfy{NvNlljk5*c z$%5q>PHnf?oJiR|H!j8R92xBU1~~H&9KAv z8fNA}>Gtqv^oHV4bvRT((i0zVEDk`vZywGB%g!ppg$4ef>Pz+6Q@GKzLcM=``{j7F z*|ORoyavABXzkJE9h`_bDYc^URvg(mGdu|`HsCAFbUaE@%0ZLa*)s8qhn5ih58RHC za*_at;d1+U9)=Q7Juc4I&?xdsWxKs%!KT0y>+OXV)Yq1EbYi}6g|63gaEpRON?+WL zx;$2_*9jDGh9H!-Oq4n)aYmX468Ijv-i8nRT)BMES{s=)(ES>tC6l_T^o_<3$ksp^ z-hhJYm8-kOYmlg+#A{N|Moq$)A4);^W>rQ&iOn82!c6uuw)8yV$#ANlpkooEq@X*} z+#Tt9SejWcN!(_*nzKfbqA^OT2R#a)oK5$Rgq$^wIXKI?3SVs*ToF;>1wqwXT-rq$ z7HKS_E{qC?=z*qPi8G+lc!;YY_%jPPBoCrJrt?c9D|iwrtu|hwPgJ|Bl;$d)2JOia z$Z2N2+)gZVl0SALq9Qe|;%j%A_%RcaD^bqac^`{-n!>RB?49*YO*OXma4k}K$9J)F zGU>gYF#TWu@UQ;(h#GCRD_2!}vz4r1WH{OZy@n!rJ)8~p z%7p@&!=_Y&8-?MdUbK_rKp-xs8a6V|ajFwL>ivLyM2`bQdtVZ;`5y=MyvjrJ0)=4V zN%w-pCHho0no}q1E%5BwHoLB@IFiJT?Pm$9mbRd49i&jr5p$fLbZXwk078l@-(mBW z(93k0TS!o-CKj39m9F*?-culG@St6}K*tiQ$L=eE4nvv#Y|rpOtDt{8oe}5KBmoL#Zhkt?gMFRqSIxld)HJ3txhEwB;#^2+qaX>&9s_MN z7wl>jqk`KLB^$tk{m!}XN=u=5kB5fj;6avEh4d`l&Qx-^sHbvicAr*Lot~Ed-YO;c zSo}$rI?EAu)iPy)RHYgUdU~(bSFVod8>L-ak1kJ)uc*q=+XXed0Q zZgw?wT+;h`VCNY0CUN9=1%x>?(LBx!qpjEVj3NxKhtB1fyKp)6I<_VZ)nD*UU5Jvch{jzUkL zc*nw2e#lPm&o~(#(qWyE(8>R$Al?REq##oEUkPx1MQZaTKSV0>lzzETB16a*_bF+p)WlJ5JSjI#34qsX4i(>}!h#$Q4gq z6Wt6IQiu~LCl5hUk!Yl5nARGh5d`{o4XbWQnORgMpFNLU*FI;jhG~wnmNR<{+rFmN z1f6Q&^jrzE8^86PC!Z9>hc-rP@q?GNK+Gb$F~2cAw|Q$hSXLftjzN%TUwBV8YuQFx zkrt8{RZykOKW@;Fa-bogCgC0<2iQS?0l@)UP;?+Tf@82KHDXg#(28q*trt?&`q^(j z{oNP8_<{ReIAK}%4+l7L**wN&w*^y8Hh3uXjryw>y0$U@jqq-}Zrs=nC5wyIdbtuc zSFuRE@lAA4I=8S}JWKmffrx4s9Q91Ae~OO_DZ2_EeX(*Oh41^EMkQl+?vt`~lpo&N z?&Rq9N5Xf`A;&|*LZ8uJ@4QE&O=Fk&juzxVkviektTZlq4VYA&AHNnxY9OG7UWZ2D z$3w5jV_F;V$ZzRKer}q^y!VEZ4zyaq^NSd7+)tM_1ia`JK~-wnE>jxfxhYfP6SM#! zF*+*(x-4rBjSwTF($T3wbdPikdx3sCd?P2mw??tDoPhpg5N)IK81~PhTZ1G7aw~aB zJ|~q+c#3i8``Ticri10}(dX@u1>R-F2rh6mA3Dx3T+-#vut#>4v=}lOchHdmaF1=%U zGn}~sbzQ+3y>~-~zUbmvObe1$IEga@>N#h~EhVzd5hqkqbAcx+$HTp)hslY|hFjH> zGXl{sl;t7*@&W`967P!0zm07OAS&2{=~Og4z$Bp424gvY$i{kL1@wX`MheLGNh_@$7)#^fV0s zn}{8Gi=e$w3WaK!W=f6-DPSg=owSNiljYe%+LjIS)y%SCo@#B5wV=pNG8927 zSD933TV=3RX$?d<&@}`TFqEs!$`4g9Mll`k5A2CCA0ug)CiQ&>p?fj*qcp$;7L@>S zhQ>;1cW??8f#co^lv2Fk@6C4$oaJgR!yuJ)+#l#5?g_bbRbPf}{&elmca?;zJj^$++g*O$z zvB}R9*i^I)BUILA?n`Y~TxO6+E2WWCU&Hqhbfan+RSHwY%>s~Cs5kI@o5nQOb>xpc z)?Pa$Uu6MlmX2n$Mg->pC(LQHYj=?eq0o-9t5WcwwNWfF|E=QaWylal|ezacZqGCYbCvin!-id4~Ubv(~*mi*nvd>%*b}mTw?#IA*nxg2IS#{TYBa zld=n{_6)Vi?9F4FO-2Zo`a&TA`>CQcwPj5ksF`gN!V`tYhsMDH$rua3f{E~iynGtw zK_*1d!3yoi_A3{zUA%s)CD{cybdeTRBc>_oU!MsJ5*jRy>e+uR``El>>()9(ylFW;4VK93p$Wp53gYj4_AnU?#ud)!C>{;**1^C5e2X7n3C-i zBB7X3@>-~Q#G0?i1D+oP%s6Ib5;HN4nVH2b%wyKMxaJ8vpbS^>q){+;-RO2kpCWkx z4>{t^b-vE{r!h=oSf6JY+D7I=u*aG_X7^N`BQaBJk)%nFT^oNZ{f%_v$kd=md)JC1 zM@BTrM9{C-Na!yax^tr)y8l>YGE_tU|QDjvFWeqwz8x*{=zT7>hNom01)>G!tA9b~^)ls!_ zFzleHmD>XcDTzi6=)dDKM5}^znOi@)0ih&%EMzJo9VUjA-~*M!XdWQfD==l_Bxoxz zgSvRHA4`Cu{vl#L1vYUgu$_OFLo~UHU4(%bLPg@c!=HXIfX}*er)9~Ip*mKolQ<)0 zcI|%N1}`NM?_5eM-o2Deymu+Nc>hug@xhN<3PA%2^?rb3h3ZMJr`tIvC33L2_npY-7Y>7oK7^MVtcH!Ks7@%oA3^38J=j!dncyG0D=0mwez z7yEGE+=~mYxc-`pFVV$1H>W$*!9R1vJyrt(&#A)TiNmIwf!#F+{nH`&Pnm4-xPgUL-Ix{kSrlt|fy z8_tAA$jmcA5{;50kp6h8R*WRrG33YG7XZ7MO?0nL%SZnFe@o2bn8F6Na|m1b{e0jmj#ifoABobA{8l z)!oUd&m-VQoNos1+wup`snKJa46nCedKkn9J{tCr9Mn#Axwi3RH$WK`U62&YGE3h! zT#2Tir3tMAD-bSO?<$a&r$k|?AG|o0_e|1;-(s1|`xecnNBZ{;e9zTvczv+>d|-AR zCH8oa3Wc7}3=5HY=2qxG?)IVakwr$|avA7)`#nCQWqk^2!76Mh*E*G8H@$MHQ z4-Nd_!EI{ps0`ia2XOFt`e7$T00Q)6rPQevq~62y9?@7)*`jUE9&QOR*RW;)vG#pN z$2s;pQpwjWr#qXDDO1x=0w#f=Fa=iOkeBNskhDQhur#zXJ*HM5vx~xw)HOQQnB_Jj zPk$~!;&-QKvh9V&Ve5fnHpF`QL8Y+DC=x4aThR1oeMW7i-*ljgDwevr!DIKwe% zsK*5&N})8E>4I`BTVWm>ZDA$xWS>4Lu^2>!1<^a@kZ1JQ!p}0aIhA!+YhP;42SE-N z_zZW8fTMQh-Wj_~IBn~6U|<>9QsP^z+W_;BiQLtYCKxA!r5WijLfW&c(|Yc9|d zOkN>pZWkJ-47<&C5zV9=ip8+rtk2~hB{(NL!=1<=XYfUC$ae$b!Y+){sx5LR1X;(J zW@3(mW4LE4jA-O-FBH}S&5fCNI3GUO>%mIaeKTL^5 zfqHsojgqcaEtZT?x8gb0uxity$2*b@&(U7?k&+ihKQurfkP^+|S`&m}`AXE<6xU&v zkIh?F3Z{J7u|nybz**y}aI>Qg)BT7dLzb>Sr+^eV#91)H@_fItiKVI_Xy zZO|a*pf*HE=0R7;b5m9UL4_MwU{z2wu-+(E1XYy+MrGm|ygKaLL>Ayz5aG&?7|5b!_Hz?*-Ny|5it216PKXHfstCxqx99yrFN@&4 z-R|dqNqp~^a)LeVWS#Q7iLEGMc69f2sXb@k;ig&q+H)~C24nG;YmW@>t;@@^XM>nf z;ue?sk{S52XYP+G-s#6mM9LOY~FH)N+6F8<$BF7v!6-R~}!I@^g3caS}7x8pm0+i{#l z;O}!m@KP^yYpQF8%fFXIBk>+`AsGrGy;1(`xf15?nmg-&A1s-ed8Uwi^>&JHKSB8g zrQt~iLs_|Y|01)MTvTZ0Ul3RYi6sk1IU+GQQw;t7chC!_ypEA1ioaKjOg~%mq+6}= zf06Jq-8m7c&e}ZwV~Y~&{;t^CFK*%Wn2vH~Ma2DZekH0U*4*AN%Hbi6cnT>EC0q;ve;CjXyapQLX(XCX@b(! zUqspYlqtTunP(R`abnu3Q_L=0AaLnY`Cj=fTju=? z&4Nr0Z<)eNQGV{^VAVG%@-%jLtBCJ~{x|fPe1R($a z*)twIxbW!FttU@j_gQi9fc%$Y&jICZod_K1tG6Ub|+IC4Otb1_VS!uoT>G-^aLZQeb7LouB4)rJkEyRFD~DBK;n zfA&Y@t9;m@q0LL{JbVijEj@H1z0U zr%xX<0|powGQ`G+5hf-~a4=!v;57wz$}_!zoP~LFv-*%8-Fyrc8XY zWD!uHkdSKCMAfP#rcNCZW5&oCH%{7w2@)nvk~L+Dq-oP+%$Ol>)+{M==7?LgNWs1X zijEx7aO{|x6DL&n+{rI-bHxx9-&y=C5K^HoVxCh62@++tdRB`-k&1xb=9N|8cInl#EXWKxkWo0@!u)D>%<8^=g#@NaxK8ETL^c$d)T#4{IZe z4>Ep2P3R+x-x{~lep`L$rxVLT##1k*_5k72qq{siV0#-CoZ{7SFc)$e)d z3G)QwFJNA0{3T34csM2yaOe zq-hg|0eD^^2$(36l0?a}cZy=FYJ{$PZx}M}0AL`55h5^V2~jCEG3LU#O$bFwvr?MY zvM~;8EzTLGCVJOmyE&4#A4;(a5C_C*+ilu5=jA>ET2M= zN24odFyyjW%GhkB9v;d)J#_$}9fGvLusSYRCxWO!QI$NNT0UQ!K%hw|)M|_$J*x8L zNrh+6>b-c;?A5DAZ{Aer-R&Bl(|<0!8g|H#aY2q;YN*upLyg)J8Z_q6qBV#Pok{fQ zEn>i+2O~z)m@w(XjM+REEXJ{7)r}3C5$xCv;J{%F=Oy*%12SYiM9y$SfYb7I3w)^p zKn(g&;&&)|%t2c-}$~j3miYmQ57JMpgAS%~aQo4b#DH*L64y zoGvrB*VgCL^ZN~x8Q1_E>D@t5j~M0_$2~+C0B^GQilRKzv}=ZO&$6E43=s3ZD}vx# z6urx`e~RKwRsGjA7rO4tFua&dKFwwySqzX{dpB%0m)Q+iJ1W)_0AL_!fFKJDyC8@e zMO6$_a9kn?ktC6#-7t)mWt}-r<9WLvIEo^bBqGaBisGQEdef9G%dKs5#{rki=yvNo z9#3AcSD()Zzu$wX0uT$K7=(mjERy3y5JJuK2tg1fisB>*lw~SKk*cb6luFSw3w7Nh z!;oQ`43;HORJSCZ#R^L^RU0?>zOLI|mpwkl;zYa}wlY`-xwf}Wl(06;+y zfMF#L#}zJD6+u)`)HNQ@RX*Q&fk0U(bWtpJNg}a2@0xGE#}-)NQ5G5=zW1S?fY5V< zOfdG65R_7HL=llBul;lbT!>C02V-{5ZGvDGMT;bvvaBhJs;Y{n$(AfhCV04T83F?{ zfCrC0eE4)j@AitGINSGZyPm}x=N#T};r1Dxtbu?RzaIn$_(hN)OhSbGCQR5LBE;Yl zCysyw2_z&*q9a8LBWcpu$dDmOmMl?nQRSx+h( zau{6z5}RrR>9*OhEw)(69>eqj68na20U&W;n0`Rw+?sE<*PP(wh8v>YbW^-X9x3ya zpDg;-uVTFP(xkuq1pzX9qAtd$Kq#Zy>V zx|o<%ad9jX5)>sR4g9U$n|8vbjEv!*L#dpcjpVJBEjVFQQBjMMk_r_Sy{f8!YHDKD z)sbmvpwiT`^m9ni)fJ|vC)mJ%n6WWq6BFd-=2$JPgj?Ghv9ojR;Nbjk?a0ac?zvn4 znSDCN*UO8fx3_U0AK1RW8vOi-`1|utYXABdVcr{N3UC(GNCSa1g2A+~upB`k?4eMy zFqmo_99Nt;x#7&&BPpqWT)BE6Blko>;hGyax0IA#si@pjQ~OUt<1U_R0eJBO#hW)s zdU`+k@By6(YTohV=OYHg{s5c}sQDsLpif3d-w9F+B3Lkpgc;@y&V~;Q1YC}-*GRks z_44JbP@zhtYSrq@GE1$67An`QS(!CHRbrcMid}V8q-(Crcf$=aZn`Nww{V|tW$V4l znVR3-oYGiTGv}W&Rsn@QAS{5;5cr2jxN~yaDPR>N!g=x`xBxsA4i6XQgsachG?jsy zs>{_5*L+@i2{OGuNMWNdvgt8K_N}4FV>cUeymMc>017o2P)MMJ22qGd8miy~7lb2% zI5PO;_srsYCKDk}k}T8Q;{i{3&RYgwVkypvkjTVgoWyN7UUMV+OwXZQEL5Siq%RX$%31YtE1;}ybgxIzyVg40nJ%=EO>J&F zXPL8M+YO&OEI-ZSkQoL}+GMW1l_o~S@IimBNV)xaVV!Gzc>K#)*T+I5=X#0>@k3xJUFR%@=DI&D$K6jy2)=Pkb0 z7F%w!`yof4_o6oyA7*~}r{jJxeFmW0LIVy7LZC(@VvvXoP;f>#EX0t;9txd-HJ5Rs z$uWbYd_^?=kEareT(5Y}^(=GP6S>N-nk%l=Pirr0O-FZHZ!2)8ooKx4$}r9-$9guA zwbRVH)k4yV$QWSX9CKHiJrrdfqW}PomzD0(_$0rTT+0N?*)It zr6Wm@qd|`)JI){QLp0Jx<|kJVdw0$oeIR-ylM-omDD|Bwdyb+s`dj+weMhR|Ix-(i>?z@&C3lX{^!Hn;54W4 zdj{ejx43?iL0{&}u*{a}cJmI1c|G?DSqMW1_Z-$SSLx2raJsY%WDq<5XxG3CXK z`xaOmt$XF_kmy!(9yVaJklh8vok(N9}KGXZ&U9Pq~FZ z?6KP}J8iQSn{2SoT5GJr5{oRfz+AJ#$h5~;?ZA4QVFX4Hj;sfd_PT9xj(W0!`c5_LZZJQ zZVc~=O!)8o9uxioMB%S65dJ3@3&&wXziO9+&P4`7|A~yh{Fm$>2=;Hwf9V_PAMKR? zl@$0{pfZpWFb84+kpVw}S|AmmfGFd&=RR9^ee;oBOQ@uSOI8O~b8ug^<6swO7pBXm z3{{xGV>#5JE<2W3zP$L=1jF&w`f_fZnEmJct}Qb?Fwjr;6j{w*U!xmBOC9ypcMUH( z_-}Z4*>bg1E45R5^{qms+GOPW#Tof`E!9>X^c59uI+0r5M}5}6y6uk9=^UDR_u3Z( z7Ibmz!>CS@bpk~&;vDta_ z38(zC&7Eg(uvMsMp~GEQPXC{`anI+DA=qS_WK(RK&9JF9m$Lz>l(FIrDBGXm40mAJ zuT5?mGXmwN|P+nLP^r4%CbnN40^n>@ev?K zgdAxSWJ!`CPl`AVYE-FHKFkxJdh>9c0ci~(0RELid3#!mou{=9he z6fBSjUqPb8Ns}Z}yl4?pB#0F%RhSUrvLwrtBSW?#1@h%7Rw7rKQsp|dYf-0DjY_rJ zG-*|(LcL~R`*EejV|TO7~~Q}FG-qgjIt!l!G*-3 zm%5=+p_1>g}*l`Mod_+5>=p(QIS$*%2lXT#e{Z1f<(zuRH#&?T8-L! zaX`HWO_~iF3ekRM%(w}Yrp%Z%XWpVE%T}#fw_($k9lQ4IJ0zv#8eKPnlPjXdi!mwJ zt}}U}kW#gRM~-4@Y|xP7sFF5Xv*xKNVZn+yOXx5VAx4iEKVjnh1qc)*#Dr}p1nig* ziou~F%(``{2W8`F6$?cJnq3-JYQvySEh_W^T9Ki$WLbhR!Hkh(6)r-g5u?T&JGZ8X zFG=IDH4s6KkhDfxj@Xk`?ZzWtD3);CdgTewUg*ZAieIIn!Q0!P2EN+YPj~fkbNBG{ z^7a=6N}?H7=6D3g2@-?=6sxQvAqG+QPY{9kvUxoa2hKZfV~RR=D|a4lF|$&yB-apjfp)pG@ioL>k^>j)BQZm{^+Eork0Su5)= zraG6UU5gH7##fipX<9W_Ke4kF$x%Q?D>3kp#9cw7HTTq`abpAc2?g5-Kx_TyQR~5< zs5N2%S!1TBtffl=a5$L)c4>1*NmmU|KSmJl-ed&L6c`E z5Wz4AS_u^fc(aW9LPrGx5y;&tAWqc;s!QGREZEY8v^A1j_ZiiqG718d6bZ)t{_k`j zeL)AEYn!8Pyo5Mx>1cE?w%V0u7&f{&92%d`>TjvU0L3^9{4{F#b|x{#P_Ag$K9g7_ z01mu6@JK>a`Qm;88^Y%qoNfmV!y@PTXr^ zLNL);&ldPHTs*@Q$ya&ta!rf~2MjjkGE&-ixoBH04i+s9;Vi9?rf+ z^3h$RF`%=2=OB}%M$=OfUPt9vnEr6dNbY5qMP=V_?PW>{N4hS6aKP8yMRY@WtmUKJ zb5{w_cAOKs0GEZ8HCKU7VCtQG7sE<7`W^|~4;*|iy5}GQ^+jDdPJIzmbpnnu3UI{u=U3*)0?m~Acltyp(X*QcxZc` zaiG)i{B^w~f>K{G$5I9sAc|3knCPeNP?Z?QL4{YVQ`M!?MUP^4`wlS znBDO^{Jhvq1}Ev<={!W_;N|LO+UCOYhy>jvTk`7;(_Qy#=1dvx)AOe@Jpcq@`?Ur& z5lgSNfMar?+FjKNc4Nh1HzzGCTAi}rFcYyEb zO#MwGT1nJ~z1r4TQDN+bW&xL|6djtM0ert`f6;3lxHMBoZHr8f3EsJu<%$Tu-05vg&=*-hy=LiMb= zSmeuMDgR>ba9QkwVf3s)C7mRs0lcoxa?RK%p42|#a~HT zG>>Q(6_Sz8g^yOMke4A*rQWl9Hv>&tYcpC11sDD<2Vt)V1>Bm7Pb?w@-eVPPx~W@f z(}D-`xfE>oKV8|OCVr&^k}AD4CXCde3qD+7|lrF@zul_{-0ZcPFxbwyRJq-?CT zOB&Izz>U!p98vwM!v$3?yJSdsDR;AzYxMW&Wjr)<%R%*A$NX4Dc&(x9FeLSw!ny`J#)xCidWF=&w?S<;%< zL_RFdCwcDTc6K(;lI6N&n`9Ft;IajeSuYTIE_5qz6Vmk7V3MRvux9-ZfPXbFXyPfZ1b2 zj0Kce-Fk?#^=p_$0=hvRJx7npfk)Iay|Smr4vhwR%w%@7ndwB;U3H4n(-CWu7f)N3=1yleayc=t)ZOG9um&`=IjNz2p%`vy5*n70hL8H*O$zTT`Y5WD z&oPPsUb)w%r;YDuNS&#b48=@Al@hRn&A7N@id3g$ATp&=8at@)4eJs0F(>6*yLFo6 znf^gl0?1?oYq!~E;tpA*m>D0;*<(o8A5^`MyObIv5CnCh2`+d30~vPdD9xP-0Ftsx zQCgB7Es}W{(iFXm9q@V0!XbzzgE0r)uZ(Zd#c0NFoTq8p5{EdbXcVtb^8`!~ja|$)9kp(OC2e^^T~wSKL42UW z=r4N!C|iy-$6L0%%2C!!DvGF<{;;}->YW^9*ReOFlYalRp9JCy-6K$hs|g7H4IJ6= z2uu$Rm4HxP!Y$>?P=}^YJx2rDdVHs0*OSg#a}v~)<~ZF&kq&@p8BS=3`@l-!7#GeY069uD-c?b-WDCQF zfq~9-s$PF+#~u7?sDN#^BmC@*IFzw*FZszRGPP-cO#Z%~Far0+-R)81H*yvI@Vdog zQ%mz+YC!eA`n(*P2u*DzU0us>S~BfK=_{q6N3O_z!kRFY1EB$!NkbR^B)$2^5=d#a zX712A$fsObUpqw1+Z{Dou5L@PBh&PGc$lDhCr*rE_A++N=ygZ6N`Anatr@OXg(%K* zuB^dwr_?nDr@YzSYN^ZlTpq{>v5@QHVLb_X3#w)6-|czN$<0$mubpUD+TRuRr894$ z4#HQv8NuS=VJ;aJk>(|7`96FryoVg@Fd*=_(6es-^_?a4NzP#sUB`1x zDS=TFaM5&H6)>bBXHV#!^bvRFmV^>{MU$zdNNjgK&i9OyZCtr-TkkbX5s)eX2`Hz) zZ*Nj_S7b<-bbu*G0_nO;r!iZ$QS(!g;rZ3{l9HL(SsQTYDZS}UQ|q>(ifLebYoF$1 zg~mQS#%l&{R05oUBbnnS&<9EToKw<-gDpAbYEe60QMyK1pYs4^>ZM!tayshFzE&NE zM#a<;`Gs~}x(tv3IFw`8b^3(u1j9jORQ>5gZ#nk`O-HCMdWGsslo;g~E9klHf6Bg) z0_&QtFMS_W$A*(=KgGc(){1NL6o&WcuGBtmk0fi%xZ$odbo+P$s_Wn!2E|Y7 zwl6P`&uI2scWS?;LxcJh4`<=cR+5svd7-Un#S>`WU!jt z97`8JjWWxLgq#wbat)wT?ir3WXTCa12*XeOnIDo@^4xz1Z&nWRc0<`ENs98tu+md# zBV%*xLt52H^-%kPkKXMXa2(uWe0P>u__sC=QXTlZ$+n+YS7 z$OP@z#wm1diX5)&gEF+ECbhvlAhmvGTlL5==A1{`)(|EXwQ%!3Et*@&<$ON5=g*_e zjik$!&Y?RAj@>EsjX&bw>4;6(moX5Tc5s*#7daBI0r2q4A$6fLQW_!Sk>kP%vud3Y6-1LPOw0!ZA>$gpe0TtCN=)O z{r!=or>&9w?t_?zLX<>-fK-*7Bo!_1EM&c^c&fCas~{) za2rT_Xjc|)iDGf!_VTUhfmsiQhvYN2>IYFunLa*IQ8q;`kQ@%JgfK{eawu$T&F2Mk z_*M@HWx3p<*m83o23r}erS?5)t)-%Wwt*|R6HnK#T3Dlp;d1u_{TjkmYI8Q0?7R#( zy*~B}1}J*Zt_mz(Gz}oOF$}LpT}h;D+2lz;`Z<${p(j^t6P3&jVI)=-5?NoQEtLEy zmjvI8-Be$M-w~V|T~t&G!*teJchl$v)P#zFh_03QTfGk2o(|h~ocXS(+Mhoo??^2+ z4j$vd0(Jh&uZZDxx>Dr!vKQdBF3x>t{On98F8_Pl*UUt6z;}CVViqb1URw;I6n>1h zr>7=_S>&C4#F1YZaePZ-*{F7adm`^=;Ozs@rQS=F5Tno%YuqAN`PtGx|Uww()Cu>`~bcxQrgq9yj|WU+OWJ|*7ZRw<9GrG zv~BncC`=k@*s-CFM+QQ^bKAY7_sdF>R1*q1wDbAYtDCh{-Rqz)w@+G0K zYtB$?%-KBmFPobT&jM}Q$Fs1*Pf1O&yyNP z*-rUBl{J^5GS{tOgjgVphr7Ei7x4ICR`kG6bCh;GSnYB4w zmCtvVb6=V3^zE9r8yCVh|9DE8vy6WLJ5xRPi|MNz8{S%+FFtEF|J$_m5z}jg&K^Zu$87q;k zUqYjwD0f%7)%S<%03y}ibxyX^_#qWy>L?6O?3dAU4z`BZ!v1mCg`JBM6H?5jh+o+4G^Wz&KQ` zABKzjoopPvST{>)u@6?GmAF-Bul}c6P)^<%`6^Ni4(lK2EaJO~_4ydRq`voun6J*n zF-OKR;UOB3Kym1Q2!+Q3>8nurGT`1%!6;)OAl5WK$yYW32@EyI%&0v`u#c6Rf>k4| z0lpR>b6E}Qtggcc&twK=Cd>WX{~ngSVo>&Zc<3JlT~Bo{_?23y8i?Sw_|yGSj9q+9Ia5~c9K7r_CRy<>3Xx9s?S;4_4(R|^{u&@t7Nx2Pf}W zUzsHqk5a46(~JjM!(HccL=$6{D3b)t0f8_LA{g`>`vU8$q*sYN2oox>$_UyA>YFoU*E)r?tV+dSbs^76cDQFLWY zk#&<|gl@z(I2e$DX(%@(;NzWMsC+mE(`G(@wSd(JQ4^>0{hn<#B=!Ri2}g%QnDJF~hW5yucdBAOS5pWR&vUG$~8P+h1in z&Pu20Bq=ZEv;;_ewu+O8f!Ismx`q-{&sU(%{4#=;DFUW*4eLT!Ls46f4xBi2VNz$r zSX`zAnea#WOO{IEOvCY#3*Cx-60FExEgX)HFY9T5pbc+Yj0M3AUx;?B2B4f2*(kS(zBjSeePdq|^Zp%Kb8OoR!x_DwHFG z?JumtvT;EI%3Qfsg{3!hvgWr8Cbmq z+G}aQx0iU<-%D*FQ!M0F8$zLB&Wbgg8=tm2M@h_Kv`{5_U#x^ZbU9$Of~ft}-TTn4 z$3L;wGjtHG%zXXb37vXcX&#!)!Y9;kYz9Ksb$J_DJ6_JcGc?`-hGNGfW-D-)PD*aem$sqlAO-) z%~&j@4iz1C=@q!ejFYJUeRf=LWkmvaco@KzB)3s5Z?o}0!FH(DemrXQ1l#;h_C9cC zy}k{@6g+S~?S68x;Q37JX;J4rC&YyFx#1E|C30}yIKbr|*la>yzwn3riF z*nx&~it1@mJF4+nymBIrW8?7Y#r6VDGA~KYs10wqA^` z7PWZ~Sq<;cqRYkTX1SsVe%Y_UCo_Gk5?QI}OEmE}J6M=T)+&*WQc?4~l2>HpN8xMTRmGzoL>boN0&mhzlG;{Ln0F+IH z+$cCe2qgJ@zrYR@)cJQZ`$`IOov(_6@I zh&T0N6if7ydNs(S-z5AwiBji`vbmLy;1k5zxHI!$$iPvD?G*mwlqtS8`3ryHYOBa! z6AlP3k%OwOhsToRS25t+I`XuWta$p>VOomPw`QCmQa8Ti1zIX?*M4v7N8iF-Q}xj= z_scJ=@=~Ar5`iniNq722PQ3Lmb$kWWWhXfh^V+f`bY>*#=BZw0cI?w=gA9?BE z64ObLAH5_vFyz2A8rwgost-Mnil~7+!G72vyASbf1tG(GxWyE~Cc41v1J~R!Sj*C{ zImr)@a}!2D7~#MP!~u+jL3gDl-OQ>6mMa+6a10a6EO^aaSdNmj(s6nJb}bq~f9nq< zLLLb9Zzqpvna?mmXjIpNH@Y;?-iJ}|s~96!a%V{SYyMy{21evnn1xc=OQIli4BJ&e zQmFdSO~%h8;1<%*w<%1vskY0Tl12En7I$x2}S8u|mr*EGc$J2gu3| z4j9r$A80X>U%W0>WAI5!bya~2ik#F7r*(U*{TN%D9vKj_dliWVYT$w_`7v&irR zQ0*7E#64O_GwOfGnLd_!c7Tw2{Bam*lX+Ik`~FloIQ{c{{lAF;DeH<^OL4PFhgcdX zs3-vVFgHDLGp2Hj@KI1q{S>|T}=3VZ1JC~ku=hZLko1!3FB zgs+!D41E?A!rA2IAs4-c1rk;eU0-zineanGMier&N2L>$^v&q+1E1-9h2|J_vbg>udn`x_&}KN%45H~mNC4{li=gU+=If6*pr&H*|M&vO!2ZBh z{*tk@hb!&$mU&yWzH&`8#+sH$St0lWOl6SxQvsLw<=Bs7gkcQ_LzR4c@uYBU-OKN( zr5X5I$c`^5P1CXUi@=idLQmi8UTM_ zE1HakrR7kl{HYnxTnKX`EIvsBA2PuR)TnaIXha;@rTS1N)UGrd~(06M-Ej23q?{3Fa( zAD1jfo)!_$07cC5qonT(^ zp-UxKh6@@9f=knXc+o9JpUp)Dv4@z#3W$AmB)Ba4ks!8CT~I}%LJ;A`g|ti&M!62y zUi|6~)w&DNt%DOPGl9Ovmyds@WF}^mm@Jf=#s$*I5UmBM%#v$^1k;;A@5GT)i^G7- z87a#26BWK3bIX^i`Mlmw$k?`MxP?8UnF*VLpNzDsTHnO|1rOjuXNM?Lqz~W&_4cj|YA)Ww<}eZlcb$bY-FXD2)=r#9=59MNp6od zNKlUIW4R>HTPeyOcr>3eewZjSNkTTTgz`+jX82LJgU7i zZyp#Xpzp09skzBKo%H;G0`yk%ElpDS7Ri<7fkIV{sFPA+B>TzGc&WLa8{Jvs(lewY zRzXStNW*O=!I1=jthM|_PEUXUc>kRY1P}z#4Q?d_sRynVS!;B;8|5Q$G%pX5t3V6B z=mOJ`H?8lZP0#DS6G?Ui4S(m!>n#&<8(Z=VA~SnI-(%y7Jw%&FhTZ&`Km1roxZ`OY zmm2zXOE9+6ykZ$WApaHq3*f!A=6T+q>>gLYr2?3u7oMGJPTpu|R2O9O1G=VlUH%6d zGMc$1ivxIB!WT-L>7Rz=5Q-#_mJ+fE-_6S*!c)8S0rf>Fczg;JQA~(Gjwa}a7P%;^kXdtGw9q4L#_Hw#()F!U7m3L&O}5ffom8GeUhYRuFafYo)$I+1_6%ca8&SC_S^2E(PP zFqtrb$cWu1t88K@j<&67t%=I(zz#s3<3NFRgFh$z+h`)KAc^zLyakpsCzgEt1;17p z>CEXxzn$Oc_6#mEnYYGU^BEk`n2E7ey@8-?xRK*Rb*Q?(E9cV9vR zi94WQODQJ|vUe!(s+yvWwn$_|rU8*~mRNKI3Z*|OqYs$07kXt(2V>!s{C25N{^$?# zGaVEYa5bS|3K*`2mvMLRH){?rBQ26n;j5;SAERIJyq%Ds}49`)2k)I+6hEJ1REKzG&BI7v7y z?if9Y)FAFuTI}4EcM_Q*AN1G6CJYQCerFhP%mY^Po=!+#QqBsuL*8>6swcrCTckNw z8xiIhs-@o{&VkLf^c68gpo{n}OSTU&f&M_gf|C20a!4^+L_jT|#WKOv@*9;4W*t%n0<4<%KIPCacx-v3H$=202lj@l^c61)y2{A6l(^_sE&(n z;{qLHHyflYQs-uz9)uOf!1vbtk_1iud*aE!YlNC8hNffFCHP>aO(rqepeD5h(UF}% zm0H1+d1%^SpM#jyVv&;7vYJ*~b+D7%=lUBv!_s&hUa?0Fd0HTDjT`%a=cQn9x1o?^ z>11!5ZKD(V)mnED4AH=R@ymTrUUaJSb-#c0^n>m5+L2tL{Y&nLSlaNdW-lb{~O;(k$l78^|}gkHwYmd*7wlmFZ-)aw6IFCb%cbZ317UrEe|I-{^Sg*@<0V=-kA|v!U zb{74vCjGS^hbI-@dg8X7mfRp@<3q^0j}Y`tsMj&vt)B=Dt0{u|BpV=cBD)NgF#SRq z+y)wi@D2=<8k(?{;ahj=FZoKZZ0s^H$nnQ%k90xg!FLVl+ukBnpbXQn4(-;!q{a}I zFt9(0FjYZ+m|o04WytZRyPZU^Hdz2e{=Mv?hba;Agm6akD7)I$;Y zYmUsyQL0pzmp-!o&rH!wNVSX7VI_tSW$+?HSj-1Q8sKLZ0FvgcV%l&(EU#vQV+Mh&GB!TczkKX_Cz5sY8$vZ3<2>H z=RLqc^Pyl<{KsiIg|N_KKb>r@#^^1MV6l8EnbIZ!#d>Tp9u1V-BpEEkPIu3hhO6W}+(a^-Y>*t3S=>TsUB8QXe*A-UKmolO^Gw22lf70> zlooWl^R?7Nvnq`_UN=aN9E}69p$l2xs=JOMrI-MJ5^hqj!pB@@w_*^oNAmkGOo6^p zymAkLB111rjNYnXZ>7pTJ4Y{&UUWQ9uH=_6M8@fbB)Y$xvXd4x^W}7;Qg@SJKn6&O z0KC#gulYke;fv_J+Lmot}YX%o>w^T0p>Qg7n9cK)Vsm>k*FqE53)V7R$G?9H_HfSMdF3A^`8tnDDlbJq@pmZP z91XS}SglVd>5d=>c{*BkvClBGjm?zi!>gG{e+#@om^Gl{hFa;3>yHs~iJBVvb{n2z z&R7_C&Ds`FOngSaooC&iA*;rIHhiJ8h|mdInOQOI1=|Uw7X)z+BrGiL#YICF<7R`X z%*`ES0R1qLeJC*xNq!`y`wogI{~oxloZkg*E){_@i}HlI3{2GL=;$Pr@u*E!pIsQX z?x)S+&RKY9+;tCKs~FE~dREHrjjVHV_&0+n zQjp7^PEYO#yTQW5K})b^hC)(LS&+1)@~L z(BH)o(uQ*b)S?-oKYn^1Ay55i9<_e*Oy|h6KNar}|84K+8?yKOV|noJCDL}M7CDW~ z&-OZDc=<)~p6h%iJ|zzdTQ+iH<)Nfwuehk;7F)|InyB%Cnu@aPbmC2j{-;DA@&87w zga0kzaieRP4ZgvA+PUIi&b>rp4%`rRLlx6&vx`4|S@?P|ULz0U9lv*fMU8yy?$i1- z$Zu`S;gs5EviWQ5Ei zm40HS7?R*)=94L9KP`G)hJ8klYcO60d15`Gh_u-z`3)}jwt0zR$N$M7&`r1fcdb6R z3C~kMQnX3ZDnM$h9+2sEiu2sbD!D_P8Wn09TS2n{1Ip%08n2%iP6|~?n74=anMH$G zde!xJ^+8l&`xnKcHD4^63JRC4UhOpDCL?_Qu;@eJ`Y3gyp#=@mFw#$82J&{mS9sF~ z&3JC8_~6>L8Rkvq=p7oXb|1GipeQY7N{+sl*SLR#tp##4J;(x! zkf04iizEp-F-R0kz!N_Nh8P4EajU#8-Br{iUkY~UVbh5vgO$r=Xpg&sIYI=a?AcLh=`;gv^X5!-b^6)0ZqGPFzd}cuX)oj~ zRj`@K-=*#d=k|K9w5+MDbhR!bU>pn^C#0&4%o+?T|FpRQv`wc8K@Co5u-Fl_i{^ti3n6)rA=Q^Si@2;i0^&KzXn>Ejb!Z$ zvfN4PWP;LACKT!WmUryb$oH_LZpGw+JL0ax23Ne66@)rvYO{y^cqb;QUUt z+34bNO+1wCQ1KN*V~#;Eb;u3k2m6|F1JH=Wb)@1vzP7oaq(X-VhN*I27g!(>CYVQ_ zKW}1JstUwBafG@T+vO*f{6C%Vs$iPgeIF0Q4^7|lxb|6v3TQe_5Y ztBjPAnA5aDst;~t6t3w^+5=k4LFu?&;XVI94I_wRQvx559_8%7C&74%31vJp6`6m{ zl7sj77@4xUnp{VA^a&3;B>NBOCoD2$j;)^-r(>{JGRy4ep>9{O_1isz{C^Nm=6s4g zX4~u=H{#NM2xVN5NogTKBV$nnHE%8!1{We`szhR>pKt{Tc-M7n#$-|vC#kS>qfZ7k!kYazjZuV3zP0hbu5=?-2k!@OVZn^(-KYH_1_ zkJugGoIy~I{|$_Q|E=}Y3P)d9CBIz#A?f`JicT{>lmU;`elnb!bfs>%&}OeZVRGoC7P;{%~zgJLI|&G|$Y-Nias^H1t#r669&nY?SDp^@o^TU)#>>Wiv%sv+CQk+lK6%wk+)4 zbUUIBwBx?wN>|^;B`o!G-=mA;2mT z@`d$S@Bq2tOAgFNA+g|H9+bi4no>BJ78c@z_+M9%O4h@~f$S4=#uWC1k$0yj zl~O{iV>(~%EMWD{omYM^Y`}y_2LX?(sq6J4!{Wr$fqF^vFyU6V}0DvuW zdK)kA03YE?LvRoNW2Rb_#ALCaKrU$!bC1Pdm&9+c*1#oCYT2)GzFmjDf$dO4vE+`k z($2(E7(`BqXvW5N70W9ih^5sK zL}1?I#stE0WmgG>tGp&xaieG&%J4Ni;wbAg9Mk@#8aLSoBS`_R7>nqv2HuWZ&|QBO z%b}&=;Q{hsq4ySH5G*a`LDW3c^gvpw;v91*#Px=}b9#{kHaj&hK5k37bUK7~LCVo5 z&Pemv6K7&|I=gf($t7Ck#n4cpO{&1DsauU0gTLKjJOHJ^Mla4Hi0j#Sgms zL2o|chX{7VFl3B7miV-s$5d20a-~7wWM z6!gbP2IztWnV$}01ds>}R1Bizqp;@GmT7+;asiPoZ2x5@;x6f1b$#k9>DQZQZd3yv zvU=d++I{6BUxlx0`^Bf^-ZucDwjV^U8-42^>iOb;np|r9dXpK?*SImh#8Q7lSW zQGEG@zoV0#{ga|6f6DXq7B~+R853})+IC5{{D=dfq+N@2<{zHWchiw5hyh|yjcgK> ze3pd`IVGCaC=)F*13K^SuUm9yymEutUnWB9vKaCuKoFFS;D#4OZ_ZknDX|kM3;;43 za`u3mg_E*vQYX#pb4F%nLF!6zRY?doIn>=8{0{Xt@SRY=IVuJkg~zO~-Q8eOL4TqW7SmR8RBsba#3*h44$*7{{&+x&!uzQ& ze9oM;wetdJ7m(oL8!q*eODebOSeK_(G45VJd5o*ga06GBV^a54k>#UGv$cDeB2uiZ zpxuYKw5nedmOi0g9r9xOf^TzI?%0%@F<;I4{0ABqE7d zn4Kiu=!BYDr;#~GarPL%m{?uv!Ef{~zONO=)O=VOig9<^@|w8M4?6O|;k51`JvtHH7fqSxa#fVy&(qGKORLkIYg1xZpT=pWIJ< zf!%d{y^l11V-ei=s6{G;&nZ$amRqJ2eyy4$BnA(BRbF~+aA@R-m zUm>M(<8g8UYYRr$_(yKo057gOZg zqb*!Y7+s7mFHvzxw4Eb56IBr`HA@WXrKtxgivsiP?4#Oa6cFQjn{L?3pYRN&+DpqI zf~Uw>b6se?74io!8mEuH)3-(1##KC5X$p~D!WuqHUyrA;EY@~smjULErjm?C?nzU4 zLLiC`*$nMGBdGX+9X#L8e3L9q@U2rW!z>H(Y3e&@GoV=tKmTxK?i;QSPSV;U0f?E2 zh=tC2S_}$(ghu==VPQ75IxDS@_&()76F-bgA16Kpsp$V88doiIwU{I$?abE26$~d%1Ybf z=2Q<_zA~H399p4;3l1jI1d}Q5BR`A?&XO()dY+6XFqU4(B5;M3SjGU-zWY!bO~l+T zx8`%tG%`eZzyJmM`TIpgQdI~nmZd?3S(;0J?_7KDrQWo+Us+; zrf&nhfjeH4bqAz&z-zp2y`5$KPp_Rczw*S}1Gz;Ep#cpWJtJ|7*)|{K7U)b?tlZ*P z^%$pmo-0tkc$;V*ll)e^d6!_{^e`{8k^?Fs?J;!Mfd3HHCEX@f1dj$59+tG+b0I%D zGA+cpT!HZ5(dIJys(E6w1}p2oRcP{LmY&Zz(8qDp!z7=DBULqy-sM{%;&d)}L9Eyg zk{m)_VHD|Mm{DAq-6pG}Q~_A5J;}I4FkL_#PLk#nBdOw~>%c9N_DIwVs^qb>FK+hN zhdk*Y{U22fvJD`=UrB`w!pj1Di*Z?p7Q@>(yA}Vf^fv9lw^rHh_}!1*^ zg=J^!aVIKlkeQtIR(gUE{z>Z_g)RaDHjYoO2n!78%FRng!rk+8*yD8?`)s)Zn8gp0 z&%Qv5L&6Un4BbjvX)_}zn9?tC&@U73LUmzB1p+@|FjCyiCR4=YEFt7I6G$h%4WWEB zFpch?IL#%aNiqex-3FjW^%)_H#R~o?`dA{fbCaI4MJzG{p6Dgvc}@(psKMYHyBw)0 z0{#4o@8~3J42hIR-L8uxT(lN5Ge#iGEKgln5&6D!4Ht%#Zwj`M_Ybi)ECOmxf2cz}}05BEX zL=Qd3VZ_(hAPYxrrb9zYjV|`c4@9zMqmKsR^BSS0ik9J#rIdpghSbNGE&@O7uU*Pn z_$*}T|NAI#=(r_MTJ)aeKSCbXbM5y;2bxK{U6ApfomsikEKzY~aq+KS|65#!%R61xtYmft& zyod>$MdgeT#E3R!MFnM-cD)k-=kSu&UG9K-fUY|se<^hPb|62T=aIY~u3W~?F?CMwofU^Wp2CRr zR&4p};oDA!yeR)xH?i>jNA2L^A+&D9D07f93aF0?Jl;Hc5cC6HLK3K>gt5o(>6wA~ zJLn*}2gk2N`m%VSz*nXpuJPE8wN-xDa{@W=ESsg5(V9wL8k^Ksi0+2>1K_f}N~{<- zF?D#fO$?}N2Dcs+%AZKLX|QYWpMZJ9zS|vHk;`S$6~DAkF^Xr|4AGFvoXCv0(1%g+P>>SE zOC~RZHkb1Sf&nIqwMXVh+ze*+Z;fFec>QIe^t^;dBZ1>$YoUw(=wz`b+>=mL_x@lw zobb+Jc(Du#YZE_iAE)cw&LjZ~l&p(ZPJa1YesAMPr=>8R>$Z`pSCOBq zLKPlvreGK<0^)Mjn8PnB5EmX?YX-?-mYSW5S;V6;%7zlhWIj+4QM?k$%Q0P>HD){k zq=Fe^kZfG#oB-;urkDU6%Fm6v?=6tXa_NAEE@gcdc$hA&jf z94bk29m;W*nvLm|!!Nb=9Pw`PK1!mhC?!x}AEJQ?U(?z;Gwnn+L(wDRg8zG85u<0D zz|aU*i-QCvj=q`*N{&f<^X`~(4=DxWEfImxXzCflrVIp~yaX~5LU`0`F#8Ksp5QDS zD+u1H%H*||VgS^X9+PAb-kG><(51g>$sB0$enmZ;xL#q>dN+dVan`LkO=o ze;bshIod>%K*G~HQ~2KZVrQey?!-FkTW|g<{QMW2+)D}U{u@u->BrkT*+joY_)KSx zoWH`F=!@<`2^C~ny;<6mXjq|u{dIrE5K}vDG!TGRGYQ0jO8Odee)ZJV%O|e#GcnnW zf!bEOZs|5Z>;Pn4qv9`kYLm z|H3|idTUbQO)EVFgC3>4#MkJHNfS@wP1+ z?3L!$e9D{385T27D}7w_X+%9_=ACn2rhF5J)p9jg32_E%XKyWFIeDg^->yo`RqvpD zp7;ZPH?oB+Kn&JY-TeL8w+C?RCG8@s?dZWuw_4QPlusj$FuNOgw7+4-?=;$m$>51J zRTvfB>eKRTpE`cychQghcMA9Da+EUeYmFc^@`Of%MkfHOTk_Z%Wf3$kg`0$Md#Bn2 z$DJ#4%b`c7WOKJd!2f~R>!_ERbpD^Xt|4g}^9ib=XOKHWS=svol4bV^^L#%;N=sk5 z`B80d>-uB0E_`ZspqFp`72f%qc=xUfMfTm$H6$R*L}U*d=J4*>Vns4~GU+sn;a~uH zN-~aQ;^Gh8m3ZF9Z+;8|O}vPyZwMz&N-UL%Xn#8oEz^t98Jnlt7m|`BY4tPUbu@yS zB|oTxMzXMo#nTO}cZv_GGNY3N!r6VR&>F5IN~a@6FfyCt>TY3xG#d&jKF_&K;l5=YNGDDyLe?{AN%f~Mr z*(c5v4oS}Tvkn-yKi1W2=IXb(76N*OF|x&G3N#$WQaF04_yGs+IrYB%d|c6Uzewsj zXU@f>ICQxpJMv(Gk7UVcDb>Jh+T4wsK0zf>u6TBk9@HGPyisFyi|*#ss^$jyJ@ZL# z;wK4^6qBN54eGlCu-1R;g7OQ8vv3Z~ha7Xn&UQrUI2|Pq)U~d5ZQvKAbHX~?VFh%g z;~iPD*;V1kTlm-Gb)9#!^=LLq2TyQ?zx9ToOaV z*DPO?Tf=cyjDid;+|WiA;<3~qxn-AzlOpm~7PS2JCqy>{X zJ4zBJUSYJ_S+m$-^ZAE}yjx@iDI-oco#i01ruc0R@~8LB+-d|jj>_VzM6wny5&Tcq zV&}#F`*Xv>obuIG)IcKxG+X0s`JI3f{D~CY+uJC_BfSzIS<#?4&0+zy>$xHiUs%2@ zR5UOIM!de*#KWhbEDFgf=CGaGThDX@2KnSBe-jBZvtB8Clk=h16`X? ze2M(X;w)OJ8Q}KBZ?Jk+J6DSpk56+Hm2vb{4aU|CUj`*^L4xPZ1vI5?nf;MFt2L)^`IfXJG>PQcccMBMe=EfF3wl z8u}EVi=BV2<-;G}9Gp0L={xLxR2S=RETP?2Xwp0|XqjSw0s_~{wWF^?4i4LA{G{?T z4-Pb)6}SGtdqU``=je!Hm-95P(BftO9{rGW5@|EaEHcTGS?<-U_68rtZ1v4De(J$OIA_yHhV)_-+9gE*kg=trgR-6z7-5LyNXeK#$*4j@atqcW?2v zSBrz=Q+4AOI`wVNr94$08hsf<{d+1DCregM4(j9MMwz_rPkcVsl4_b-}f0xTjb91+uTt!6&)rg!3`4lbxJ$k?_0BS|@kz#-p-+*Z(N(&ZPP3 zN=-QeiemIOa~Hzkh76;J5E#D#To z$sm={z(o7|TV&1WvRw?G<%W;DQI8Y_e?JO|pO5tx`E{E*L z24txa<*yZh>55rJA@B?%eY#!K$uct=Ty8#U27LT#HPme-0qE6 zmkHaju}20F{(Y$P3)9oL+s3w$xsPCsqS^rRd2Lz!1(P9UTCAz z;B}JJy-^CD-;Ye78mp;?Qs{xAn+z0Wx*xlv7q`yR;2Y%cm;17w7)WkQ&(>w;2zAz* zXj=d1qwjR1_TZfJ&ts0g0(5MSUTuBWAR$`}U04p^2n9t`U3$3!s%Ai@+f7F~?iMF) zXg&oPcA_B$4TC%$bW1>%iENUI^~i}hFeS@lih;VWNpGo81lL<j+v}O;E;uw<_2mUp zTF~mb7O}K>@NQ;H-sBZg5#_C&t-PMrJ5h19lXw4NP0DCx+N_cvUp!1#=hm_#gL#Zf zeGeGXPi62alF+P?UA%scK6~dGG3Dwrx;qcCovoO_%rsV>W&dhDKfFc;iyG1vyVA zniiLvW%CZ%nD61BG;|xChl5lqrww=L%6KBz(#lN;x2jiO`oHA{*keJ|F#&z2!~0=bPDe zb5oD;+uMWF^$&l^+sEupCp)rJ6mKqU%Md2qd2xF}?>+6G(5Uv{B>4x{x@){KA~lMblQpQy>%KL$l0SdmF+RE|9S9|)g4Z92z57h`!SnKA ztVB#|*DUgn5KA(f44wt=f;%gdvTvi1HZKVr>|hEFIgRUF=89|3qlcV;b&U(Y_>;8K zs_=t_q|pKsN2UN9u6|cMKusLzn;wul+MYc18f3ht7tDPG71WSu-exaXM0j@4L*hhP|)?36DR!;RK z{pnKoW~g@-G?f?YbO#`A(PW*SwBx&VH{RrdY%X=e%F=g-NnhbGTnPs68R9TusaJmBDMVjh}q?R+f%4L;9LowPlbbnbJR9#f)vW}iR;3J)<*Ny zp2gmPfwo`1aGVbnn{r3(9F?>6(jD9W)S0k*rk(@@EFV}~Qyu7y^yl5kirb>^vcurmv$vTJx$pWhOIj%AZ8gXQO!R zKMst1Cy+~+q?aT`F%7k_Re1tj=frMb#nTDX{c{RH8!VfjGbCQIOgJ8Jr3^!ZY4oY* z*n6`;Ej~3s6wTv}_;xp!)ek;Sg)8Q-#NaFiFGqkG`Q`W6dhOKRLX%bA_K!uI{bJlw zvuU|(y)8sZ1vY!?!d%+p3q9Yac}d8(iUt#*CTU0xl$q$T9>grp0n!mszKFLNw6Z}s z7Bx2w!N33b*Bj2v?}HzndA>XQr||p7Hv8Ycci{To#(l@L$A9SWS}B=Oca?F)`HcQ# z9!l@uh!LPe+eYk1=2<7>xUnmP)#VND~+Y{r(pDo9|q89C=v=``PliRJS8RL)XC z^WlvfJ1%H_-}J)@6Fy+9#b_lk-}0~@E$fU8xn#HQ3vSdnmReBQ42F1O-)PX}HH+yh z%>zB*v0!FP&Zn>ymE0c5?T79a`Kr-zFf|?f-MYaT5df9f(tsuJV$pd1tut?I!W9C} zU*{;gmeYmVdV^I-CwyQtII*+?cu6Am*oy8}ytEh&$0**8chG*(C3HaD^Wmx}uCfdr zG%Nh%3-l4xOR6m49g>}`TXUFPwFLK$?h|CzE>Bo`&Y|cVQxT1SypMVR_k3 z`+jM5*bQM$k^(5?k^^__;a8$WegH$ZE^zz-l)>AQ@P?Qh!7?Ww0Zm4NtcveiAAp)_ zh`=9{4z2QQqx9U+9s*A_{Ig;rF?iM5JF^=9@ze4{=WW?`C%^rW#Xt5xCd2`aK;3Bu z(g^jlO9jI6b;9`BV=9&&WyaZrEixxoEAu)uhLijq0a)&k+o79oU?*l`W7*DIZzkKL zQtR=X?}y3CVB%Var_=CTTfYmx9xwODj-met#;FGn%Z)*jP;r?+K?l8we}?87wT1{j zA+!s=CkjH=R47Ftiq(G6zm^h|&q_5HLhfIBC~W$aa4gfAJASg1Vfl3P~B_=pFms#lL+MNcel75C<_QbIf zCdRLsD{I5a(HX_pA8B%+mW(=)@FN^@!&+ld8}dgvrs6~2Ie7{nkeXxzFUFU+bS$eK z=3=cBZLDtsOC0R!*${GPJ5i6f@4s=^GvBN?&a?j)&iZt+9U6q+O4mA5#DzM&Fd6fT$RueyQxJv8Nr-RJIr?$J~aFXE^}`zz5i~P8biag z?ki1Xsf5@WJG4{Sfc0;18d{>BHE1=m&p}2id@gVdmsXv{EW#5w$lZz9@?I8ho+Q12 zp|qePuACQ?SzIrxPl3^Xe%*NUDQ0p5F%pYd(F73aaEpA;e~TINyFuaKTjqxWUX#c~ z`9{1A;u*zt+lNxy2qCRJJbWt^Xj3Ew2=@yu8jeyFQaW3^6HezgkE^r&`A}BU3T?&9 zQg(~AS-Wg%EYT-cfRkuY%qHl0>g)tLnGO632!K~FjRl@or34bG-f@Z;Hm}kTR>KTl{STVSg3+{>=S3lw@dSpE{ zh{Q=p=(T%?rCI2p54UpA=6>1Fi^<)=u{+gCd9usC+_--is+}n(z84;ovVqk!us4Ng z3g8)!x$$JBo?qVm0-t+@udSc|9_k)`-yIwh&E+NFo2!qZAKjUMPqU^F6=_&SS(e3$ zgsLi(6_#XF0#%96H#~GhX|X|#l*t=cywgazzo)bEl=PMAu8@GeV^iRTfnx+=&+uFA zCv**9y0L80qGN7rzL7%HnCJ(38m^EZwV^*m{1kR9w3b>tK8%$v3mhr|>jei*6%|On zp@{wYq8cEsLlC}?NhP4nX@Q$&{i};#K;qmfYF)PK$lA3>2=jKMI%O@Uoq@Dc=%XAY zb+twjZTf<6a+`(>0?$e#n{#{>oAXzRO=9(-Gl#u6PXE>wH(Qv z|J<8TG5cG{(xGCY-K(_=$4{KUcgO0Q{^F1-DIemhI<=bq8d6C6dX_}4?vba}_Z}3%$$j&{#WCfgAvZp>;Zc-YlO8{~ zt<2{(vj{<^i^2Eq5{&Ts3~9CuX!B38BU}q$?$9Y8`TeUaSXFsKYAZ=aaO}+S0>{mY zrBa2aNQD8kl@jUQ^X)R4YTtO3y<1Ktuzv?mR_0DMrNqXq{S^V;P0W#FQj`CG;^0zbgI&5<2m4nLg zB5QIs7&?~PSl|cZXCZpFSk(I>pl%dp^^2bNsgt=KFfC{+G2H_rQa5Z~QdFTnc`TY# z7@1eiz64EEzgRbfQ2v{q0%IBx@aK{9gx4Tfq#p59v+Qlu=?PwN@gWq{si62=d<$|g zR>yxSa)#qzbg#JVcCBF0TSX~5K~*{`6G7VK>cf`GoT^KBy9L#~O~{O}aV$-lU>N-< zipA09jx=qh{)qxgDz&-eDudb`*>t9}Ew2pgOecf0;3f*Yr$op84qpt&2R>kNA{1geMS%j;s#Fox01ly7 zAZw^YX}-_oRS=wA;K z1tll}o%C&k{hLDhkwg_&wp_blaVYEP@ll`Y3a_!U?*W6EHpasU*c~wplq22D6L6 z^5cd)<)Pr(`nrKep*|n$FyizAw@Hbae^(kW6ikt=2y8wK(t4tpJ|$PFq?AQB*A>_0 zzI2wMcxZqSRJ|Gi;F86R{f-*}x49FJH2_gE1MrRYpl1+x^?F4yRM#eTBl+ie z*V(!w-??ElwqajicTnmXb~~3@&G2`yhH;M!pCLE2>az|16-F+(QtV?2i?M+Kl9bjZ z?1Z$iDFx+4D`i^^h{n_aa%1gwP>j3L8K8WNmueh?E0lL=(UQHa7KB+U%xWOaXt-d$ zuuc$kAo@7OSxcrO2LWqh&waHtmVrttUzKer(2-sNjGRmvejNT!8iw>i(LG5@1%X@~cg1_5G91iK8#mqR#X z(h@i)iqVmGCy`*VaUCham880a=8%AB%=eC0R$`BF&#u-@chc!}BG&{%yFF|~+5zvf z$y=WF)|vTW)~qq^9UsN-JWP%i4x3LnnidSQMbK%wncq$Yp(_j-dNe1q+)G!~K3oK@ zEyj5ag!8E9t?RAZGwvYVY)d(cf_^kmlh;zoLZa^K3QpdFUi2pTM!NmVUYD9$5O+p=ZgHZwx!iTqvK%< zNWofSc&Bnw8E?SpbQsG(<>G`hO~ygDlIbM#9f38nmfIAmG-HBRiiOq+=`&zZ8<7pn z;+X*)rfr`PUI_;YTh5T7i+x2O9l4o`)>z9(sk(WmIz-BJKFc*Aovt zbK1P>+I#`6JQ6+TanHmf&xabq+N$J@qIH$;^1$hg9V1fJQx-P7=#+Un_0l7uh9*b~ z%oR`9M4BC$qxZa!N%tLBCBqiS^K}T_s808ST5L-0ApLk?x61K@C)x_QJcoF~f4xA? zk*eSRtf2rzkS%?svJs|#8Bc%bkHr(*SSm5OlH=Heaz7}d~htB<8 zt6@{mdo8J77U{&rjYQ%CiWb-L?wH+c3*MO&^f-jj=CHd>%kFXnz~xFoVrohnXq^m5 znUyZ)o!Z^td&v#aq?CK1Z2-4&1qv1>mrMnZO?}D3qGzbN>{FmQhK^=gZs4NoNa&_S zE+HauF5kP7oa8QHzs-9Bs$8nnpmcRJjY(*)rn2#Jwn!4{EE4m8gReua`f}STClA@6 zQ+lxIUR=86i2m7kJATLx9wZ!j;A;OX_%4dUT^4M1Zz2+iAnMtxe})fD!||P*p9$(Bhf97=>-)P$O?2h2RV==aycOubwj}|!gg3a3#l^U6TBioCR$WisX{hgeWt|se8(e)W9?#%u%vl}(HSSuUvd*fL08LP-0$=)sOL^Ur#0Vddfd=+xShJSo1odf+<8i%(3dMwiO#xhXpc5^?#2PCrs)azAKA zXNN)16#a)VypmPN@5rgRxYBFTpG=ony%PYy+_j@!?ATpQW zyH3{t-Pqn+p-TO2+&cN)Zii&74vecgzZJ{;x)+fygcMP7u;6P%@SXf}B2#Q@sLHvr zmRS#>G((p*&sz@-{w9H%RREPY%v;xA*KtM=TT+lHclZS7KWW7$+=9jta?$L414w0(bs4b%UDxg}hNnGPd z^4=a6!4-zhA&*4xQ!10elI;a(8ewR|{xquNEFo5y7qIH1(w}KLw??OmNBw>{^E*wh zW#-kdosCl|=nGVH*7S8qh&6&;CdR-HQK`ymDhLbM^u(I|Sz#9o1q<6U!w|Mb3P~iu7@pOZje{@m`#g zu?51}6A@tzk)Q`Rw#(_|&dRKSP07MxFnrm_a~6)B&xkxwKH9vvEaqTd{&a%MW$}C! z(E2v80`+}BWTc3uK|M4<7$2JM1x7z{EFh#{=c^*|=190G`X9U#kpNA))dhP%esy+{ zZyN51SNh+DW&Ri zmS}gcRLPV}*=jjosn+({qV+tt$&2~xBf6Q7X=5ca?x3g@VIO-0E$1}S51fk5QzAt> zvsau+VxbTcwuz-2`$hqW)x|nVAkDAkVEZ35d$zTX_enjwY2eB{k`|mcEqJGI71Y!i z`Ee-ko?GkqNeTPVk8T>UOR#{17VJ%>FiClZYH4kCaejGaR>k4v zGlUg@Mw?e;Bxgxsm(=o-^blNsWNy-ai&8S$45E1daiJp*Q8XGeFp$|GcScrk6`Hr& zinLiQV*Rq_K4u^#9rya7yq1?U1S^StL5KPjeiLx5r0Ga9WC~TlKkq>PpoK}MqJWlF z?E8fZim2z6+5Q1q{oVqZR8t;v5Q1zSvyGSV>LYkT%`6d-?>ScWu*o<|RAh$9A{K z?}tMig(@n|xh&+EFgB77{0pZ`bU6?lRx&C_-TTtIs#Sr+La31V1m=KzilMb|Ah2T3 zW0gS(34_hzr14_%z}|^5LY_pbdp{zdc^mxB+YE^BP-ils2Ojd^ji)OKhKI>!&2)O; z_c7dft%PL470lul0yMYGC?;NQQAJ{TcP*wyWD2y3R!iFER+mm<#pm8-U<3KOV$6E& zB1Oj}t_3Z%Yb1GF)#S>Wr1H}|u@tV@08iB`aR=aDmCB}awzT5~L0S2=xjpnMrruj_ zWIRWKU=7+r_U*xqG#a&L<5W2#un{oe8J_2HCxvtY0T;7-q+$0yw%m`jUu#2IFZuosCf}MBJvSFi z^pLdPiJeMk&g7gHg~)@vjV6jo4^~H=Vp!37;9Niv%0v?6QVW-u^8>*o%JP#197wn@ zphKjSVKkQN+6?yH>ke@Q9EEWV+XrfgG=rs0il)rXJaaT~H{yKoHy$ZP)s}Gnxhb zw^70ytaFmC45!9T7RAjc0cV$7!9{g=wi8fV{3x%u0JeJ|Xy-6@db7UH+Dz0)#c%DmOj1@q-Vc3!~i&#-~=Atyd^hb3@8&wo%axM&ag>D)lSYtHNns)`ys&CSp=H#8qp*Hx zt^799hk($#qS;LQSd_mZwR3Nh~LjP!nc7X^LaZ(ya{yy>i zG^O5XjgARAn712wH#$jnexDUY-jfx=+0079(j@_|r@k*qYAs>bfV~I?<-D(?GjmuK zHEw#u_J^BLKDKXkDF)HuwGZ?-L2-AQWYC+b^v+9FaO73=L=~Ma zT3ubu)_s0jI7+EvS~u@&33rGAp(2q~-tjv+f}eg)l2IX%0UFU|seE-9=A;36Ey8d# z&TEHqwI0y1X+!o_YmxC4AQ76$U^g8bLoi5KZ1xrHvDQa1FUc1+y|#~jiqpTCpmSWp z4Z`}FSB0)w^ch(%OU_L+f15J}+K(NxB_I;0^kzqrOh2e>-t_bK!Va`40~*8Cozd8# znQ7KuH?9X~k6^eVexg|kHeXl=PG0u%@{8r?*Zi;G8hpiKJO3BM5723oV~R{d5%sV# zvM0Q%Hdb1*DCeWp8gpM}Cnbu|BfehilrrP4Jfg*99NQi&`RVk0{&i9F=M1arv8i(a zMWEJ4c2r&=Hbs%`)I1;B9BdV8bKLldl+ZqWB=;iTwq{8&x$R< zKgU4O?(y6o+3b(bwK7kL=FOTeRKkq>6wF3f=vaXbVk~=oYNA^!qag(xinYz4T!C)G zoXGRVteCIY?NWI!Rn$GL{U#2K^Y6GNvC~6$TQ^uZ8eZ zhQ0?LjoU!9IjJN}A4LfVrb|ZalHK*VqM^mcoX{|wlu5M2>tQ@1qL_(TDYh5LJRfBB zid-<)z&CY{p2fyGCg_M9yRYf!L_ZU+(g1qj>4||PjrZYq-Hz1$d%r42%pk? zLpVn$k)$Zj?2JwGhEK?TMV1vT%V9_`os4l9I{*$(npGj7EWot=ypGepvK6dSxbCn? ze%bTe2Nk1oTJDPUuxd4u2ga1|>BGdrIYdpGO7|(IA{wABAcSMW(*>ARr=TpmN09ag z6q5I;P04xG?4~2VmE~%JK&g=mYEWBw3B{pV8Vw5fx_vKCA2yxEbb0835;3`N7ju&U zSJDCwyYXy)iat08FEDm>G_!#kK3}+vxlp}u!vI1!bD}gpA`3Kr$bNv!1>{pLB1@+E z#_0S(?lDf#3%5GKxYohxN~iy$jeRb$)r-k$^)Kg-+5%N`U{Y(IKROExFa$4!gxtB5 z2P@SR#AnOy%rT=*@MCWZ^${6jK}le5r0skeR)Py_nmsEUMHg~n>3GW9@@1^~j(TB0 z9=EM))L=BDTSWA7nk`pU=j{u#FmNU($$K#rr+ksH16QYmlhb(xt^jRJ)nWfy(jEt&fwdJJmvk-15drejIU?`@)ShAbYW%-DCy3Nb~z8$7JSz;oQg`UF>ds zu@t5Gd|!EC`{4HO{i!fO=ymd?T_#7CP#~bn`tmVT-Xxm$F}Tra2^BPRa*j+hT8a=S z(F?9b_prlAl;yO(L2MIdeNMi?0rqyH+E5O)eD7y`+omUrF=Z#rOASh9uHW!N_x6{v zr#=^iHLp!$X3Wn5daZ^qUY?0(>s}j;vV;!O(n0`bN@eG)RD?*~-i)-ge&g)5=JJ*~ zK;w!}is?g2^-cd=dqG(dnnsB$Mzu1bWtig6O#J(V`nj3ZiRV)r9JlE;PELwH`caFt zb(6Cu%}MpgzFOOEU%781B?p?Iaf!#Je=@Ecyl*3fED3D5Eka5@K9opH;F&*j^-BeY$OvF zG1YBqDiKftHL#cgs8CIjxHv3EMJz;BcY|RQ!b7m)Nep&H-V8(ml;KXRb&(z&>qKN$ zD2xc;iaR&nSy^RcXd4rr4Qh&d_^BFA73>_Dib}qVpY?T&{($${PT>g49#2L6h}P(-PB-DZsSsAyd!Gv*;@B|3jr!%ui+IyI?YJ`Hj^T&bTLX;IRGAqi%gd6K-#FfpQw2X-JU6V} zE%KH?!KxS?J#6l}W`QvHgl!Xhiw$h8!AXkQ>fFiQb6kmrhi&^11U#2((ely*R0zih znC-~R+MHdqz<^@aK~O_O5M#Jfjlo3T(Q+lQd9tL*6Eh3 z^r{-3JM)?fS>Pl{aD}i;!Gp74JuKz=TB*=b%JIx*T2e}5_AN;_b)se*`=LstrjuKw zwE$0bE@eeBZcCEOg(qoExhfD!?HG~Of%T+=YiEi{PEq+7-_iMB><`A*|ee~~TAMOF+zo`8IU*gc+FXIs$LCK{ywZQSBan;77z`mL#d1~;S zi=CicP&jTJreY@0>!U=Usr}46=TLAJ0Gqi3E`-=4)fxiqC98L^qM3kEM?Mw-&I31yM_>(Ve8F zD>%?(0{lS(+A(>!@1$ow#D;j!%VZ65#V2F8=(@t)9)-=rXSa`Ros-*gN0T40k1RTi z=VU71mJB|xwjK2`|Iom5aMsXBntt+(0BL>VDRJv@6ZF89jE9@&sM~QGnONDAnV=+z^k9T8sSi;Xu)v*Q zS9sNo<$S8o2O$D@kO3uM9^;^nE9sEa2h(a|ch z{7_e_zXXckVyKMtO3XP;;iXMnX-klRjBAdP?i)J2VD;;{@`XM!j7MBqQ(v6foZkw? z0~cC!X{_HXH#v%VY*#2^by zts1Pwnf`AksUj5JqXdi2#*nHhN=+KkyE>kc5(}_XtUF9VC{0G5R4VE#U~v4u3}34z zQhJj(KBY$U6C&9XdT;mR3^Wox!;f)vu61#xB`X5n#B~)KmkJ}ut|(?BZaSjRH9L;A z!`$)i!B7>1QGl8YMC4_69ws}*Hw|PHjweRr=P8jj>3KQd>y`Ohl+K*uz!PuDlA`MH9c009_mYf|TYO+M($){CPq6p9 zY=6At%2L++r)re_ZbC@V_rnW!ym4nuXN6G!u4v0TXfkoYnPgTjFwhM_^bvgRZah2; zxvFrRDFtpP936nL>^^x|G-Y`Gon$f(SJc77U<=C8T(Ou#uWzSZ(E=RTj%ybB*V*aA z%(Z4iq-pSyyCq#JJN}>cF3WcJt|wpg8Z;saSq(1yfYpfkrlX>)1}qAJ2_m$(L58(kD;U;8n<2K; zy#h#t@lYR7a>FeL4B8Nb?!M|ZqGh5u-r}3 z>%{D(6aIM?+ouPezTcQ`CBLv4uF|5vQsdI$Lf}Uc0Xabfg_<8h+Q-S9ec6iLfE3}A zb(r=9hDZcb-Wm@!5DX(BdVA9QhSiuBsL~&sC~z>qRrlSLvX{O)NH4si7Ei#@W%{@_g7C$KC%GxY9{)0m5VzH2nehwL}3%6q1w zuS^xWFK#$}63JLDLxues(&uJ|74bo^Khy7hN;do&E|(d2IV2DHMO?0O`A0J@QyO$N z&K1D6LW%u?_5nAReX2yljs*jAba&fg$YCe~NDs>^SAjx+uJVBA1hPiWoM@#bOl4if z8|ZwRvv-s2gH}eQ*2YoOe$)h%YS_poaNp}vg0=%>_vv+v)#QmJHjDuF*J`O`zpDgY zi&>2o&$iwyr42MP+jva?p)pKFaiNcw&gnrD4P@9`!u8<@2V!;$F3%B45-HX8S*l)W zQKH;Ypb|052EQDH6L|xJ1fL@^fO?Hc{@ELA$J$`a`nVz3?>l<6mx-x2+UHD8BjP%v#ORn?=#FB1Uk4inn}6w?JQ z(blU-Z^ym8)MYN(s=Pv_AP)9NZ+htD9bQYSMi$bEN3DxVTwkXp>C3K$@@)7(tWhe1 ztmMW3i&my7w$B;nFFp=Fo^B&p4IBsd=0Sx-<0BO0d)~FSb@JrOpD*!-?Y($P+;1 zuEtjJ5UfcfXD!x$PDjs8|3<$XNH}Y}5y^j%L#`3M384m+=`*tInyEOdZ@Ysb%u^**M$@iRv; z)}_Zm8+fuLA*T@3;E1JB_u3J7Rt5CvVr97%&tk*pShbsU+vzSOz@}~ zf^lwhTD!izr7IN2VhD+x?+RHIl2VuN-2lKWw!I|9p;pK)NZ!6ZQ1WIwJ?dTC55BLi zv%@)0(amKjgLPe>P$!dRgx3u?Y0*4k>>wy_=X1QaOZt7sI=8j=o^mFO5Nep~ZS01< zF@8EAbciY#MK5(1FWN9@)2NH3Ey;bB(!^qehgpFXS5fe%?$fYNjTAT@l13vr6r|f< zZuYB4)>qmSVYRonP;LYSYFv4Kli+U!<~W$mU&RuGTQAxB;twoRITWTyGIP5Ty#XJ~ zGsSq$$*dE}JTmo%HF|2?Wl`<}{OdX(7YHwU_F-Vp^MkC;o?UqBcFp1dloD*r;+KWV zF-UYO=#Jz9IcWGi{_I~Pt{Jxwrlcmx+ zq~E-W+?~8Yoa9}{XMSgj9C8K8!$!>oebYgHu;i0@R3v={V`W8>^8v6{!>}f_bXN2! zqKNXt_>SgjHo*wLX;8H>$*J^dd|IARbH&Kk39SP)P3SRk;9fU9aJoAovd$d)szJkP z$1tbtW8NywkLVO<_;H9MC@9V~=j{O6_ffji_k;0u+(!^Z;$*adO!A>F_80n6fp3t` z+I^Ew&!F?6fRXWmG*7Z_7$)c-$&g2q^vZLEjNa5~OebyDMkX>?;5}4T$Cwdi%*UXt zzrK*ULwon4h9(h1M+UN94PW_+6@&g?gG&9{T-HKYt9(wPaw-}tM$~Vq9635VXKm#5r9!4CUAGs7KT}drOkJmz1FS7ozvTRDR3_NJD*Vz`uxBc zu2lI`n>19maz#S(;>KLt`as7V#CJ)5rSSDb>TYwR7`5k{_E*6si(6m+y1!k@Fb&92~msb`bZzL0~1Tono?p2ediZQtNs6V#=jmmpm64JIkxbdOowNtV) z#;i~6M#~Sg$oEOl03RI9;*oFZOWZb~TdU3@ufD14)*%p;;>75q; zdi1p`$FH%|N7)s}97GQ{{q>G~>(Q)mD3<4PgD?_q ze5Ww&XDzR1LiT~7cibr1Js`;okT9i-YANn+MVf`MmeLW(ab+eDQO-*ChaWz|7WWp} zk;9=T*<}Q=0@{cb?`$*R96}+2xiH$BQGg1qS7S}MJH^=y%5(jBc6wWq>$w@dRR(3J zGA-oN_|4NN)&_G9y}M<%ptIoA*M>q1a%<67wp5Az}TozUqRZ8^yplM+oDYh z)27ziI2R-i5{V^0fW*68VrVGvVq0nQsVg0?(q-Bt$%5D><#b;WYq`{N!uriHy**=P zf4{}`<8GL*u~=_JK(fNzE0ffw{L_z`7}b<4IUAYxH1u9^5OE^b8c<6iy{=}&tVu`v zQ74wf(^P%YQrGWIw)4@11VFTZY)bX#I_ktKN7qG{9DN>D?vD zVKFimqlX~j5p#C#Id%?bi}7`z!Q)Qf7V2KIk5>*$-R`ewp-t>`5Y!@1@x4UY8bd&C zSV`&&?prgnS1d48Q$fzS~y+CgUt-TkXd}s zX|T&|$0s09VB>q^h#{MuZ}2N@^xqZ)lhmDH&?)sacHfm(rr++XblCMDzSt`*uKDd! z`K#UPH0)&4Q531cU{nbhzqht90N-U={n5<0aI8Nte)>ui4CGH=c!T)8*P7TPezZZ{ zzD&2MG?<`4*mhc{1%DBK>2yRk0}0c&l;2=`S7r-4kk3{Axfrl z{5`2ZY0GB}N**>jWVR@9*vtIF4PapWlHiujd#B?8v}2f?_lfQF_~2$Q71X$b-wc(uGQy=nUC=x}1%47nC^*Nd62}`ZkisbLtif6Ye$EX5*uT9}e?< zw@-L|$YM{N{+f+UuoMoAj0~?yH;ty%G;c6XlSXQGL{wuStEQ$vHGD)>r&~7bj6k;3 z&TPb*WJ%XOCoTT@7ioDpB(4Z_4TAfwu!JUTrl+5tv2|P|eph3XsO})PE^)@E4rnK! z&+xR%2{4-k!7sHEOFX3E2S~ErqTV(5-I{*fUrW?HbzrN7S_>?>7gJWEyvKdTLSnAWmkUT{e!3^dq|xDvKvWL(`>Yt?a(BPaG-K>Q0N2-6JJPFi)=fKynvk!iVY)88*VMvp@Bk$U0eg9RkLR9yB zF(0dfDKU+ngG6z#D#YYLLlw8_k@JsWhFl@*NVVPWz#7n9s=S3yeE`1!@E6;Ba4KmX zR$yq_+etW?H)T>O{Wilj+p#LnQbEWgI@eE;KC+gxi9NnAQq9yR_EFWzA?<19ah6ED z3*-HPpSdcSr*{>W`ap=<}<&q)`S4;SpF2~A;LbHO)b2glU0t5uY8_eyhOObcU9)Uy-k@|TZE_L$4hvv zOan%#R|1qaUodmPBvKCgxL%|rN)A}Yk&uugeMQTReEUgbhDjnFvBKIAxRtxH_Q)dW zaiQ)xYEJadpX7Q`qH0qW=a3P-#~9hyW2(@9_AOfP?H{|7!;PDv2qH?8Cemv z(;2ZJ?I>`xwZ+#MDW>4yj@rzQnVB_&OouiZi!ea;CT15@tb9Gxb^~Ecwq$As@Y5}@ zlhhxJ59LhqX7AQTTejPDFQ4B22}zP7R1;TLic(-J>#eB$JBARH&laOq^F0N}yqqve0BlD_ zHjjkQ5zWo0mxXqZTbYRNPC%gR8bhwmg}@>Z8jIwf(GUWp5~?t#+#e;~`~RLwo^T3A zREXOk_7nO9Q1+(-f6I&U>B}%L-f?4SA)U`!i^0E={em@y2?q(0ZWRd^l@T}0#kJ^= zC1l8Xiu$caoH<1C!PbYm`z($6c7ZphU?}8|IS?#K@IoR1ci?Qqu@|Y)5y@*qAcV6? zhZ_@lCk$M{&Z4VPMJ7F`I}Re#4F$a7*}s^>9~S)2l}Q)@=vmda7v!=ucRyNSdm}+F zQ)EGHV~r$M1O%X^3+zdNPRg`dc;LBm1Ce?>yPKye?54oo_*l2}C`UnOc{Lc(5GEbS z;2>kr2MfNWhYerFt9Z50Oue19L1Phns$~tkZ zwwjRo-ngp~D@7KP;DhcGHnGVDqy^aFvK`ej?!xxz2BWVP;sgtXYGT11F9ik0 zos?9M?;Yr9igFJ#%#e-Vy&|Ao=iF*nvZTc^d$#r1|3r1K|c~M(grcney)B zMJ~J3W(dJ&9>a13wII~@-eyH1A&7P()OHF!{nokD^l?|6b`=n?Cman;!Uhu1CVF8_ zbf}KE+jQ=wAL~2#v3Q&|Z^AETERzG7dw@8|aYSQD2d@j%-S^{yd_LjcQ- z=xc*Mo48KlFpyqeSUHwxA}6sPZDPkIlrElA3?8;X*OED`QyRpKcS)%t3e_8BR%7I# zbhv-SuwmKIYN+>NhKYRt7$ove=|&i~>TDTayz2z7)n_hT8dQ@;rtU z*pdjZet{n@vBkiYLOCIyt+`pv1a#!V}%b zIvJ5SH!of4-;`&2r5i^a^nY`%mM1tM)Ube&l13k+XOZ^40mT6C=w(zpD2>Gb~ zK+aA+ikn-2PVJ^aGcG1&Q`#xolC}B0*^`XF}d=4%DMvl@^p*Dt+%?xI3?88ie zY_!xsSmCBw&ASvDCEB@5JBXVQ1c{dG4(}pldJIcEdPQ(@4q=_5?Tz*SQ+tQC19fhc zkn3W+=Otz`{)_2&&Ps z5G4~&!>m(4qK7lr6l!iYotjcEAc-#zUA;oMn1UU(_nF*+-8Q23^ZrN^%AG$An8CUV zdobopLtwkg;^0B#*UsED;?i%;f=tq>gPUHBF?itK#;_Vb{p-Vcd<#(aPR0|n>_oV# zqAaKjw?>t7B*P* zN}i~%f*PRaBu(Ci!_{E*d7OCV%_z{kCStzjeg2;OxEh-7g7yK$;EQHw(=}->(KXD_$eG_|xdy~@#MsaE~QCc8W+srWB9PF3s?P`;4?E)o94`_zt z*6_fOK}@z2lsEGiICI9{gp(G5r)&0(nqvF(l5)cj8R=@-5JSHwlN+`I#z66QK%g5> zz283PJU$X2Ix6ZA{NF9s5;fa81@2!0W)H8JUA!yBN#}fGh0R}amwRH4g@jkz`wLKO zmsb0LDqUNFM4wJ;ug_yu7T=Tb}@` z*GOiHy$!e)+g`&jGG?xQsdElk4g`^$_ynHo(J*Qa4rt8L(iwywC(Wu_KO;Ng?LS39)m-iA`o` zP0J@e$4JD0`HsNJClzpPnmnA>lf)tlZN-8w2Nli5CqXDs+**1{qz0>^U+WAK_EgGA zPpB8o$cqIrBAod?@HoI(UFK}wDOGj%!k&qbjFw8{Ziz&>?KAs`I=FGvY9mlgl^%f0 zsh3b67WV3FoSLBnRv-`2RO%9%RTs`>otxbs;igiu%#TP%X*NI2D$GWfHXT|e_*}L6 zNNRynqnfHHNvRExa$70Qr?mM8?#E^dbgV?`;|MhS;FtC<%G4jQ6jk-Wh=iA++= zO^8(1hH#9p1^p_TJ0H=Ij{h(eXpv^YdANh-O*bUF9YSM5rf=*qW!*R-5@6~dj5cZs z&_A&(XcE&NxmEhv$f07-PM>pt1Yg>jd~M4s)`R?0GQNQ!VrugqG)zAkc8UA> zDx17Yebm|?cbQg3VW`@(ia_9h{JD;`HYR~^9DMFM?-y*`b0ncN@ES7MLxa5t6QUA@ zhRN$qNJ!EV1L=)W7XmBm>}p2D#JO=1f5|0+H7R(4IqhWrBtR$gskzQv$NyN(-4l6hUbAMz4*q_zs`X(@Ea4MA zt_PcW1Fx-LC4{dYzjk%&3T3!@tY%jOP~+*-;cTOInf1U_X2tZ1waS+g)6#aHoP^XP z4Kg@aD9F&=VaaOw?yZKeJ@4LZ_p{r*t-DgBaR)^P*@^pt{P`7b#7@m{(;AHL(F?>d*KQq~c!1vzQ#qk~+@Cc}2446sm-RoSdZ;ZH!jIZyk9!C9#bzBOCMdy&K z2mJ=4>$sYrE6vIvBq3PJ2Gfx@uKUsFb)DQjy25GY?UFVa6C+y#p4SDL)c)m=n=3DS zdEhHfg&v)&XBdx2vrCjP5$5H5!uCB^voxkKg@va`%nHh*|UI-|GUq&drPx;d{?Zyr}CqJ*Y9dc*=n z=#wgW`j#DY;v|yB{R~8oL(-L(6(mBD` zcV-^jN7y&q1^EA+L7;_>P9whxN<#0JyKn=Z8>mf1iT8nUL=pIj>A(vwia=C-F9u3m zy;AUtazQ7CJ*dSb7f|vUYz23VKZ~sv2_~Ya(L&XZeQ@f|x$r)K_&9M3TzcvQrF z&$=zRG)swxzi5$@`LM9m!WZfxUQox4{gwxP7JBXa(O!7TKrKKoyU4q4;}FF1!J-&7 zpHG~cw_TFx-D{%~1byrhdp`ri+b{8%z@tk4Vk?3cpPWV6`L2~_wxeQxjvY!w;;;0j zaFGGT25-JSLO4U(TQ7=EF)5mRgoi3Afhw05Ia&RVmF9U$3y2gS{4orkvkUj#+4YC_ z8^<5p!`pWsSI*vZX0{F<3df##V>`F*L^+E;V4xCmOL@RK1fa7uoU8T62R0mYRK^j7 z%TpXK0gka=9njBbYEqTv1KR?r0dxHiDJ9IjK<7BwK-7aiI;$upzaFF z1la{zO=okLk&GNlhw!o>g`KrMpT(j&CNv;n6T+o@&kbLsZg8IVG0Yc$k9SNV zR5HPRr@4(vQO@ueNq5F^y$lCpMxE??W@upJ4aEAhgWx>t$@YZ6s)@7H&1<|!{2 zfjv{hkbMAcguY#pR=l)Uha9eawj43I1@HLL<>nTfUt}BWd}#q63;cq^4>G?ueuS4I z9q2ZD$?0jR(mk)|k(oxOTPr}5qRASG4eAZs8ONE?zl(tc<`^m8c46Raq_9<*}k zofB$!aMrR7lhJFrjjzEXEsC0VOP&Fo+nRZNFh`+YCWfBDCAD7)<1iW=sQ9inCk3)} z%`USG&U#8kC?u06Q#ZB*4Z11HuAuEHQto-ot5{$cz=|aeh)CKgvv2{(Fp{{%KsbxE z2%3Elo8xJ)b28w6PY+8X<%k69q@#$Ls78V*Lwmh=-&JD~J=J8Jj2Ar^uY%e{eZ_?I zCJA#UO!7YKq++p-nCU)VP;W+lGMtnHHIK<{wJ7IoW>sVQHlW3)@iG99YFma_XEDg3 zkR9%}vxsZ=s?ROHTru9gmthSVzO{3=ESm&fLKx7$6(ee15W?1CAeMZ}q3d{rz5EI^ zt_Y@J&NN|l$5`kLg-XOvH_)Vuy!l*x%}!~JStjuo2bu#OIi#VMhJ{{f!2vW1lG>OXtu*IZ zDxR*>pAU!CcS+USfQ}7KBX%H?80+Row5c5Q+_S;dknDb*)L>J{q#Cyqdcczeh{k}J z6NE2t-)){HM0Tr#7_+i*wvrcb)xg|g7$OjC14shC5dc2u?N2rOgBQtp4Y82Pr%ngJP^rupO0-D^QhuR6>)>! zTafQ5-KD4l-~H?30XgK z(Z1g@?IU{H*Kd|Db>HW?@}ALya}t+^^^wq>cE;wt-!YH;gvNOcWPX{wXTjS%tWBkZ z5r#>69x}s6NzWoiEH)R3|3CW?IIee+e^SjB8PD)fx{0FRCSx|*$aqRgr+Zk)~ z9jfJ0UGlJ1z;&y%cMjm>v7KQB${iW1FlRYLIT1Mc0$hwK58mIW=ub}Af}#H^l$c%) zriDRRh+f?6?DBkToea}lbt&Ey-H*Cf*4{F;KWLlFh)=mF_WuQNtQ$BW00$(XuGzdg zY9RB-jG|zSVkkOjlo5SINuI2N_+_;+4FpNBqJ!3?kY|XH#^3mdtUbZN*)4}k;2@sI zMC|B;CW!3p2z2DMz9Hy z)d=wk(LB+A-jxU=cLt2|tk&p8S7%I0pZD6=R7Ocu@4*zvND19P83&F#sxMZ4%u69a z64zHpAa_oln^ID=-$3(s+SV4MRr+rrRU)1FQ2@gW81?9fG8lW88*ikLm_v340=|1i zfW0bHxG)93nGFv>7tT7@hMme-^#Ug}$_@p20b+$gm6eIASWjS;v_y9QC@r@BpHXZhe3?#L6dAeIVWUA#3mtxyo{4M zrYu|5a49)aC^IGUFB=+`!7o}k;r;{Doh<{#`Ty0?1;6Ck%T)Zk{2V*PxR$+pPaTh` zrL$?pto`ev2kweV&XVPOWVvER!^Tz{x@NjS^GuikG#@)gh_O?I3|0&sc|0DHIKGnBjU@fK*iU}r&V4s$#vr`Wm&IxA_zy}9~ z!xz40f=b&@`*pWl*8{SecPq?RH5@FBx*g?O68B#iI5iNhsd>kI>wkB`IBdi@#+;OY zZ0Eb*f28D2im#YN*;T(~PFi+=}x?1XL+f3c2D9v3`Rlb?q z$c7SPp%(J97ttTz@!ubfo1x-fQBYfW+x$3jI`!lexT}k`wQZTZpS>{saQ6OrQp#e` zH2n$fzPSnWO4=e}>_{pA5o{bb%D^DV+lZ)FAw)zAep(SwV?x48z&MnIgElAKY9tcI z2xmTrVnC0=NMo4dkc7i{Dw)T@r(QB6(*L=M*N16${6VERLuc&Dq${iDl{Og`SJy9~ z;Nq$#W3hQv*}RgQ>gpzg3@aPT%X>PS7Am}RsTOYD3>u9Z%I7sm5b+~|z!Jj@!I)}` zgF0jc4-ouyd0wj21L5^$HH1dZy|eZ{y!ZOv3=Ta85!UNmGB7o z%Jgy_!yE2;KX1~7&B)Gyx9qadsYS}nh7ksjGNOREqa-o%c|L$ljXx?qtW6^rY#~7T>5!V&R9>+n0H~{^C`L1D8+4vVppzYL3h;qKr?{6 zJc<^PJwpE?Sz|TwrMJJjoU%91du6PAX002P2 zlL5{`rwP)KaID>mZietY?KFZmqZ)c+PG_^_d&p&ZdKZI z85`|;;0pg!Yj(24mb za_vcY9sE!Th7WzX1zh%Y8+-1*=V-%njp2`eiNW9(DBRxKZCvzk*#%v0d{6^iSrBLyesxNbFd9TLz&d!;$L9aHKi9rj?BjS7T$TD`}3hV@oMF0w(l2=_taQ zANj+OQbwhey2g6*tIcOMY8*An^5L~d(FA5VGKo)Ph=F@*22+A>y0>oAL0;otyM1Y` zYqXub9WzhbR6;ECKWz(p%x@er%CP(C$nQvc7lARF zjAh6tbdR^wt&2{?A%;kZks$%G4tJxDyTo44z$DX4~`SUf=vY+9pstm{Yx_7VMzqRS!vs*FBsQUX;3xCdF^S?vS&CG~J zfDlGuTY+6fy(D6q(OBZjFxxm>$EZM&YsmM7lZ10G4G6LxAJqM1PlGf7AR_l$i&WIk zxp)*r0fK{AW8wQL-k?_tII_(h?Ee|i9s=Y#pit~N@IC^qgaz#{(-fW3%w?4Utm}*1 zMFJIy+#Obd6NNXX)8IC(@0y7IsS{XHVEly2s?yZ0TT@GaOn40cwP51g`w$r}b~O$S zlif7BhKGVd0LGw462gf1!hSXioK*pH;&#X~KP<=TB_Y9hT>B*^gxmo{O6ASYyM;NND8qsAhS;Rz5W2*sx*a zOizrbf5zf#JkPsC5o1pG7T$t!>BtkL@+!1NaY;W{WZY5Wz-Yq@=2{>Xx4kHj5LMXRRg#AKDTT1>tvAkNZXY%v@nmjyArz9G}NkxT% zYuq2-Yp?m1JN;_V3m-|dXgVuSZ741Ybe6cl_lc;nH{{nZUvH-fErYo)e)UVvL9>QB zopFziv=qMWAAyP#Lul_M58KhTc5K~wzdQTH2ffV;{`>7$WH5b1!0Mvd#fxKIL+3Ig zk-+J7NWblX{`uV2R_6E#4?lVc@uZiD;tv}p33YhZ-GGz{(WPbsH>4!p_{R8*7mRj= zE~AB$-7T3h2jS9uZ|TJ7(ru8~T z>wwp!kbF;vPCz_!HD`@xF$&5I99merUr6#y6+0_IF6A#~DC2+4p?B(+%MSyYiY{ol)UHLZ2!eY291#>fM@HGBY!t6nG~n!?1QDtGLzf*9t|&g9 z>Q#=g1S=O+p;wG4fAX6TkuoIo%Oc||uK>}^LR0QA)4_B&)v0;wJXJ=O#ViYy%p9Q{ z>nR9Q8R0siQ*dCM{X78q9WL^5#W&AB%M5KhD6v;K8}tQuHYus^?p9Ex(E?w=?3GAv zdj5C@Mt~j4o;=ypGYj240|UU7)NI^Xvq<18+S)444ZriwaQXgcp4tCZ3dR(1;2H%rnk+!ZELqCs--!Jiafqgu2qrRX6*Q6clx@zFr|HcoJQ}g zu4pIYxP<|W;&BA%5{crnZ#>c-pg{$m71`=$SuW=X3#%BklP!1!4D_%z@nlI65oNLlY1wX?gf zYqt#7O^N3x!z|2mKuvL9p9{;_g&un{Ij;C%9DmE1f&m`^xU;c|n5bcz+_EMj7Pp`@ z5z+j~T`y7NCuR_5%!^<9_05~_?qNRo`)6->6yf5-Akov7fEG{T>ueejE*1yq!z;mH zYMh@%&f{fP7tiw#oXb9$dlF*$_vdVbhIzgW>G2r%n12oi`^(JV8;#$8nGw**NQ{U` zep=JBtF(CJuu%q&{9@a;|3dt=6g*Yc)7;!cOvFe`+O_HF373QxkofBES9@&W=$tSa zh=kM2g8SeMlmSEp#(F5Go)DHXoC|~Dkwb%Cqy|Bp%-B1q>}PP=!lZN5jGz1g@7p!_ zxBf^kqX>#tgkHRGx;)>H_|ba$-!x*UGC4WP+dQh2^@J!h@;iLdYP)A zLc`xdKl%<7?kEugKn~-utQ&?p5&%%un+8n?Il+7T)wZj4*(PW7l=ftV*j^1WG%NO6 zBZv1|TN4FoVEgb?usjvx~PmeN}lK@kXcXHq9M zb~NpJrq!d;f&M0FP9{o)1O2ipb`uZXIxfg+wS3UW4qz<_lfxmBxECvwB)||aTZ+|; zMLbByQe=}Z7z4LDWzK1c{ zf?ZtxF0Mcu++&pvY+mrbpJ2CL4bDhpLL|y!uQK=)4%!@gIxk=J55y}^8lKWLWQr3U zc}I#_Y1Wr@J+4C=JCO;&mY=Q)PQx0amx6%Clg7e4jkCk)NiDB1(A=9nYE=0lPUUQJ zi%2wrK?J6J4I#`NMoL$K^b2s&N zyAd&fKvkDYX@{SNM;cTwQW=;g*44#`v}n;^(uw4;<>vH^ah%P*p#A(0Yth`HXcEQn zEc>X-a5gwR01mDlBbvWgF~udSt%<6nn7On{R8e6L=*@=?>VW=F4{Ijs!1laH*e0L@ zh>Rmf2!MgaN`uuUvbl;}sEg?At+l_=3au7BFw)=ERc5ozTcGE4aJsON9b3MF zy%CwG%v0qF^K8$!gD|`+CWW5{I$pK0<*|0-e(SUzXK%S(@ zIR~`EIk({?k}WR!m41V-<9|*6S|rX!4hz7GZs}mEThdNb{6DQ3_MD|ZQGUfzLbpk6 zL?ZJo$!b%A|Fp^W?B=EA;4IHyKNXf%iD3W|%0BmsUsvgA5l5&-gSM^N>HH}>#*@=LOmGnpZeM*05+is?S4k}X3 zB^kD(1kkQ7fzR10gv}1xkn_{b#(AdnNmk$h{ zjxJvwg)1lQ5*~gy5VK}Xso7Y>?|af>y9bh{h=^FOCI~rO zqT5s`T2=kV33o*7<~-4%Fm$eeDFFhGkP#&iJ3)kr3j`%5ZNg=OBc>xFCP0;1CZqVFHN>J5f2Bq7EvS9{E3bA)sEZUUL9<}M4ij2cX@7jrUL}Tr0 zaB*Y=jrhQb=H2>{SKAR;54lHH*;aF|d(kO@F$sczdh*BXu)4Qlw7#^rxAf&}U{q`l z@U_8`FwU67CD`RZu->DUuusz`!~zpnGPA_2$!*w3nKf<e*NqI{yD8NswXw~*qS z6(+&ZA|s+CPYLkc!0!g~&w=vt4_XiQ`IaaR#tzGqheL+?cJ7i6x%JURPIq%(zpOuz zom$uX>u-CL9 z0U*S4p2#%O9)c4iD>UFL(?GXsXxU~9v82siJ=a*6=~*=kbJ=Hjplv>O3R8kGu3R%e z@|)&PGz7-9su1xtl9j61P0E)4YlY)mT2FJ$ua zD$Rcda?b3Xu3NkR&KEZs*)?z)VI(UwvX@ZTiBcTuXUOX-r;A%abiFd9l$YCdan5rW!RdX*e9OC8Laz z6s_F2pQG+FAu9rx^z^cPqZAVkhfS+5(u0V00-`AD&FX(bIBt6V<i0ctBs&D395|cuzV%REDN66Hrm`gDoGzxQxguiv`7GGv#`f{tVMOn zhp6;Lim{niDykKvfMn>#idfhO>($wM($&^Xh1m{Mh{!VCLr28X`c~E*)*7Qmf0f1 zAttMGa%(YYOHVUAD$!!#2AW2nPD)5Hq_8c9yX(caiV$iDJvZdbA)iXSEVL1C>}eE2uNfsD#1OuQm9j%E)V6LO!l*gxv&eyDlWa) zZYyVA-%wIw>&)HRH(>6%<;&TF%}cB+XEFO+Z7q5x*?!^8m9A^g*B*wqW%{yX^{5XO z?LDRy^*JG<)Ko-a^pu`Q(>kLHND?F5d$%zzrqAHFBuQ##+6VHB<#lX{_#r^hO+f8W zMjIHFX>l|(xEdS^2YdljNI)2dtTu=PB^-y!WU?>nN#$`y2p_DX6E-)V+ik&FW&k zkWI-X$0OMm;6+*FQ5=eKaR5m4`-7G~0@CztLaSUa#K)I?`HeiDkMxv_dQ+jo?8W<$0(Wr7FEG6hic$yd_5)j_IEF%%gb|36; z00K@3qYouMo$-^(dcNYk)$c(gz206$t>G0RmD9-Q=ok#EBPfDL(&@;0-t%%_=LOz_ zg0=_y`#e^^rh)LmWLlJddbghkpYGH_kL35CNS{jdQ)ueCrUr1@-;i4vXMD|Rh=d7z*;_xVLJ{I|D4C9@Jdo=9DE>xV$c z=hHTDUdFP{Bq9+pjKbiwjAY#>Ns=VWNba>=eBik2QA88GhItIex{ixD@R$rlG$fNM zJAHE~r{K8U3idAUb*VE)9uD38+vl3RR%7 zjN^>veq8Z!JqG3mV!_1-j?m|CIExdpq8L_qQQd$09DjXPLdv3c{@#q_)6NB{DD4%r z61`uQv7(K8cwu5|reitEuSz1)`k$>`*Ao)^pw`vJo4x>Y zW$WwelnP$2fCcaA0^YIUH5%c=WdtQc@W@ShkHs?b;y4T%;y|xC=2`Kn%=07eKB@tX z4o!n3be!5~x5{au)KL1OZl;3xYVND!*kT_-Se`GuxHEIgcF`UOp^V8A*9l2sJc40- zETd%uwsKT{@QV0fBG`y1(#*6LK<4FT)N`h9Kc(pJm<7W#lgbtX!R{4Ah z`0&HgJ-a8O#)jNj5E6K^SF7o}lQI*s+EL@1X%US;M%&a^q zu?X?;`s$^bPu*S?`x7D5gboSkUwbY&`;aorkC-Sbz4Q`^vb^6@O9(=PYs#Z438jJ? zB|^zwhCs}ZI9(SM_6x#tnCSOPpbQZClov`~Na4F#_GtFWWk=5T6sch?pOG+YD+?g1 zUrKGZ4G(X_E&KL1MKj zxDIfz;M=)*z-i4PLL-{4GimJ|=NLEceNuKMFnORf0*E&o5W=qsq6sBhSVdD!AtKS7 zs;ufZ5swdvLxdz6!IZ-THf$NyA#faKVPAwqHxo5|}6djE80Qz}5c}NN*9tMO=&tJ2{yH zb)s2h@Qb%Yw)SRC$x|Fz7XxxFpTef99CBQFgK#fEf(7<0yY@s0F@ldiULli2Dx~Ql ze&-vhl-;sGWb(X#H?Zf2QeQa&a{+&e$7-w6n1xtmSbgxce?t&&kOUT0|4aN$UIFj- z`@sY$Mi-}>J6X#4Ib z)~68e53ijDJb^Ro@0_3Gz2K=l44w%lik(U$h#)Bmhb4p+olRyZWH>r6fZz4%*&xT) ztDnLtN84uJvO3C{}Sj9pZb$}0%&WKMC zS9R`Feuf_bkNpKe2%PDM;!LtJ)x5`?x^Wh3?KX826B*ks)YvV{zm3llA4H{vY25tE ztsCZ};=)pN&{-ZcjmI7tVwp!WTMOO#uS-@D*~z8+nze+50{0pMMxC<(%Jl7t*R-5P zYo9Y8VyaqP`XY77Pz;`ks#Z$v#8iejLZq5J&4Ll)w7eRT&97qcO82-|^I|VB_=&$a z6!Qfh#-ljJKe7#z_`wg`Kfi`;c^fk_H|CMNs;tbaJWYd4iU2W|V%Q*=#y7EYy&RPK zf6wWPX3ym1sUL(NoAdCYn(&p0S=0BM^SFe?b9j8~0+JlAIQO}Ubxt_zBgRu$_(mhauy{F^)PtUwiV>%W2|+9Ko|iF-=52%h$1>tZ6f zz125*oX1rR)zFr`BH{c`9*JpT3%QMf4CodAMMKq;uz^F7>ouUt5+5Y!R8d3& zZ%GvnY~)g(9VZIMgyX_#;lFn;OcWC${)CO~T+(%!5_;IFUKh9c#ZI3Ifa9@p7cZXL z_MotiI+`n?NC{!h**b8p9omWC3q*U#Ooa3-UZmz)R|jd0zIr?S(@hkDkceBv0=B%h zNdjf9paC*6qE_fw)Jb*6eGCU;q?8JU9xRq;+!SKd-9G)fb(hM@JrH8xc^-c+!GKi3 z?#f};%KYmN&5icC;sqiHYFZ|WU%_Zp&%j;X`jzzgR z0|9tp%K>nFT6fzJ#jN6bkMF61&i$-Hgc6`HIPRG|h=PxA9piR`OFV@w#mN3S*PzBt zR+_~=pe6VH6Au_n2L=9!%u0816@5b!cX1V9wt$he7DDZ}vNru+?!uBTj^Vxo9BS+d zHL6dugDN|p1bj>RR7&^vVCiV!+Tn(-}`dUzan?y;~h&qYG-z}1Y-Djng^yQT7Tw4~R5T6}*zjWsZIeCi5 z)=MW+gH(9cc4LB=#dWm3Qa3Ex6ZkC!@!FseORyJ5seK`+sj310G}dH)uwvl70Wf?C zUUz&+ly)4^b*vx-i@WuAv+Uu)H=1oJ1VO-nkH58d5=csm*$s;VL;0yvAwpagq0PQk=U zgV5^~ZSzaz_vHWr$^v<)5i{{>QuE@a%}WXo)a^LT?FS0C71Z1EM?7*K0FtJx7s7QD z3zH)|O380Kz{RwH+7Xc-5$4u|sgYed5J3@}N^%!c$hyUJWR=JY0lm=O$PKU%H`jMa z(szU;FT5vKLf^#F-;J$PD;uA9zA9!y;z_Bi%7}#}zCw4^Hqeuq9K%ff)Ikh{LmCUr z8i)+qBA*U&(V}I91hiIT0e>XiW@NLObwL$;MbrcO=4VYy&ODvj7y^T&IZIrvmiv~_ z)@giSH6)6LG7Fa$<_-+u*%=uwb5i)|fmDuIsqD+r~cXthI=JqOc(iRr-rj)@hA0yUL`o+ghYgmI{xlDc{bi_sQzQ=M`~0VltZ zzm=DISO*XD_`LA7C3&xm&?^IZS1y@)RmJg=8atkPzWuSB4a@Qq!NER7sm_L0$h8d< z#+^j!(FJhHlDhAKfq)*-m|IILYw2hKSUSPTG5dq@--X}E|8BqX?mBGy5L-_aCe1sN z{$sRcwfpsGy794S<9C5beaHZOLZjJ&pLi4(W?!+opE2y%ARIaRjN5u8yAWs1Qxm}; z%9$s3i7r}FYe_5qlfUB8<%u9_is(}`imvAiwCBhl0k-ViQdQ=CE@`{3$~%Ezfl&Q* zHvOt)X=@v50=B7|DO*hdhou1V=s^*@i8*(;FhYF)=~>szTHBiL4~osb3Sfv3pX}XV zix!9L(R>oun2;7h5v^<3Nz>7HxV1_T5nvXr-3WYQUV1wg)}5_`lnEn-u7Q86c#YH6 zP9S^$UMAz3(4MmFA>sx6r8tvTYUXlI=*Qs`cGBjrz)&_gXPtS*HQ|zN+LxDTGFq(8 z&Q8hm-^m|dV$5Y6GP;LpH6IB6Pw>t)f9P+-N-o`W^8k}brP#Wk~5s5apWJz3Rq`yLZ z@c@@Iwp(g6+dL6D5X2A0hmx^TQR5cY3Y&@D^)QeeE_FscW4-dhFvXYzZ?Y$rcL&a{$x|b3vahXOSK`cR$$Y;g- ziNsbu955J>G4^}bQr5WG5g2O8rTwaOAwC}ZE84Kl?6%)`CJ)=Y6@1YVEy&9pSamRS zxF_;PsvJ|)lydFY(_7O)JAiri2-6^vvyg@-ur7z&1bWLx%783UT3$~a6|JrJ$gLI2 zn+VL-nI?+~uC|o8L(fJL5rvZl?8eKS=ugZ60iAA%0UCtNAi>@wFrmqA7ly^7w(~Q* z`Qz-lUe-IpG*6`G@-gfSTXW?r;gOJI-;AgT4)egdE{%sQ>Ct@|kA5Q-c zh6BF$JZrEr8+mca_R>XW-nnotcYGF3?mY7^RNdg=@e3l^E|df})KmulSP@+NQi4_P z$Kc9W6+SZ+Wx%USlrSh#H{O`KL^6S$G`yIv&Oowvg0oU}bZI6$knW`dp4Z%8si4=F zdKd!el0x#r=4YDcw3flLGHM_}ACqd#Z!8D*y$aacBuorB*Olly2plkCDE1|alXjfI zaU3fn1B5)IJvmTVm4XGRxkfuqpaJS5FH-e-Rpx2V?I;# z4d+&)Gfl3HKMq}nB|fjtROdeCs}|$oYKD^Yk%Ao-i-~}cJXPd(?v2UVX6UVo>n8LS zzNUzx@)3b3Z_b%84(I8PXUIwpXI5f|J1On)&ZFd3KdK-xx#Z99S0z3%32d`b)uq@| zp3_<;4suI}y#we3k1jM8wk|YLn29P9YT-f9-+~>ASM5LlEE-4h!vYCbLKDGtdQt9H zYrM3RUeaJTUtI6Gp@@59l-|9@Le2vA+g&|(x7|=h z8sy~7jfixNKCqFAMc*z`wRoV5uoJT-m@F{^1E*gUUpP|dm{B~H=4N}?{DR;#e4)Dz zKfPMTf~J5f2C!ASS2Z>)>$fknCb0np`jif{XtEl&!>o6EP@BVMK0(!}utuBZ~TwKV-{=A{5bj9fmjpD}zK{ zM$}WiGLZuT&MJw@tjMw)WS|SB5e-=MQg2npwQ-}W#0(4L~%*#T7HH3tZJ=?xz~L`qUH}pEGkEWwj2s( zsX4abPC6C9A`aiy5zaqtkfSmTS!i6eBsDhlk}p~7HRY;-FGw`YCG3L4mArqxG;(+_ zT7G1K#IO3B9cOiH3Cxt|yW?&Nm;nLyGz6Q2_2KG{lA7J_ZXBMgN+kYQNN4k1Z&fXv zPi#V;cE69&z}6~k3rmLjgJQ3RsLUQ`ix#`MHL-XjDy>?mK_WD?BFpzSO&XAjNEA}7 zp@b*l(H$;@K|8JT697wzRhg?KTAdRm(aL$OEjoAzIT76&yN-5vq+LG_{6w%>9Mg>h zz9C;&(HNjYwf7-0_BQpGTUzFHZvF7NX3jVtIB05{nKhb~NzH9Hvh?-g5k++mgJ6w9 z#lFP#WFGEZnKpJ2E?Kf-VAa7DuJZ z$|;TeB#|AL_}d`hiJ0C=skQ5zjHV&)27Izavc&RkY- z<{MCQIaF$P0utqClZc5t?fP`KVNtr`e8ohCzan$EBiivr$7Dy%mM@PYrKapn-ZU|B zH=i;+q}#D`65ctof{~eLvWD1?1ipkf{VDroskQ@vR-t;ghHZ*3oBE0~;o{bXFK}~l zICEp3z7`+P@P_3c2g$1fuaVU~^#!|BjF|e-{EJxg*CF2(LAOC>zh0Blr_up{XtuW* z!REz}%({d3c+U=QttX096zg}qSi2(^Tw2)B$!IC5hOb?4^gzdfqXnA6yOqt#-J6P| zqrBmgb|n`Yk=_0?`LgxARgZ^4-Og~i7{Dmt=Xk5-3hj=20j=3jepPnym;JoNlit<4 z%wCYk&QpBq(#N4XRPpZmZ@D=qS$hh*aQ#+yed)gsDt$WiIoUZuES_Im;Gln`Oyhqm zEOhL|zRdwoz_a(%67px`Z4CL-Tn<3*+)o7x^?y@W54x6StR(=8 zP5tE*O1yK8S<`Z7qjB((|LP< zJf$UU0z5QltS%cE9Lmix)-awug=tpZ!}v@y3Ld)k4AsP+3MDX{eSIn#TM z3$1|(WC|zv99-yB54wI`goh<1E+fdJxa?@xh9{y-$S-t0{`k%0p|Qpo7H^sv(tl@Z zZy%~1@_H(=;{0s(*V_4#!{Kf{9%*t-IwkcW+UcQWr=M3kmh*%8IxxkKbok`j+J?nA zzIxHR*4zZRGv@d~k2RBVf?9tM_A}-xXAq z62>2xIpHK}2D~tw&}&m@1Uy+YF#~q?{q+0Q9kq9Z;Px5(D|5j8tkdzt69Wgy!JaJ* zy7buRgX8vq3x8r8tQB%=1-4(ctCbena@}_6>I4WSPKlEU`9#nN<*-?i&5D^}8Iv1T zKUpcJ>DTlvZHR54{=|MzAa>ROs#IMlf1hx4A~f@&m<-LhDDfXA80aL&GD1o5#mpAr zd2AfS;$JOduxIjsY{N2<^2L>fMC-~J&t4YuOZHVA%%6Gx<_T!OS#XQ=onr8)YeH6z z?6jPhUt^*Y5l@63bCs3l<+=EpC_F}HI}YX(HZ=9Xfm9Soz@%4$UPyW&h%Inx`u~n> zS7QfWR~W zt)}B}%9w&*K`*D>Z4QEX9oV&N`mi+&|F0;y1hx5jDWr1Fw#ez~<^$MqC_Gz|m0^&C z9|{J?Eb((6FV}^bdM9wG@0Zc~XfY#>-rBx$;?$)9r`35dHLjl)_VWlJg$KYWJWG|t zRx4%Inj}CWj^Pcqs47gRNx!*bI1ZbcG30DnF7UxRYhBzp(>uetK-oFzf^m+%yJ9Gg zLzn*MbWW=eJ;^Uu&f0}o{Y~q7del3^H*O*bvbx2O7`vzu#_k+ZgUhS4dN-!W>8U(C_2L; zazelxSs{ylaBj>+Hk;tP-dMp90;^;P6}1tlR3X#086Zu^cl|M;jo>mLS*BY*+0v!R z;Gn@kC28zybv5df`uq%)>6p+w8JM(si&?#@J(K$41+sj#vth@zfdJgT^v(D5ur=!E zgQ%R?Xybbk3m%BygJWygsJ;`?R4Bu_T-h;N*nG=TKe!HaSUA{8>@qCd5II9>)j6m1g( zE@~Ia8BV048aWzxEOuq{%*;=#ndiaMe)Qemz?JPyDTI>E+o4VRPT)SWz<=L;)zv+d zJ9j3EzJ+>jvExL6l#qvN zYu_To@=5GvqCIA~cx}?_;P*SgN()uJ-zZQjG`iiIR^#y!BwuVV=K8k{rN&_&ebH&r zsH1|En(1^N=j6WV9c|QxAhJ-JfIhyTOr+!{%C63;%~~>cdtT0O)Mw~6BU{(ZjQ952 z?>g%DkKt(oefNU(-kXm~5cRpWVgZw}whXjfw}`LSZ`&nK*?bUX45B72DWq)Ybt_0A znxcivf4^f@WGO(g*<6GkpZ#=hs@|z>Lqpq9^S*t}40Xo{X8qf7wnLW}sLo1BNFWJ* zGSK{vW^u%y+sRjw&VOCN^8$13xu*?P z?QN1ZHl=K(L9ycmCM0M+aUy4Z>g}4OnAhTxV-~DQ=Hy&{TpTgttivsTFOY>8g)ECP zB{MyHX@*5BV~ApgsjnAtG?-(8J5KSMjOIPO2Hr5!Mf ziEVpe;~^eNM?m&gUBN_%o>{YIMpDd7xK+VvkL1_GRtScOlQU(!Va(9)a*2w#vi$+h z;?Zm-2UN5(5Ue1MvS!Otz;awZT2Lwz8+qU0b+6C*cG z(=v_55k>2zsIn!hZKVfF@8EG?H8&4_+um|H_w$ZF|JU6)hgV&6%~vg zJI)Lnx5?L0d$SSj>0qdX>EQ3X1_vddAwwSJvmUd0`ptiO9ZV`RKDjY^xQbfu6O$%5 z77ZSFc;}8<%x*{PckMvVkfAapzn}0)s_vcTvQ zr?1>cHJK=z%{@MDqB3*S4OHQ2HeXj~&MVE-gY=?FMGua!=cY^)04t@WN~B*k#|?s3J=oFAev4T`CQ$=i24P!l8t1)czTqb`ry(BafbI5ab2cS<8& z*=}8M08>D$zd-mX%>2uvT()B%8+2~leOq-Oap2Idoh_Z!+Go&~wDP_Rw^%xW*WP*; z9}swCK6rQq;!hwlpTac<5sGw?k zpnP@!Tct@7sUg82<*+)la7n7(N`gCRiMQRflNHB1swEtkP1OqUyN3*ndh?LF4v*}~9 z9Ge>Ls2vFL>0zoXYJQna^b;}EoZzCh!jxYr5_$n3D1EcJeyreFaP7=z@r*7Dx4tcY z37tlt7f$#0?HXGV?jtJcL3Sa*oWB46MEDOAlf*OucK1+O^3d*&3uxy58;1-i;Ms5RykT16g;ZOyyYHdYBi!hH#HZyeI_Z@#a`jUEZPw zUyXGpXBdCbXTB;rqkL%6RvvLJ;36UY;!l3*F)`VT|=POv0@7K#w4EikB-2s@;_dp_u3_m*-n z-m*Xk)SAdaQrkf~$T_!n*&Nyf23D{qPRe7Pj1kpL4R(+VopdaNW&nr+!x`el+I#V{ zfh5-Ie`~ORn!y+mRcG=zpJpH9(`|b-&8@H03l<{s($Wjm#RG%Jz7>Xwfto{cBA=ls zj!CHXM%!mvZu?W`Zofn1n$c6C^D!Sbe)ypzxjbf?^vC+5B5|;Rajnd+H8qom6o!F? zpRSpHEqVd%n(B~s{EfPak*ElMi|pU001ZBSb6JPkX4C7bz}~eDYu~hixfY)vp%-a$ z;!kQK3|CvPu8O1sIXRM`3xzDRv0%0UltB&LF^c=zTE;6s4ud`j*Np*PobQfj6wyHW zxi^54$&w}_RlxzL-YHScP6cm`9!60FdC8%80MXFWY4J1BF!cfO3oNWWY{AZy9-c$| z1w|r}ZBm|&)Jr!6XR?rELbSlVIEonKUZG2%15jXg=0Iqs`%pl}q7OgR6CL_5v~I$S z%ZLn6geiyOV`#yRebvEeVR~kKpLNx22jp*d`#m$UaV*_MD>pD*s@9Av}t{7qC0A6`368lNg@($<0U2=i~QCv#<8FF5;R>w*@jV8gMH5j4R zW;%kio8{oUK*(Te5DQIpNTRc6gqLF*fi1r2tFP+;BDcX&KaOrW*;@I$TOa6|uc_I2 zZD$|Leb$!NxtO9A*W3gltq^PFRa_($#w%VQ>){6>8Yjw7@pihf`?&J34pT@>YtjH-R;u#m#O8Y{{|w1v z%)N+v1N+5*Tr^$wf0&+@$LHu1(ibmIPY9*QMC*#J~c0EMU67f1tnPz@|&oI04X<^hKw34*8^IhQ>PY2F{JBt1=> zi++X5APJEgS)(r?N&QergPN9|ejfuMME$)T)(jZHMFA$%h}iQ)9ZtiN?#d{l7SmxI zCw5Hz?6%Fm(`p8h#0ZLrlBD5=Jf?-k%UGs%Dr-|IPOf&ew-ZN6W8+KzhwR(2qb{p9 zvu0Nt2M1xvjhmOiMSf~ylv6x7Y*b+PQ;~!l%u6Uo3kB2`g`l#EA>_VwHR`e$BC1QANSNVk%NcZ`h!tBd1o_sSbiB)+2p7?+g4lkuOs_I^2A?2vwexUS8H!Ufxw!o{lEH zPl3;xv&Qbe=HK_fT3SF9rffBoe%CAZv*FJ55j^wq6r!-8^{S5yi#c{M_h+%!Khen_ zYbr`_o}*FkNf?^-cXMfW@<-rMRPc}2!HW`jv%tf?lJ$Riyhn)eY#Yc1#fR8YhS(52 zR?gPNpE&eR@|sL0?U~C;HpgY}_Llpm)h|+pHg#;;bm$OQ!t#Myr>=9{f*KtGDUBQ$ z;aOnx=vL(XAXZ3n!aW{`t~nI!Bvw$9U=tY^+C^YhP3n(Qh;E|+%h zc^SRjNzR?dc~Xy`25kAOIrcv^K;QGpj8b-X`oZhCX?+5AvjLO?v1y2@ccW=?HU?5ehY{?%^x26T&l z`>5#UOX{xZ+I1suwc&p0+GB%S!7g(?=YsK&+S6QfXG~;ce&?O@BVLSaceE}@!+Osz z3mqU4@7M7h3NsW@E}Sp_J}xZsI#PF3CJ!>MW~-%Ws>ot+=lH09Rq23`0bpyiSO{y+ zPDwg1XV3MpY2z6o%MOBx!{r*k)E{PVD82K|`u2GG9Z(ku_Q^v|vm}W@6cmAd*iXVX z+tYe0-S(R|j&>8aOM{5JH2PfxA7b69-Bra*CLemZXDD&LxcR}4(=jH3^p0jhG=sr| z@pnh~|AD2{HIpO^*uxvDyc4D;qEFA;8#_j1cm~JqJ7R8@`h%bN-wH)fqvRaL!)+hJ zi$=u}>yiMK1omW8`89Ua`G%9z!j*=V*K))yprIk!-qzmG#{J%|Pq^UCvISMa4GWJ) z`T6)IlFjx?P}SFMZB}M&4UEP$*_+$kI@Y>1?ADvq`0PrhH@Zu?yARjB{mIswcmyFd zf}P_9Exn*5fEhC+>1hqQQ%TYT4?v9y;v@u|sCX%b8cL##c-JXOL;XO^veDntXu9T8 zup8;KpAOO)LqiByP*pA2A}BIt^YLIjiICnXK@#91M0cTMHu2r{q>TW4zd`hBh@+HO zgC?^`^okc8CVPnwEmcGcfDMwd7&TP_oXiC|!i5R9+{p2}jvpHq|6OL=H$t;X346+J z4UETc?cP7hl{owr1CoOkSb{SKgZ&U~fcY*<@tYO15Bmo+ELfA;O95mI z042M-IES3O%m;%Hy}dUT#X$b4NAthFof=eCGj+8}>m|p^_3KxzYC#<>*JQy*LYY#Z zgg0elql}G?)i$@yw2__mg`mdQXx#YRQv;tstuZI#|AL9sqWc_4$l>ghMwFBEH$?(| zT0F}ZDWaJ>(tNzT6;g{BjJeLvZB}sHn+~nYsfpAqntXzT+;duV2qZ%&&_1isDKN2f zBrr;GdUQ5{j}Zt1ud`P~SFck?oQ%rUy^bRy7$#w%w48lRM_lnx<*EZr6Xs29ajjQ_Mct=R};oS%OSIe*UeKpk&0cK2Ahfc!3>w1f< zJTw9Jkn!uW84{WYW4rwG|)h$KlB*+0M>>)_DZZLLqH* z3s6?4*Ee@Axxzmy>xpXW32I!mRY%?TjyCo`4j)P*(|y9c_>V4nhXiLH32W0XxIt`1q`j{NdTmgpb15=pyO+BE|MsNVJbi1P zK9(aPJv%E0BjS`dUhL^r?ed^VSoGm9$vTPeOVI-MUqPP^%v!PPDxFzWn)!3le2;Ca^e_KAXmiJ^2zDOLX6wdGj3KJ|1#=2Cg-o&SfZ zk7(Whn}a5C)?p0r0s@H8D)V9fW3$(+F0Ea?rm{I8nFdTMQYj=+(ndeR*qdd=)tLg? zhziHe2h(5>oF&+>Bi}riUlSk7JHQ>P?1kwG52Z&z(s#Ut(uGNOdd}*7OZ_GAzJAA8 zi#@kRg3e&y{$IKFs696;&z`rBvk(h6Kly{SCpXXXC?Ri`E<-EQ8X!5h=|_rc95sF> zOy#!GBz`mUYD9e563|VfX&Vq4M5zkMm+iGiF``cMux|F<%!I{z zrcoRd%ijat9lRjT=fM_;o4W|t;xR>E+?+gK0bHa>3kk$vN#T@zR<;jo`ZT?obsDfe zEFwo)GG0lU~#mgKzla^iyW57T|OnZewAqQh*m3C;y%S2}^Ea)cv{?%S_aP(XkES z>CVq2Jd^lY!hM8U1j~AQPxSU2?KPL;IiaS-IwgujEh;##f<2?=SIX}?O%%}vP8MzbBe{T*L@ z;Sv1fJ0Goy*%jmAuBf*za+>t4%$=E8J2Nxj=^t$Nt8GzP=jRLroBe}kuN!KiO4ah^ z(Llgj^@@IgcClrXob()J#Hj5|v7WD( zur78lx=__vUuSb-BJWZ_?8TlMANJesy*ED~0a<*`t~=g5&JG<4N|M4LO|BZjAiWTs zB!W-yQS_saHk_*+6gxqAx7Bbu%UU~6qypbxGC8x>{GWNl5=!r2`&q9NZERfrM8jH` zg+rm`1~=_$Z@=}u{(8Hb?yu+n`fGd57Xt&yeDhz`0RG-7^^1 zIukFA_lGsuDTG{W#x_4yO+D$!lb2k1DD2DHoAz5z&e~KLqm0KwOQQ1^UP=U{f8Rqi zd0#q!yn{moD48NZqUz5GqZbUMbscqJg5B>;L}pVTEnqY|Yg^AAh;zv0OFk{h z64T7BEsI-o`i~}O=uKaSf4j+SLQ(VunnYXYsCxg3{mr&^T7 z<5OMsZwE{l2?4tF?dLE-VpSG*3EenYY`|xNsiGp3u71Fltz>Km_L3zOoPtk8#kes;8dh zc`0W7sDq5obu6<^CI$9ZyKeg;AI%r`8f3$O$u1iP&CA)uIyCl1OB(720^C-sqbYex zL)Dcbo+;&(cB0I`l1C7&3o;6rk&zspb1AgWxduh?Kqc~U=>4EkhY+EmOeb;rP^@B7 zPuX?i_oS%%pMg(&A4&{^P_8n>ID2g^o?Co+~*n_LxMP!Z*Nt@MLI zGE7)0&-Zr_2%$S{ho2%}u{gxj`jen7-TBlrr&s+5B!R&(BC!GGY-xe`SvC^uXWgk6 z*?Y8SXdgWUjc(1LZZlfSJDmMu9O*#k#@kJT&}r87hB?QDmJZTE5CpSgxs)%pWNIlz zs}3X&3H@GSE5VW^7sW^s+qp4n8>j=~MM2~`&${3qbygB$ozghXf zV=n7r!a+(w01#RBaR}0^`aPN;{5lm!E!cs6AKxgf$aJsKu$9obzV|2mY=Mew!3NajU_(ZxEnC8MF)Dc!@@!h|X!e`;CDDFElhAk&YlWO3T#a;;fDN4_K`;Xrw_)inA&{iK>(KwErOH%hS^geBZ#D@{+Tf+mrsOE~I$Nu=G08JiO z^W7+RYQ@e$od0p~qAfnZ8*%7=k)HhHYn}Z9pRAAjxEWUezmiH1l$^^6_7}HX6mU5s}LE3(`-b=ngT2w2IHV<=2@Zx6;jz8&6_N;qg@cJ7R0%hNy4vk|}FOZQlr z!L%S*-dzp58rUmx4B|V?AtFXu`o{3lYt(89%rBOERcmB|puHkySoHey;UvsZn-IV& zSlMyPj^u=pQYNFT4>`k52BOaUOAzy5FLns1@6z-w=$yzY3DA7L)Q~6I)?)~TX~yQK zd72?6qgf5Ma$?SFTy&AU&$H#F3dxKf87CYc?whzQTY5FFU}5$!S1xUjRBgFpg{oQjNh zb2(+{x0yM?Dw-?G57yK&zIZC;C0#QAp03EPs~rubE|$n!1kO%-c>-87Nj4`J!?MMg zCN0E1#fJ&3C&rsigC|Z}ku&FelH20ri;a82%2_CJn;n^^L^3h8Si#S(J-Hkd_xw`y zFk`!YOy_I#kWyD-6?qYy^Rcdgb=CToRSWGm>{jcfHG3;ZsBo71eEy+kH3)kefZeqj z1yMZRAP4dTwQm@k94!6$lTZHje~O9J?6(a^2K0aB=(~1I*jXCGF%inQtqX~j0k~Ce z7~62$tap12%pOB@5}|S#dh4yxH{Y^k&6!qD{_UY$eRC$;OF-XOVQ-bFu^qJ=ziOP{ z#54UB4$={<=@)pL^mk~7H%W)@-ni**t-Ta{@qabeWHsuWAYrj%&_5wYUI4p0@zkyD z&34vePB$-D5P`Q;ku5Uio!?^di|WR=&1LocJpA6q?BCiV5(XUkL}8hpslcuOYaHL{ zvh2^L;m`ign|9Hete04nufpVkXdB|?Z3ZF~!0ul5!L_*fw$*li`sp#7jxd7fqe7Ma zq@A|!VhZWlF7=Xj6`A>wl}U}uZN_ECo;No2g)K$vMzy^(rVP%OC9bV3mo`Kcd^ zVLw3-#7ft%GydYTN~M>LiLV+bjm~DC!>jE0!_i&4C!$lp!L7j|@?(F>g-4{=%(ZK- z_I!pu+i3`36T*^Bdu$Ce@qv-`$QN?JKml|_?(SLwZQ#Ni7G!y_!I1P%bm1ZA@%oRZ z>3+w}Kb>}}1Eb(~%8spVx^^#a0ur2J6Y zv%Ir%XXv56Wd=K+=DtHybyQ+bU&OA6)xwm!s?E#n|)tWVitn>H|XPHb#CN7VeOfyhID=Z@0ri8|5 zmHXdesJ1+Rjcr?Wl84;-Jj2foxxS3~`yaNik4+q%k9^nFpLsSiW?TbUP!zT0H@3Mp zE{+9;o%EBc2y=u=t3u~7m7CGTL)M=xqC1(i64uE;56HjJ(UG;^%Qvf!;kHqBNz#F3 z7Mp4Ee@x4flLhr(nV1YQgxJ&hllMvUCw-Jm990qq@4hNK1~wL4irtthjHnRe%xB=H zTKT`ZO&gD#iRHL1XV7FLotLT@gN-HZxAeWlYGsv|d>itaWKm5GfJ21D38I9GLka7v z=8l~KGlc!ZUSVg{vY=09v+u|XUsA&I;qvy3?cT+{lg@T@u*=%}dwSTK8s_Ik;8sTl z?!W7eHyRte5+^A8BI)x?LBYZteom`nn8fbxeS3RN1XDX^4^U&AwpU0TZK?L|e@=jA zJNhh!Q{BYO>mhFefMLnMz-)UMw%0^V2gm#{kLm(~UbGzvNjs>i9&J(1YNk4JEQljL zsZ34AV}ouDiGAyAfRaIqSEmyO8U%X!XGSciELB?Z1xq0)^kOOyTso z-gW23P8@Xx>7^NOT^C1+ufLU{kEJYWPEf=8_{hB0mi!oVq&Y?#1Y$jX5=st|9S#yY zFHO!=7}Y#Wf^ciiXTgi!ujuTYUbcNbhU8@T&Ob#~uWo3Vx0zOlvTY`sr9Cq99+B`J z;j33Q>s~yWV#Yy+9Xon0mND;i`7&PDd!WkFyK%9yb1J?D;m>yEbJlaZg`vV|JpVB} z3e?+XDvFH+M7XS4T|U*ya6$DE>dJJnBNL$9Fp49-_3#`3#45nM62H1VYQ(8p8RO3( z-3zPf7kt_KgEj^C1ih>W&Mxqa_4jlv^Kwlz)E&GtNCak#K_DnBIqIDswN|4DT8IdZGL5e}Op1)5LfU8IJn z5nL$d*tDv8Wv11AabBM#blFD(PpmPi4Qm63ZA#>(nG|j3NR3n^E!6^dEMjtV)h%J4 z=~kEiR+oB_4;T&rdUTcF84!s`6j2nXG;u_9lDz~Rz@FY{VNJske+21aQFk&QbM*DY zkc#MJbU#HR3Iv$UHfaCclvlpBwme=x8J&c{Jf(zjemIL?GG%aAdmr!oPW2PN`X!WD zKj9V~->}b)>bO|Z+IqOHZFTXw@{h+Vy#W+J-jYje^j{wl5G~Jn8V&d68ke=z)7QkL z5~y@8f<;_~%}Njjrm|VOTi57w&D|_{;HoHZAg-McNFc5~GZF@8RAH3a9^z;CdD$np zA@ooj&)LIEckfgd21P3T0h`jx%P88GCU(!qGQ^M4S1NYTOMlaTbRr%BaA^xVWL{Lj zs0bzePm5S2A(2BJl9m!j`Dtgx%91VmNTb_qB z+{JAv*q;;`*t{AL@HCdDo=mui7y&2VAjVO2Ud=4~WyTOvfP>O5(g>0gXBq8M3%#P# z_4CrM75iNm9dn7=r|#5qCvPuL?XwVV%CC%C1XJed#oT`%wddl|*G$6c%Bu2uV`_Aca#kqGE-%S#X+2T;;B>DQZ_fS|%YT%G{dVSx-*7;Gz#0j%QC_`7 z5a0!o)Q9L4f9IzYS0;GpQIwUU@=(L9L~!WEeW7F10{(HChrkMyfH)h2TEsaAUhZ0B zo0I6p;Vo-kUA*{)3X?}LZ(NS#iRPfExN7NEzPeTQ{(VkY+QJ~-@`ro+)gEb(oasU9 zCC}b6yah_vFXr$$WjtOPhfn6W5wK;cD7Y#&Cbvo~1fxeUX=JNRZmfCckok<#1Q^9e zrAphPi-uzYzS66lg#?s6wyMM{Jpf;ShY8`l4_@x` zc$@(fe%?e8WE1ucT%Y*FCNcL&XziIZEFb#0uV~03@*`1J0)FHN@5TFsUfpSvBSHuT zB$cWvB$JBjr`wq60>kyO38r!EE=!&N;Jkh|s}wSt!Ft`u+({WaELyvqx1prS`mP<@R}ikzI(-VZ%8ed)nfIzW5=qYB8C8 z@oVsWjGFkmSYy7IQ1rU0J$r0Vk0xh2uHD%4c}327yL)u8=HUdT{XHl>qw}ux6|-k7 z8`x^!9`lT5rCnm{YUhpDC?Pct*ZFgtohAV=Db{@RAK%6Pia`P;VDAmWtq$>Wk+^lL z>xDDH9w;Q)p7jrYRq?0<@X$4D@R6~h`LW(!wzs$W`%|a**%j?I{0H}@Kc`W?O+r|K z<_OtnYyG4f9{;TSBi#0l;qxWKdkTU>$z zIAEOrZJfMAf=uhc-cCMArK^h6*%liK%6M79DiS|#Bj^IpIAnJAbiss!7r@&sjQMna zd>qKxWFlFW>g2}8Wc75o_OFQiIy9quy!A0UoPjgewvKk!g@>5UuSEd+{+6~c zw=+u;*wxb&+C3p#8<92B$D}jG#EtGNG5q=Mj4jDexBU6&6

0@Fqs*TLtpDs9T42 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 Date: Thu, 18 Aug 2022 10:35:47 -0400 Subject: [PATCH 098/122] Add a button to jump this event time in montage review --- web/skins/classic/views/event.php | 1 + 1 file changed, 1 insertion(+) diff --git a/web/skins/classic/views/event.php b/web/skins/classic/views/event.php index c024aa423..6f108f18d 100644 --- a/web/skins/classic/views/event.php +++ b/web/skins/classic/views/event.php @@ -173,6 +173,7 @@ if ( $Event->Id() and !file_exists($Event->Path()) ) + grid_view